如何用delphi设置显示器分辨率(100分)

  • 主题发起人 主题发起人 Yves
  • 开始时间 开始时间
Y

Yves

Unregistered / Unconfirmed
GUEST, unregistred user!
[blue]显示器的分辨率有640*800 800*600 1024*768……
请问如何动态调节这些呢,
再请问 那里有 学习使用 directx 的资料呢? 那里可以下载directx sdk 呢?
不胜感激][/blue]
 
procedure TMainForm.ChangeScreenSize;
var
DeviceMode: TDeviceMode;
begin
FOldScreenWidth:=Screen.Width;
DeviceMode.dmPelsWidth:=800;
DeviceMode.dmPelsHeight:=600;
DeviceMode.dmFields:=DM_PelsWidth or DM_PelsHeight;
ChangeDisplaySettings(DeviceMode, 0)
end;
 
我有一套DirectX的组件,for D6的,要不要,SDK去Microsoft.
 
动态修改显示器分辨率
Windows提供给我们两个API函数,可以动态调整显示器的分辨率,他们是EnumDisplaySettings()
和ChangeDisplaySettings(),下面这个例子就是了
function DynamicResolution(X, Y: word): BOOL;
var
lpDevMode: TDeviceMode;
begin
Result := EnumDisplaySettings(nil, 0, lpDevMode);
if Result then
begin
lpDevMode.dmFields := DM_PELSWIDTH Or DM_PELSHEIGHT;
lpDevMode.dmPelsWidth := X;
lpDevMode.dmPelsHeight := Y;
Result := ChangeDisplaySettings(lpDevMode, 0) = DISP_CHANGE_SUCCESSFUL;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if DynamicResolution(640, 480) then
ShowMessage('Now is 640*480');
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if DynamicResolution(800, 600) then
ShowMessage('Now is 800*600');
end;

 
//改变分辨率的函数。
{function Resolution(X,Y:word):boolean;
var
DevMode:TDeviceMode;
begin
Result:=EnumDisplaySettings(nil,0,DevMode);
if Result then
begin
DevMode.dmFields:=DM_PELSWIDTH Or DM_PELSHEIGHT;
DevMode.dmPelsWidth:=X;
DevMode.dmPelsHeight:=Y;
Result:=ChangeDisplaySettings(DevMode,0)=DISP_CHANGE_SUCCESSFUL;
end;
end; }

// 禁止改变窗体大小
{procedure WMGetMinMaxInfo(var Msg: TWMGetMinMaxInfo;Sender:TObject); //enable change form size
begin
inherited;
with Msg.MinMaxInfo^ do begin
ptMinTrackSize.x:= TForm(Sender).width;
ptMaxTrackSize.x:= TForm(Sender).width;
ptMinTrackSize.y:= TForm(Sender).height;
ptMaxTrackSize.y:= TForm(Sender).height;
end;
end; }
//退出时恢复以前设定(分辨率):
{procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
x:longint;
y:longint;
a:string;
b:string;
begin
x:=getsystemmetrics(sm_cxscreen);
str(x,a);
y:=getsystemmetrics(sm_cyscreen);
str(y,b);
begin
Resolution(strtoint(a),strtoint(b));
end;
end;
}
 
谢谢诸位的帮忙
 
怎么得到当前的屏幕颜色?比如是16位还是32位?
 
多人接受答案了。
 
谢谢大家的讲解,尤其是 huazai leechang oldseven 三位
不过我还想知道 这三种方法有什么区别么?
只是分已给过,不知还能不能赐教?
 
后退
顶部