Главная страница
    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.061 c
1-1095654761
TTTT
2004-09-20 08:32
2004.10.03
coping in progress


4-1093523901
devMaster
2004-08-26 16:38
2004.10.03
как подменить WM_TIME для определенного процесса?


14-1095234195
NickBat
2004-09-15 11:43
2004.10.03
Вопрос по JavaScript меню.


4-1093511826
WondeRu
2004-08-26 13:17
2004.10.03
Как добавить свой пункт в контекстное меню кнопки "ПУСК"?


6-1090333677
Jedi
2004-07-20 18:27
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский