📄 disp01.pas
字号:
//调整显示器属性
unit Disp01;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StrUtils, StdCtrls, Menus, ComCtrls, DB, ADODB, Grids, DBGridEh;
type
TDispForm = class(TForm)
Label1: TLabel;
cbRate: TComboBox;
Label2: TLabel;
Button1: TButton;
Data00: TADOQuery;
Data00S: TDataSource;
DBGridEh1: TDBGridEh;
MYDBase: TADOConnection;
procedure SetMonitor(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
function CurRate: integer;
public
{ Public declarations }
end;
var
DispForm: TDispForm;
implementation
uses Xeduser;
{$R *.DFM}
procedure TDispForm.SetMonitor(Sender: TObject);
var
DM: TDeviceMode;
I, N: Word;
S1: string;
C, X, Y, R: integer;
Item: TListItem;
Book: TBookMark;
begin
Book := Data00.GetBookmark;
MYDBase.Execute('Update Monitor Set 当前值=Null');
Data00.Requery;
Data00.GotoBookmark(Book);
Data00.Edit;
Data00['当前值'] := True;
Data00.Post;
Data00.FreeBookmark(Book);
S1 := Data00['横向像素']; X := StrToInt(S1);
S1 := Data00['纵向像素']; Y := StrToInt(S1);
S1 := Data00['颜色位数']; C := StrToInt(S1);
R := cbRate.ItemIndex;
if (R = 0) or (R = 1) then R := -1 * R else begin
S1 := cbRate.Items[R];
S1 := LeftStr(S1, 4);
S1 := Trim(S1);
R := StrToInt(S1);
end;
FillChar(DM, Sizeof(DM), 32);
ENumDisplaySettings(nil, 0, DM);
DM.dmFields := dm_pelswidth or dm_pelsheight or dm_BitsPerPel or dm_DisplayFrequency;
DM.dmBitsPerPel := C;
DM.dmPelsWidth := X;
DM.dmPelsHeight := Y;
DM.dmDisplayFrequency := DWord(R);
if ChangeDisplaySettings(DM, 2) = 0 then ChangeDisplaySettings(DM, 1);
end;
procedure TDispForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Data00.Close;
SaveSite(Self, 'Set Rate');
end;
procedure TDispForm.FormCreate(Sender: TObject);
var
DM: TDeviceMode;
R: integer;
FB, RS: string;
P0, X0, Y0, Z0,
X, Y, Z, C, i, j, W: Word;
F: Boolean;
S1: string;
DC: HDC;
Item: TListItem;
begin
LoadSite(Self, 'Set Rate');
DC := GetDC(Handle);
P0 := GetDeviceCaps(DC, BITSPIXEL);
X0 := GetDeviceCaps(DC, HORZRES);
Y0 := GetDeviceCaps(DC, VERTRES);
R := GetDeviceCaps(DC, VREFRESH);
R := CurRate;
if R = 0 then cbRate.ItemIndex := 0;
if R = -1 then cbRate.ItemIndex := 1;
if (R >= 60) then begin
cbRate.ItemIndex := 0;
RS := IntToStr(R);
for i := 1 to cbRate.Items.Count - 1 do begin
if Pos(RS, cbRate.Items[i]) > 0 then begin
cbRate.ItemIndex := I;
break;
end;
end;
end;
ReleaseDC(0, DC);
I := 0;
Data00.Open;
repeat
DM.dmFields := DM_PELSWIDTH or DM_PELSHEIGHT or DM_BITSPERPEL or DM_DISPLAYFREQUENCY;
F := EnumDisplaySettings(nil, I, DM);
if F then begin
C := DM.dmBitsPerPel;
X := DM.dmPelsWidth;
Y := DM.dmPelsHeight;
W := 1;
for J := 1 to C do W := W * 2;
S1 := Format('%d', [C]);
if C <= 15 then S1 := Format('%d 色', [W]);
if C >= 16 then S1 := Format('%2d 位(增强色)', [C]);
if C >= 24 then S1 := Format('%2d 位(真彩色)', [C]);
FB := Format('%5d x%5d', [X, Y, Z]);
if Data00.Locate('ID', I, []) then
Data00.Edit else Data00.Append;
Data00['ID'] := I;
Data00['当前值'] := False;
Data00['分辩率'] := FB;
Data00['横向像素'] := X;
Data00['纵向像素'] := Y;
Data00['颜色位数'] := C;
Data00['彩色描述'] := S1;
if (C = P0) and (X = X0) and (Y = Y0) then
Data00['当前值'] := True;
Data00.Post;
end;
I := I + 1;
until not F;
end;
function TDispForm.CurRate: integer;
var
DeviceMode: TDeviceMode;
begin //当前刷新率
EnumDisplaySettings(nil, Cardinal(-2), DeviceMode);
Result := DeviceMode.dmDisplayFrequency;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -