请问在双屏下怎样设置form2的位置?(30分)

  • 主题发起人 主题发起人 呼啦啦10
  • 开始时间 开始时间

呼啦啦10

Unregistered / Unconfirmed
GUEST, unregistred user!
我想把form2显示到第二个显示器上去
当然不是直接拖过去,按个按钮就自动显示过去的那种
主显示器的分辨率是1024×768
当我设置form2.left:=600;
form2的left都是位于600的那个地方,位于主显示器上,主显示器上显示不完的就在第二个显示器上有显示,
但是当我设置form2.left:=1024;
按道理form2这时应该在第二个显示器上了,但是运行结果是form2.left:=0;
而且我试着设置form2.left:=700;
运行结果是form2.left:=-324;
而且我用screen.customforms[1].makefullyvisible(screen.monitors[1]);
form2也是出现在主显示器的左上角,
前面我已经测过主显示器是monitor[0]
我觉得语句没有错,可就是不明白为什么达不到我要的效果
请教各位了!
 
FORM的POSTION属性为SCREANCENTER
 
我改了试了下
form2是出现在主显的中央
没有出现在第二个显示器上
screen是指主显的
 
我也不知道了,那改为DESKTOPCENTER行吗
 
是不是硬件上还要怎么设置一下啊?
各位指点小妹一下啊
 
desktopcenter它就在主显和第二个显示器一边显示一半了
是显示在整个虚拟桌面的中间了
 
Delphi2006可以实现这个功能,把属性
Form2.DefaultMonitor := dmPrimary;
就可以了
 
dmPrimary是把form2显示到第一个显示器上
现在默认的第一个显示器是主显示器,不是第二个显示器
还是不能把form2显示到第二个显示器上面
可以自己设定哪个显示器是第一个显示器吗?
 
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.PrimaryMonitor.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
if FPosition = poMainFormCenter then
begin
SetBounds(Screen.Monitors.Left + ((Screen.Monitors.Width - Width) div 2),
Screen.Monitors.Top + ((Screen.Monitors.Height - Height) div 2),
Width, Height)
end
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;

也许这个对你有帮助(我是说启示作用)
 
没有用过双显,
等咱有了钱,买两个玩玩儿..
 
to zqw0117,
小妹不才,不太懂上面那个程序的意思,我上午调试了一下上面的那个程序,
对于HMONITOR和FDefaultMonitor,不知道怎么申明,setbound到底设置的是哪个的范围,我也不大清楚,再请指点一下我吧。非常感谢了!!
 
我试了一下,无论直接设置Left, Top或是用MakeFullyVisible(Screen.Monitors[1])都能达到效果
可能是显示设置的问题,能把你的整个事件过程写一下吗

另:
procedure TCustomForm.SetWindowToMonitor;
是TCustomForm的Private过程
 
恩,谢谢ANiDelphi,zqw0117,李翔鹏,我已经知道我错在哪里了。
我之前把form2的设置写在create事件里了,后来把它写在onshow事件里就实现了。
 
多人接受答案了。
 
后退
顶部