Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как создать окно для DirectDraw посредством WinAPI [Delphi, Windows]


Zeqfreed ©   (2003-10-09 16:59:00) 

Помогите! Скажите как создать окно в API для использования его в DirectDraw. С теми, которые я делал DD выдаёт ошибку(не помню какую)!?


Zeqfreed   (2003-10-09 18:45:00) [1]

Всем огромное спасибо, всй разрешилось! Просто я немного ступил:
Процедуру DDInit я здесь не полностью написал. У меня там ещё есть проверки успешности действий и запись результатов в файл. Так вот я, забыл перед тем как записывать результы в файл, вызвать процедуру BeginDebugFile(Описана мною в др. модуле) предназначенную для открытия файла.


Zeqfreed   (2003-10-09 18:37:00) [2]

И ещё, когда вызываю DDInit с идентификатором стандартной формы Delphi в качестве 1-ого аргумента, всё работает хорошо!


Zeqfreed   (2003-10-09 18:21:00) [3]

{DDImageSurf := DDLoadBitmap(FDD, imageBmp, 0, 0);

{DDSetColorKey (DDImageSurf, RGB(0, 0, 0));

Эти строки заккоментированы


Zeqfreed   (2003-10-09 18:19:00) [4]

Да без DDInit окно создаётся Вот код:
procedure DDInit(DDWindow : HWND;ScreenWidth,ScreenHeight,ScreenBitDepth : Integer);
var
 HRes : HRESULT;
 ddsd : TDDSurfaceDesc2;
 ddscaps : TDDSCaps2;
begin
 DDImageSurf := nil;
 DDBackSurf := nil;
 DDPrimarySurf := nil;
 DDMain := nil;

 DirectDrawCreateEx (nil, DDMain, IDirectDraw7, nil);

 DDMain.SetCooperativeLevel(DDWindow, DDSCL_FULLSCREEN or DDSCL_EXCLUSIVE);

 DDMain.SetDisplayMode (ScreenWidth, ScreenHeight, ScreenBitDepth, 0, 0);

 ZeroMemory (@ddsd, SizeOf(ddsd));
 with ddsd do begin
      dwSize := SizeOf(ddsd);
      dwFlags := DDSD_CAPS or DDSD_BACKBUFFERCOUNT;
      ddsCaps.dwCaps := DDSCAPS_PRIMARYSURFACE or DDSCAPS_FLIP or DDSCAPS_COMPLEX;
      dwBackBufferCount := 1;
 end;
 DDMain.CreateSurface(ddsd, DDPrimarySurf, nil);

 ZeroMemory (@ddscaps, SizeOf(ddscaps));
 ddscaps.dwCaps := DDSCAPS_BACKBUFFER;
 DDPrimarySurf.GetAttachedSurface(ddscaps, DDBackSurf);

 {DDImageSurf := DDLoadBitmap(FDD, imageBmp, 0, 0);

 {DDSetColorKey (DDImageSurf, RGB(0, 0, 0));
end;


Mystic   (2003-10-09 18:08:00) [5]

1) Не слишком ли рано Halt?
2) Делал ли Search -> FindError по адресу 00403E28 ?
3) код DDInit?
4) Без строки DDInit(Window,1024,768,32); окно создается нормально?


Zeqfreed   (2003-10-09 17:55:00) [6]

...function WindowProc (Window : HWnd; Message, WParam : Word;
        LParam : LongInt) : LongInt; stdcall;
begin
 WindowProc := 0;
 case Message of
      wm_create  : DDInit(Window,1024,768,32); //запуск DD
      wm_Destroy : begin
                   PostQuitMessage (0);
                   Exit;
                   end;
 end; // case

 WindowProc := DefWindowProc (Window, Message, WParam, LParam);
end;

begin
 with WindowClass do begin
   Style := cs_HRedraw or cs_VRedraw;
   lpfnWndProc := @WindowProc;
   cbClsExtra := 0;
   cbWndExtra := 0;
   hInstance := 0;
   hIcon := LoadIcon (0, idi_Application);
   hCursor := LoadCursor (0, idc_Arrow);
   hbrBackground := GetStockObject (White_Brush);
   lpszMenuName := '';
   lpszClassName := AppName;
 end;
 If RegisterClass (WindowClass) = 0 then
    Halt (255);
 Window := CreateWindow
    (AppName,
     'Win_Min',
     ws_OverlappedWindow,
     cw_UseDefault,
     cw_UseDefault,
     cw_UseDefault,
     cw_UseDefault,
     0,
     0,
     HInstance,
     nil);

 ShowWindow (Window, CmdShow);
 UpdateWindow (Window);

 while GetMessage (Message, 0, 0, 0) do
   begin

   TranslateMessage (Message);
   DispatchMessage (Message);
Halt (Message.wParam);
end;
end.

P.S. Это не то самое приложение(то я потерял), но что-то похожее
    Runtime Error 103 at 00403E28


Mystic   (2003-10-09 17:16:00) [7]

Приведи фрашмент своего исходника...


cyborg   (2003-10-09 17:04:00) [8]

С какими теми ты делал?
Какую ошибку и где?

Криво инициализируется директдрау.


Наверх

Титульная страница Поиск, карта сайта Написать письмо