使用Delphi管理显示设备模式获取与设置屏幕分辨率

使用Delphi获取、设置与处理显示设备模式

在开发Windows软件时,能够动态获取和设置显示设备的分辨率颜色深度是非常重要的。将详细介绍如何通过Delphi代码利用Windows API函数EnumDisplaySettingsChangeDisplaySettings来实现这一功能。

1. 获取所有可能的显示模式

为了获取所有可用的显示设备模式,我们使用EnumDisplaySettings函数。此函数通过循环枚举所有可能的模式,直到返回值不再为True

示例代码:

type TDevMode = record
    dmPelsWidth: Integer;  // 分辨率宽度
    dmPelsHeight: Integer; // 分辨率高度
    dmBitsPerPel: Integer; // 颜色深度
    dmDisplayFrequency: Integer; // 刷新率
end;

procedure TForm1.FormCreate(Sender: TObject);
var
    cnt: Integer;
    DevMode: TDevMode;
begin
    cnt := 0;
    while EnumDisplaySettings(nil, cnt, DevMode) do
    begin
        with DevMode do
            ListBox1.Items.Add(Format('%dx%d ?olors', [dmPelsWidth, dmPelsHeight, Int64(1) shl dmBitsPerPel]));
        Inc(cnt);
    end;
end;

该代码会枚举所有可能的显示模式,并将其添加到一个列表框中。

2. 设置屏幕分辨率颜色

获取可用的模式后,可以使用ChangeDisplaySettings函数来切换到所需的模式。

示例代码:

procedure TForm1.Button1Click(Sender: TObject);
var
    DevMode: TDeviceMode;
    liRetValue: Longint;
begin
    if EnumDisplaySettings(nil, ListBox1.ItemIndex, DevMode) then
        liRetValue := ChangeDisplaySettings(DevMode, CDS_UPDATEREGISTRY);
    SendMessage(HWND_BROADCAST, WM_DISPLAYCHANGE, SPI_SETNONCLIENTMETRICS, 0);
end;

此代码使用EnumDisplaySettings函数获取当前选择的显示模式,并通过ChangeDisplaySettings函数应用更改。

pdf 文件大小:119.46KB