Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.03;
Скачать: CL | DM;

Вниз

Инициализация и запуск DirectX   Найти похожие ветки 

 
romanus ©   (2004-07-04 14:04) [0]

Скажите, как правильно и чтоб работало без глюков, инициализировать и работать с DirectX в Delphi.
А то у меня с глюками (при работе просверкивает рабочий стол).


 
Огромное Кулясищще ©   (2004-07-04 17:25) [1]

Стоп! Значит, что инициализировать? DirectDraw или Direct3D? Как инициализировтаь - оконный режим и полноэкранный?


 
romanus ©   (2004-07-04 18:06) [2]

Требуется инициализировать DirectDraw в fullscreen режиме.


 
Огромное Кулясищще ©   (2004-07-04 20:11) [3]

По Краснову. Инициализация, создание поверхностей, блиттинг. Выход по Alt+Tab и далее через Windows.

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 AppEvnts,
 DirectDraw;

type
 TfrmDD = class(TForm)
   ApplicationEvents1: TApplicationEvents;
   procedure FormCreate(Sender: TObject);
   procedure FormDestroy(Sender: TObject);
   procedure FormPaint(Sender: TObject);
   procedure ApplicationEvents1Deactivate(Sender: TObject);
   procedure ApplicationEvents1Restore(Sender: TObject);
 private
   { Private declarations }
   FDD : IDirectDraw7;
   FDDSPrimary    : IDirectDrawSurface7;
   procedure ErrorOut(hRet : HRESULT; FuncName : string);
 public
   { Public declarations }
 end;

var
 frmDD: TfrmDD;

implementation

{$R *.DFM}

procedure TfrmDD.ErrorOut(hRet : HRESULT; FuncName : string);
begin
 MessageBox(0, PChar(FuncName + ": " + #13 + DDErrorString(hRet)),
            PChar(Caption), MB_OK or MB_ICONSTOP);
end;

procedure TfrmDD.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;

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

procedure TfrmDD.FormPaint(Sender: TObject);
var
 DC : HDC;
 wrkCanvas : TCanvas;
 hRet : HRESULT;
 ddbltfx : TDDBLTFX;
 wrkBitmap : TBitmap;
begin
 ZeroMemory(@ddbltfx, SizeOf(ddbltfx));
 ddbltfx.dwSize := sizeof(ddbltfx);
 ddbltfx.dwFillColor := 0;
 while True do begin
   hRet := FDDSPrimary.Blt(nil, nil, nil, DDBLT_COLORFILL or DDBLT_WAIT, @ddbltfx);
   if hRet = DDERR_SURFACELOST then begin
      hRet := FDDSPrimary._Restore;
      if hRet <> DD_OK then Break;
   end else Break;
 end;
 while True do begin
   hRet := FDDSPrimary.GetDC(DC);
   if Succeeded (hRet) then begin
      wrkCanvas := TCanvas.Create;
      wrkCanvas.Handle := DC;
      wrkBitmap := TBitmap.Create;
      wrkBitmap.LoadFromFile ("..\lake.bmp");
      wrkCanvas.Draw(100, 100, wrkBitmap);
      wrkBitmap.Free;
      wrkCanvas.Free;
      FDDSPrimary.ReleaseDC (DC);
      Break;
   end;
   if hRet = DDERR_SURFACELOST then begin
      hRet := FDDSPrimary._Restore;
      if hRet <> DD_OK then Break;
   end;
   if hRet <> DDERR_WASSTILLDRAWING then Break;
 end;
end;

procedure TfrmDD.ApplicationEvents1Deactivate(Sender: TObject);
begin
 Application.Minimize;
end;

procedure TfrmDD.ApplicationEvents1Restore(Sender: TObject);
begin
 WindowState := wsMaximized;
end;

end.



Страницы: 1 вся ветка

Текущий архив: 2004.10.03;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.022 c
8-1089802421
ПЛОВ
2004-07-14 14:53
2004.10.03
RGBA


1-1094808576
AlexanderL
2004-09-10 13:29
2004.10.03
Печать из ListView


1-1095505872
Hawk
2004-09-18 15:11
2004.10.03
Запуск приложения с параметром


1-1095355017
slaviq
2004-09-16 21:16
2004.10.03
Есть такая ф-я для парсинга строки - напомните кто знает плз.


1-1095353131
UserUserov
2004-09-16 20:45
2004.10.03
Постоянные программы