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

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

DDSCL_EXCLUSIVE


Evgeniy_K ©   (2004-08-01 19:43:00) 

Почему система не хочет ставить DDSCL_EXCLUSIVE? При этом раньше работало, а щас нигде не работает, мол FFFFFF. Код уже на много раз прочесал, так и не нашел причину. Остальное все исправно работает.


Evgeniy_K   (2004-08-03 19:09:00) [1]

Если запускать не из Делфи:

Регистры:
EAX=00000000 CS=0000 EIP=00000000 EFLGS=00000000
EBX=00000000 SS=0000 ESP=00000000 EBP=00000000
ECX=00000000 DS=0000 ESI=00000000 FS=0000
EDX=00000000 ES=0000 EDI=00000000 GS=0000
Байты по адресу CS:EIP:

Содержимое стека:


Потом ошибка #216 at 0040372A


Evgeniy_K   (2004-08-03 19:07:00) [2]

 SpyError(
    DirectDrawCreateEx(nil, GID, IDirectDraw7, nil),
 'DirectDrawCreateEx');

 if Windowed then begin

   ZeroMemory(@ddsd, SizeOf(ddsd));
   ddsd.dwSize:= SizeOf(ddsd);
   GID.GetDisplayMode(ddsd);
   ScreenBitDepth:= ddsd.ddpfPixelFormat.dwRGBBitCount;

   SpyError(
      GID.SetCooperativeLevel(WindowH, DDSCL_NORMAL), 'SetCooperativeLevel');

   ZeroMemory(@ddsd, SizeOf(ddsd));
   ddsd.dwSize:= SizeOf(ddsd);
   ddsd.dwFlags:= DDSD_CAPS;
   ddsd.ddsCaps.dwCaps:= DDSCAPS_PRIMARYSURFACE;
   SpyError(
      GID.CreateSurface(ddsd, GSurface, nil), 'Create GSurface');

   SpyError(
      CreateOSPSurface(BackSurface, 800, 600), 'Create BackSurface');

   SpyError(
      GID.CreateClipper(0, DClipper, nil), 'Set Clipper');
   SpyError(
      DClipper.SetHWnd(0, WindowH), 'Set SetHWnd');
 end
 else begin

//CORRECT DDRAW.DLL EXCEPTION!!!
   SpyError(
      GID.SetCooperativeLevel(WindowH, DDSCL_EXCLUSIVE or DDSCL_FULLSCREEN), 'SetCooperativeLevel');

   SpyError(
      GID.SetDisplayMode (ScreenWidth, ScreenHeight, ScreenBitDepth, 0, 0), 'SetDisplayMode');

   ZeroMemory(@ddsd, SizeOf(ddsd));
   with ddsd do begin
     dwSize:= SizeOf(ddsd);
     dwFlags:= DDSD_CAPS or DDSD_BACKBUFFERCOUNT;
     dwBackBufferCount:= 1;
     ddsCaps.dwCaps:= DDSCAPS_PRIMARYSURFACE or DDSCAPS_FLIP or DDSCAPS_COMPLEX;
   end;
   SpyError(
      GID.CreateSurface(ddsd, GSurface, nil), 'Create GSurface (Primary)');

   ZeroMemory(@ddscaps, SizeOf(ddscaps));
   ddscaps.dwCaps:= DDSCAPS_BACKBUFFER;
   SpyError(
      GSurface.GetAttachedSurface(ddscaps, BackSurface), 'Attached [BackSurface] Surface to [GSurface]');
 end;

Вот, если Windowed, то работает. Иначе на всех машинах экзепшен FFFFFFFF, DDRAW.DLL


NikeOLD   (2004-08-03 15:09:00) [3]


> Evgeniy_K   (03.08.04 11:12) [6]

Проблема осталась?
Тогда полный код сюда


Evgeniy_K   (2004-08-03 11:12:00) [4]

Нет фуллскрин стоит. Тут в чем-то другом загвоздка...


parovoZZ   (2004-08-02 12:19:00) [5]

Ну раз  раньше работало, то наверное не в этом дело. Хотя чем чёрт не шутит.


NikeOLD   (2004-08-02 11:40:00) [6]

DDSCL_EXCLUSIVE
Requests the exclusive level. This flag must be used with the DDSCL_FULLSCREEN flag.
Скоре всего забыл, что этот флаг работает только в полноэкранном режиме.


parovoZZ   (2004-08-01 20:27:00) [7]

Код в студию


Evgeniy_K   (2004-08-01 20:18:00) [8]

говорит, мол "обратилося по адресу FFFFFFFF" - по исполнению SetCooperative..


parovoZZ   (2004-08-01 20:13:00) [9]

А в чём сие проявляется?


Наверх

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