Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2004.10.03;
Скачать: [xml.tar.bz2];

Вниз

Инициализация и запуск 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 вся ветка

Форум: "Media";
Текущий архив: 2004.10.03;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.035 c
4-1093427216
beatles_bntu
2004-08-25 13:46
2004.10.03
Системный запуск приложения под XP


14-1095030803
Soft
2004-09-13 03:13
2004.10.03
Только что написал


3-1094361702
Гаврилов В.А.
2004-09-05 09:21
2004.10.03
Работа с Microsoft Access


4-1093446638
noname
2004-08-25 19:10
2004.10.03
Драйвер на Delphi!


14-1095023837
gas
2004-09-13 01:17
2004.10.03
Перетаскивание текста между программами





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский