本实例演示如何在程序中动态修改屏幕的分辨率
并且不需要重新启动计算机就可以生效
向窗体上添加两个Button控件设计完成的主界面如图所示
图 主界面在程序中添加一个自定义函数DynamicResolution它有两个参数分别对应于水平和垂直方向的分辨率并且该函数有一个BOOL类型的返回值通过判断返回值可以判断DynamicResolution函数是否正确执行DynamicResolution函数代码如下
function TfrmMainDynamicResolution(X Y: word): BOOL;
var
lpDevMode: TDeviceMode;
begin
Result := EnumDisplaySettings(nil lpDevMode);
if Result then
begin
lpDevModedmFields := DM_PELSWIDTH Or DM_PELSHEIGHT;
lpDevModedmPelsWidth := X;
lpDevModedmPelsHeight := Y;
Result:=ChangeDisplaySettings(lpDevMode)= DISP_CHANGE_SUCCESSFUL;
end;
end;
在程序运行过程中通过单击窗体上的两个按钮**来调用DynamicResolution()或DynamicResolution()修改分辨率
程序首先通过EnumDisplaySettings来取得当前屏幕的分辨率把它存储在变量lpDevMode中然后把lpDevMode设置为新的分辨率最后通过ChangeDisplaySettings函数完成动态修改显示器分辨率的具体操作
程序代码如下
unit Unit;
interface
uses
Windows Messages SysUtils Variants Classes Graphics Controls Forms
Dialogs StdCtrls;
type
TfrmMain = class(TForm)
btn: TButton;
btn: TButton;
procedure btnClick(Sender: TObject);
procedure btnClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
function DynamicResolution(X Y: word): BOOL;
end;
var
frmMain: TfrmMain;
implementation
{$R *dfm}
function TfrmMainDynamicResolution(X Y: word): BOOL;
var
lpDevMode: TDeviceMode;
begin
Result := EnumDisplaySettings(nil lpDevMode);
if Result then
begin
lpDevModedmFields := DM_PELSWIDTH Or DM_PELSHEIGHT;
lpDevModedmPelsWidth := X;
lpDevModedmPelsHeight := Y;
Result:=ChangeDisplaySettings(lpDevMode)=DISP_CHANGE_SUCCESSFUL;
end;
end;
procedure TfrmMainbtnClick(Sender: TObject);
begin
if DynamicResolution( ) then
begin
ShowMessage(现在的分辨率是*);
end;
end;
procedure TfrmMainbtnClick(Sender: TObject);
begin
if DynamicResolution( ) then
begin
ShowMessage(现在的分辨率是*);
end;
end;
end
保存文件然后按F键运行程序程序运行的初始画面如图所示
在程序运行过程中用户可以通过单击*和*按钮把屏幕分辨率分别更改为*和*如图所示
图 程序运行的初始画面
图 程序运行结果