http://seprize.narod.ru

Создание главной поверхности. (часть 1)

Для того, что бы создать приложение работающее с DirectX необходимо после подключения заголовочных файлов в разделе private описания класса формы приложения добавить объявление двух переменных.

FDD : IDirectDraw7;                // Главный объект
FDDSPrimary  : IDirectDrawSurface7; // поверхность

В обработчике события OnCreate главной формы приложения необходимо добавить следующие строки, содержимое которых скорее всего Вам пока будет не понятно, он я постараюсь его объяснить.
Добавляются строки:


procedure
TForm1.FormCreate(Sender: TObject);
var
hRet : HRESULT;
ddsd : TDDSurfaceDesc2;
begin
FDDSPrimary := nil;
FDD := nil;

hRet := DirectDrawCreateEx (nil, FDD, IDirectDraw7, nil);
if hRet <> DD_OK then begin
ErrorOut(hRet, 'DirectDrawCreateEx');
Exit;
end;

hRet := FDD.SetCooperativeLevel(Handle, DDSCL_FULLSCREEN or DDSCL_EXCLUSIVE);
if hRet <> DD_OK then begin
ErrorOut(hRet, 'SetCooperativeLevel');
Exit;
end;

FillChar(ddsd, SizeOf(ddsd), 0);
ddsd.dwSize := SizeOf(ddsd);
ddsd.dwFlags := DDSD_CAPS;
ddsd.ddsCaps.dwCaps := DDSCAPS_PRIMARYSURFACE;
hRet := FDD.CreateSurface(ddsd, FDDSPrimary, nil);
if hRet <> DD_OK then begin
ErrorOut(hRet, 'Create Primary Surface');
Exit;
end;
end;

Прежде чем вы набрав запустите свое приложение добавьте еще строки в вашу программу, которые необходимы для корректного ее завершения. Они соответственно добавляются в обработчик события OnDestroy.

procedure TForm1.FormDestroy(Sender: TObject);
begin
if Assigned(FDD) then begin
if Assigned(FDDSPrimary) then FDDSPrimary := nil;
FDD := nil;
end;
end;

Весь этот пример должен пройти без запинки, если у Вас установлен сам DirectX. Но на всякий случай присутствует проверка выполнения правильности действий и выводится сообщение об ошибке. Но забегая вперед скажу, что при инициализации DirectX сообщение об ошибке вы не увидите, если только ваша программа не работает в оконном режиме. Так что предлагаю использовать вывод информации в файл, в случае ошибки. Этот файл всегда можно будет прочитать и выявить в чем возникла ошибка. Для вышеописанного необходимо добавить еще в раздел private описание функции, которая будет обрабатывать сообщение об ошибке.

procedure LogOut (hRet: HRESULT; FuncName : String);

procedure TForm1.ErrorOut(hRet : HRESULT; FuncName : String);
var
t : TextFile;
begin
AssignFile (t, 'Log.txt');
Rewrite (t);
WriteLn (t, FuncName + ': ' + DDErrorString (hRet));
CloseFile (t);
Destroy;
end;

Теперь Вашу программу можно запускать, в случае ошибки можно посмотреть что именно произошло в файле вывода ошибок. Ваша программа работоспособно, правда в результате ее работы просто появляется окно распахнутое на весь экран. Но этот экран под DirectX. Теперь я постараюсь объяснить что именно обозначают те вещи которые Вы пока просто набрали, не сильно задумываясь. Хотя наверно определенные ключевые слова натолкнули Вас уже на кое-какие соображения. 8-). Так что все объяснения читайте здесь, в продолжении статьи.

Я специально разбил на две части, возможно следующий раз вы решите просто вспомнить, какой-то определенный участок в синтаксисе.

< Часть 1 | Часть 2 >

. : навигация : .

главная
DirectX
уроки
словарь
гостевая книга
о проекте
 
.: DirectX :.
введение
уроки
файлы
 

статистика

RAMBLER'S TOP100

Если вы используете материалы с данного сайта, то сообщите владельцу по почте
и вставьте ссылку на этот сайт "seprize.narod.ru"
seprize@narod.ru

© Сайт открылся 04.09.2002     Дата последнего обновления 28.09.2002

Сайт управляется системой uCoz