1,183
社区成员
发帖
与我相关
我的任务
分享
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
function AddUnattachedDisplayDeviceToDesktop() : boolean;
end;
var
Form1: TForm1;
implementation
uses Unit2;
{$R *.dfm}
const ENUM_REGISTRY_SETTINGS = $FFFFFFFF -2;
function TForm1.AddUnattachedDisplayDeviceToDesktop() : boolean;
var displayDevice : TDisplayDevice;
devMode : TDEVMODE;
ret : boolean;
i,index : integer;
begin
result := true;
for i := 0 to 100 do
begin
index := i;
//获取显示设备
ZeroMemory(@displayDevice, sizeof(TDisplayDevice));
displayDevice.cb := sizeof(TDisplayDevice);
ret := EnumDisplayDevices(nil,index, displayDevice, 0);
if ret = false then exit;
self.Memo1.Lines.Add(BooltoStr(ret));
self.Memo1.Lines.Add(displayDevice.DeviceName);
if (displayDevice.StateFlags and DISPLAY_DEVICE_PRIMARY_DEVICE >0) then continue; //主显示器继续
//获取当前设备的显示模式
ZeroMemory(@devMode, sizeof(TDEVMODE));
devMode.dmSize := sizeof(TDEVMODE);
ret := EnumDisplaySettings(displayDevice.DeviceName,ENUM_REGISTRY_SETTINGS,devMode);
if ret = false then exit; // Store default failed
//更新显示模式属性(目的为了扩展桌面)
devMode.dmOrientation := 1024; //此处于为demo,具体值为主显示器宽度 ,0,恢复桌面扩展。取-1024扩展显示器会显示在主显示器的左边
devMode.dmFields := DM_POSITION;
ChangeDisplaySettingsEx(displayDevice.DeviceName, devMode, 0, CDS_NORESET or CDS_UPDATEREGISTRY, nil);
ChangeDisplaySettingsEx(displayDevice.DeviceName, devMode, 0, 0, nil);
result := true;
exit;
end;
result := false;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
form2.show;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
close;
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
form1.Left:=screen.Monitors[0].Left;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
AddUnattachedDisplayDeviceToDesktop();
end;
end.
这是一个设置多屏的源码,仅供参考。