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

Вниз

Смена разрешения   Найти похожие ветки 

 
BVictor ©   (2004-04-24 13:19) [0]

Как изменить разрешение в системе по средствам Delphi? Т.е. необходимо, чтобы созданное приложение было в одном разрешении (например, 800х600), при этом системное разрешение было другим (например, 1024х768). Как в мультимедийных играх, т.е при использовании alt+tab приложение сворачивается, а разрешение меняется на то, которое было до запуска игры.


 
AndreyL   (2004-04-24 16:48) [1]

Tak eto trebujet ispolzovanija OpenGL ili DirectX, to est pisat nado pod DirectX ili OPenGL s ispolzovanijem ih kommand( nu i vozmozhno s WinAPI).
Andrey!


 
Nick Denry ©   (2004-04-25 13:32) [2]

Держи пример:

unit Main;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs,DirectXGraphics,DXFile, StdCtrls;

type
DisMode = packed record
Width,Height,Freq,Format : Integer;
end;
type
 TForm1 = class(TForm)
   ComboBox1: TComboBox;
   ComboBox2: TComboBox;
   Button1: TButton;
   Label1: TLabel;
   Label2: TLabel;
   Label3: TLabel;
   Label4: TLabel;
   Button2: TButton;
   procedure Button1Click(Sender: TObject);
   procedure ComboBox2Select(Sender: TObject);
 private
   { Private declarations }
    FD3D              : IDirect3D8;
    FD3DDevice        : IDirect3DDevice8;
    FActive           : BOOL;
    ThisTickCount     : DWORD;
    LastTickCount     : DWORD;
    disModde          : array of DisMode;
    function InitD3D : HRESULT;
//     function Render  : HRESULT;
    procedure CleanUp;
    procedure ErrorOut (const Caption : PChar; const hError : HRESULT);
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

Procedure TForm1.ErrorOut(Const caption : PChar; const hError : HRESULT);
begin
 FActive := false;
 CleanUp;
 MessageBox(Handle,PChar(DXGErrorString(hError)),Caption,0);
end;

procedure TForm1.CleanUp;
begin
if Assigned (FD3DDevice) then begin
  FD3DDevice._Release;
  FD3DDevice := nil;
  end;
if Assigned (FD3D) then begin
  FD3D._Release;
  FD3D := nil;
  end;
end;

Function TForm1.InitD3D : HRESULT;
var
 d3ddm : TD3DDisplayMode;
 d3dpp : TD3DPresent_Parameters;
 hRet  : HRESULT;
 i     : Cardinal;
 Ident : TD3DADAPTER_IDENTIFIER8;
 curmode,cmode : TD3DDisplayMode;
 mc      : integer;
 n       : Integer;
Begin
 FD3D := nil;
 FD3DDevice := nil;
 FD3D := Direct3DCreate8(D3D_SDK_VERSION);
 if Fd3d = nil then begin
   REsult := E_FAIL;
   Halt;
 end;
 i:=FD3D.GetAdapterCount;
 Label1.Caption := Label1.Caption + IntToStr(i);

 For i:= 0 to i-1 do begin
 FD3d.GetAdapterIdentifier(i,0,Ident);
 ComboBox1.Items.Add(Ident.Description);
 ComboBox1.ItemIndex:=0;
 end;
//  FD3D.GetAdapterDisplayMode(0,curmode);
 mc:=FD3D.GetAdapterModeCount(0);
 Label4.Caption := Label4.Caption + Ident.Driver;
 SetLength(disModde,(mc-1)*SizeOF(DisMode));
 for i := 0 to mc-1 do begin
   FD3D.EnumAdapterModes(0,i,curmode);
   FD3D.GetAdapterDisplayMode(0,cmode);
   if (curmode.Width = cmode.Width)
   and (curmode.Height = cmode.Height)
   and (curmode.RefreshRate = cmode.RefreshRate)
   and (curmode.Format = cmode.Format) then n := ComboBox2.Items.Count;

   case curmode.Format of
    D3DFMT_X8R8G8B8   : Begin

                         ComboBox2.Items.Add(InttoStr(curmode.Width) + "*" +IntToStr(curmode.Height)+"*" +IntToStr(32)+" freq "+ IntToStr(curmode.RefreshRate));
                         disModde[i].Width   := curmode.Width;
                         DisModde[i].Height  := curmode.Height;
                         DisModde[i].Freq    := curmode.RefreshRate;
                         DisModde[i].Format  := 32;

                         End;
     D3DFMT_R5G6B5  :    begin

                         ComboBox2.Items.Add(InttoStr(curmode.Width) + "*" +IntToStr(curmode.Height)+"*" +IntToStr(16)+" freq "+ IntToStr(curmode.RefreshRate));
                         DisModde[i].Width   := curmode.Width;
                         DisModde[i].Height  := curmode.Height;
                         DisModde[i].Freq    := curmode.RefreshRate;
                         DisModde[i].Format  := 16;
                         end;

   end;
 End;

 ComboBox2.ItemIndex := n;

 
End;

procedure TForm1.Button1Click(Sender: TObject);
begin
ComboBox1.Items.Clear;
Label1.Caption := "Count of adapters : ";
Label4.Caption := "Driver Name : ";
InitD3D;
end;

procedure TForm1.ComboBox2Select(Sender: TObject);
var

n : integer;
dm : TDevMode;
hToken: THandle;
tkp: TTokenPrivileges;
ReturnLength, What: Cardinal;
begin
n:=ComboBox2.ItemIndex;
dm.dmSize       := SizeOF(dm);
dm.dmBitsPerPel := disModde[n].Format;
dm.dmPelsWidth  := disModde[n].Width;
dm.dmPelsHeight := disModde[n].Height;
dm.dmDisplayFrequency := disModde[n].Freq;
dm.dmFields           := DM_BITSPERPEL or DM_PELSWIDTH or DM_PELSHEIGHT or DM_DISPLAYFREQUENCY;
ChangeDisplaySettings(dm,0);
end;

end.


Только надо скачать заголовки к ДиректХ с delphi-jedi.org
(Кажется так...)

С уважением, Nick Denry.


 
Дмитрий   (2004-04-29 12:18) [3]

Попробуй использовать функцию ChangeDisplaySettings



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

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

Наверх




Память: 0.48 MB
Время: 0.039 c
4-1082128654
WELLiON
2004-04-16 19:17
2004.06.06
меню в трее


3-1084772982
ss300
2004-05-17 09:49
2004.06.06
Странная Ошибка при вызове метода Post;


14-1084855157
Vlad Oshin
2004-05-18 08:39
2004.06.06
Научите, как узнать для чего и какая dll нужна в папках windows


1-1085246255
Хазей
2004-05-22 21:17
2004.06.06
Задержка для диалога


3-1084596775
Need4help
2004-05-15 08:52
2004.06.06
Округление в QReport