Текущий архив: 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.46 MB
Время: 0.024 c