本实例演示如何在程序中动态修改屏幕的分辨率,并且不需要重新启动计算机就可以生效。
向窗体上添加两个Button控件,设计完成的主界面如图1所示。
图1 主界面 |
在程序中添加一个自定义函数DynamicResolution,它有两个参数,分别对应于水平和垂直方向的分辨率,并且该函数有一个BOOL类型的返回值,通过判断返回值可以判断DynamicResolution函数是否正确执行。DynamicResolution函数代码如下:
function TfrmMain.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; |
在程序运行过程中,通过单击窗体上的两个按钮“640*480”、“800*600”来调用DynamicResolution(640,480)或DynamicResolution(800,600)修改分辨率。
程序首先通过EnumDisplaySettings来取得当前屏幕的分辨率,把它存储在变量lpDevMode中,然后把lpDevMode设置为新的分辨率,最后通过ChangeDisplaySettings函数完成动态修改显示器分辨率的具体操作。
程序代码如下:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TfrmMain = class(TForm) btn800600: TButton; btn640480: TButton; procedure btn640480Click(Sender: TObject); procedure btn800600Click(Sender: TObject); private { Private declarations } public { Public declarations } function DynamicResolution(X, Y: word): BOOL; end; var frmMain: TfrmMain; implementation {$R *.dfm} function TfrmMain.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 TfrmMain.btn640480Click(Sender: TObject); begin if DynamicResolution(640, 480) then begin ShowMessage(’现在的分辨率是640*480’); end; end; procedure TfrmMain.btn800600Click(Sender: TObject); begin if DynamicResolution(800, 600) then begin ShowMessage(’现在的分辨率是800*600’); end; end; end. |
保存文件,然后按F9键运行程序,程序运行的初始画面如图2所示。
在程序运行过程中,用户可以通过单击“800*600”和“640*480”按钮把屏幕分辨率分别更改为“800*600”和“640*480”,如图3所示。
图2 程序运行的初始画面 图3 程序运行结果 |
本文来源:网狐 作者:佚名