转帖:
将机器分辨率更改为设计时的分辨率
这种方法不改变表单本身,而是将屏幕分辨率更改为与表单设计时用到的分辨率相同。它需要用到WINDOWS API函数EnumDisplaySettings 和ChangeDisplaySettings, 前者取当前显示模式信息,后者则更改显示设置,具体参数的含义请参见DELPHI帮助。设计时宽度常量和高度常量的定义如方法一。
procedure TForm1.FormCreate(Sender: TObject);
var
devmode:tDevicemode;
begin
if screen.width<>orignwidth then
begin
if EnumDisplaySettings(nil,0,devmode) then
begin
devmode.dmfields:=dm_pelswidth OR dm_pelsheight ;
devmode.dmpelswidth:=orignwidth; {宽度}
devmode.dmpelsheight:=orignheight;{高度}
ChangeDisplaySettings(devmode,0);
{更改设置}
end;
end;
end;
以下是如何调整分辨率的实现代码,但我不知道此代码应该写在哪里??请大侠指点,谢谢!!
function tdvd_mainform.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 SetScreenSize(W,H: Integer);
var
DevMode: TDevMode;
begin
if (w<640) or (h<480) then
exit;
if EnumDisplaySettings(nil,0,DevMode) then
begin
with DevModedo
begin
dmPelsWidth := W;
dmPelsHeight := H;
dmFields := DM_PELSWIDTH or DM_PELSHEIGHT;
end;
ChangeDisplaySettings(DevMode, 0);
end;
end;