怎样让应用程序的两个带 Caption 的窗口同时显示为 Active 状态 (100分)

  • 主题发起人 主题发起人 savetime
  • 开始时间 开始时间
S

savetime

Unregistered / Unconfirmed
GUEST, unregistred user!
我记得有个软件是 MDI 结构的。在 MDIChild 窗口中,它嵌入了一个普通窗口,<br>这个窗口的 Caption 和 MDIChild 表单的窗口都是 Active 状态(标题都是蓝<br>色,不是画上去的)。<br><br>比如,在这种情况下:<br><br>procedure TForm1.FormCreate(Sender: TObject);<br>begin<br>&nbsp; Form2 := TForm2.Create(Self);<br>&nbsp; Form2.Parent := Self;<br>&nbsp; Form2.Show;<br>end;<br><br>怎样让 Form1 和 Form2 的标题都是 Active 状态?注意如果点击了 Form1 上的其<br>它窗口,Form2 也会失去焦点成为未 &nbsp;active 状态。
 
有个API可以做到!
 
你是异想天开呢?<br>还是看到过实例
 
这是假active,是画出来的。
 
在form的private中:<br>&nbsp; &nbsp; procedure WMActive(var Msg:TWMActivate);Message WM_ACTIVATE;<br>procedure TFrm_XMTree.WMActive(var Msg: TWMActivate);<br>begin<br>&nbsp; &nbsp; if Msg.Active&lt;&gt;0 then<br>&nbsp; &nbsp; begin &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//此窗体获得焦点<br>&nbsp; &nbsp; &nbsp; &nbsp; SendMessage(TWinControl(Owner).Handle,WM_NCACTIVATE,-1,0);<br>&nbsp; &nbsp; &nbsp; &nbsp; Windows.SetWindowPos(TWinControl(Owner).Handle,HWND_TOP,0,0,0,0,SWP_NOSIZE or SWP_NOMOVE or SWP_NOACTIVATE);<br>&nbsp; &nbsp; end<br>&nbsp; &nbsp; else begin &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //此窗体失去焦点<br>&nbsp; &nbsp; &nbsp; &nbsp; SendMessage(Handle,WM_NCACTIVATE,-1,0);<br>&nbsp; &nbsp; &nbsp; &nbsp; SendMessage(TWinControl(Owner).Handle,WM_NCACTIVATE,0,0);<br>&nbsp; &nbsp; end;<br>&nbsp; &nbsp; inherited;<br>end;<br>把TWinControl(Owner).Handle换成你要的(不过这样最好在Form的OnClick事件中加上show,否则只有点标题栏才能切换)。
 
二年前看到天心ERP的演示版就是这样的。当时疑惑了一下,不像是画上去的。<br>感觉天心的技术实力确实很强,对Delphi吃得很透。
 
dirk 的方法确实可行,我精简了一下:<br><br>procedure TForm1.WMActive(var Msg: TWMActivate);<br>begin<br>&nbsp; &nbsp;if Msg.Active &lt;&gt; 0 then<br>&nbsp; &nbsp; &nbsp;SendMessage(Form2.Handle, WM_NCACTIVATE, -1, 0) &nbsp; // 此窗体获得焦点<br>&nbsp; &nbsp;else<br>&nbsp; &nbsp; &nbsp;SendMessage(Form2.Handle, WM_NCACTIVATE, &nbsp;0, 0); &nbsp;// 此窗体失去焦点<br>&nbsp; &nbsp;inherited;<br>end;<br><br>&gt;&gt; 不过这样最好在Form的OnClick事件中加上show,否则只有点标题栏才能切换<br>这句不太明白,我直接使用上面的代码没有出现问题(D7, WinXP)?
 
偶也试试去:)
 
制造假相,但会出现不正常的情况,譬如被挡住后,又显示出来
 
to lich,<br>&gt;&gt; 制造假相,但会出现不正常的情况,譬如被挡住后,又显示出来<br>不明白,你能详细描述不正常的现象吗?我测试的结果是没有问题。
 
谢谢 dirk 提出这么好的方法!
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部