delphi分屏开发问题,求助~~~

CaptainShrimp 2015-09-18 10:37:11
现在我用delphi做了个小工具,需要通过分屏显示进行展示,主屏显示一个窗体,副屏显示另一个窗体。首先是通过显示器设置,将桌面扩展到副屏上。然后在程序里添加了如下代码
frmOuterScreen.Left := Screen.Monitors[0].Width + ((Screen.Monitors[1].Width-frmOuterScreen.Width) div 2);
frmOuterScreen.Top := ((Screen.Monitors[1].Height-frmOuterScreen.Height) div 2);
frmOuterScreen.Show();

在Win7系统下进行多屏显示是没问题的,但换到XP系统上以后,两个窗体就只能在主屏上显示。我主屏分辨率是1024*768,我尝试过这样赋值-------frmOuterScreen.Left := 1100; 但窗体仍显示在主屏上,没有扩展到副屏上。

是不是还缺点什么,哪位朋友能指点一下吗?
...全文
229 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
lyhoo163 2015-09-19
  • 打赏
  • 举报
回复
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.
这是一个设置多屏的源码,仅供参考。

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧