示範在程式中動態修改螢幕解析度,無需重開機即時生效。
表單放置兩個 Button:btn640480 (640×480)、btn800600 (800×600)。

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;
流程:EnumDisplaySettings 取得目前模式 → 修改寬高 → 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
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 ShowMessage('目前解析度: 640×480');
end;
procedure TfrmMain.btn800600Click(Sender: TObject);
begin
if DynamicResolution(800, 600) then ShowMessage('目前解析度: 800×600');
end;
end.
初始畫面:

點擊按鈕動態切換解析度:
