在第二显示器上开一个窗口(win98支持的双显示器)(160分)

  • 主题发起人 主题发起人 老莫
  • 开始时间 开始时间

老莫

Unregistered / Unconfirmed
GUEST, unregistred user!
我在做一个东西,for windows98插双显卡,主程序执行后,想在第二显示器
上开一个窗口。而且不能用拖拽方式把窗口拖过去,不知道有没有什么好办法?
我只有160分了,全部加上。
 
看看帮助。

TScreen.Monitors
TMonitor
TCustomForm.DefaultMonitor
 
哦,对不起,你一定知道这些。
 
应该挺简单的,可以没条件试啊。
 
以下代码是从VCL中找到的,我没条件试,你可以试看看:
// from ".../Source/VCL/Forms.pas"

procedure TCustomForm.SetWindowToMonitor;
var
AppMon, WinMon: HMONITOR;
I, J: Integer;
ALeft, ATop: Integer;
begin
if (FDefaultMonitor <> dmDesktop) and (Application.MainForm <> nil) then
begin
AppMon := 0;
if FDefaultMonitor = dmMainForm then
AppMon := Application.MainForm.Monitor.Handle
else if (FDefaultMonitor = dmActiveForm) and (Screen.ActiveCustomForm <> nil) then
AppMon := Screen.ActiveCustomForm.Monitor.Handle
else if FDefaultMonitor = dmPrimary then
AppMon := Screen.Monitors[0].Handle;
WinMon := Monitor.Handle;
for I := 0 to Screen.MonitorCount - 1 do
if (Screen.Monitors.Handle = AppMon) then
if (AppMon <> WinMon) then
for J := 0 to Screen.MonitorCount - 1 do
if (Screen.Monitors[J].Handle = WinMon) then
begin
if FPosition = poScreenCenter then
SetBounds(Screen.Monitors.Left + ((Screen.Monitors.Width - Width) div 2),
Screen.Monitors.Top + ((Screen.Monitors.Height - Height) div 2),
Width, Height)
else
begin
ALeft := Screen.Monitors.Left + Left - Screen.Monitors[J].Left;
if ALeft + Width > Screen.Monitors.Left + Screen.Monitors.Width then
ALeft := Screen.Monitors.Left + Screen.Monitors.Width - Width;
ATop := Screen.Monitors.Top + Top - Screen.Monitors[J].Top;
if ATop + Height > Screen.Monitors.Top + Screen.Monitors.Height then
ATop := Screen.Monitors.Top + Screen.Monitors.Height - Height;
SetBounds(ALeft, ATop, Width, Height);
end;
end;
end;
end;
 
简化一下:
//将一个窗体显示到指定的显示器上
procedure SetWindowToMonitor(Form: TCustomForm; //你想操作的窗体
MonitorIndex, //你想要显示窗体的显示
// 器索引, 0为主显示
// 器,1为第二显示器
Left, Top: Integer //窗体在显示器上的位置
);
begin
if not Assigned(Form) then Exit;
if MonitorIndex >= Screen.MonitorCount then Exit;
with Screen do
begin
Inc(Left, Monitors[MonitorIndex].Left);
Inc(Top, Monitors[MonitorIndex].Top);
end;
Form.SetBounds(Left, Top, Form.Width, Form.Height);
end;

<B>以上代码未测试过(我没条件,真羡慕你),希望能正常工作。</B>
 
接受答案了.
 
ZRY:我的环境也一般,只不过做管理员,设备调度起来方便些。
你的代码正确,多谢
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部