关于把窗体放到另一窗体内产生的问题。(100分)

  • 主题发起人 主题发起人 dirk
  • 开始时间 开始时间
D

dirk

Unregistered / Unconfirmed
GUEST, unregistred user!
A方案:<br>&nbsp; &nbsp; Frm_A:= TFrm_A.Create(self);<br>&nbsp; &nbsp; Frm_A.Parent :=self;<br>&nbsp; &nbsp; Frm_A.Show ;<br><br>B方案:<br>&nbsp; &nbsp; Frm_A:= TFrm_A.Create(self);<br>&nbsp; &nbsp; Windows.SetParent(Frm_A.Handle ,Handle);<br>&nbsp; &nbsp; Frm_A.Show ;<br><br>A、B方案都可将Frm_A限制在主窗体中,但:<br><br>A方案的Frm_A的窗体的标题栏始终为灰色,且其中的控件在操作上也有问题,故放弃;<br><br>B方案完全没有A方案的问题,但当Frm_A获得焦点时,主窗体的标题栏即呈灰色,失去激活,这到也罢,麻烦的是,当Frm_A激活时,此时程序若被其他窗体遮盖,点击Windows状态栏上的按钮,主窗口不会被置前,无法切换到主窗口,估计是因为此时主窗口未被激活,而激活的窗口在主窗口内,怎么解决?<br><br>不能用MDI子窗体。<br><br>解决再加200分。
 
使用panel就可以了<br>不用兩個窗口<br><br>具體看<br>http://www.delphibbs.com/delphibbs/dispq.asp?lid=423668
 
忘记说了,不能用Panel,我希望这个子窗体保留窗体的状态,比如最小化时缩在主窗体的下方等。
 
其實像你說的兩個方案用起來都不是很舒服<br><br>原因在於你的兩個標題攔始終有一個是灰色的<br>看起來很不舒服<br><br>我以前試過,看上去很不爽的,<br>所以也就不多考慮<br>除非你用無標題窗口然後自己畫一個標題攔上去<br><br>其實用panel也可以<br>至於你說要縮小一個標題<br>你可以另建一個隱藏的窗體,不過又複雜化了,呵呵<br><br>有機會看看mdi是怎麼實現的
 
在FormA声明消息。<br>procedure WMActive(var Msg:TWMActivate);Message WM_ACTIVATE;<br><br>procedure TFormA.WMActive(var Msg:TWMActivate);<br>begin<br>&nbsp; if Msg.Active&lt;&gt;0 then begin<br>&nbsp; &nbsp; SendMessage(Frm_B.Handle,WM_NCACTIVATE,-1,0);<br>&nbsp; &nbsp; Windows.SetWindowPos(Form1.Handle,HWND_TOP,0,0,0,0,<br>&nbsp; &nbsp; &nbsp; SWP_NOSIZE or SWP_NOMOVE or SWP_NOACTIVATE);<br>&nbsp; end<br>&nbsp; else begin<br>&nbsp; &nbsp; SendMessage(Frm_B.Handle,WM_NCACTIVATE,0,0);<br>&nbsp; end;<br>&nbsp; inherited;<br>end;
 
sgzc的方法可以啊,但还有个麻烦,这个窗体无法ShowModal,在WMActive中判断<br>&nbsp; &nbsp; if fsModal in FormState &nbsp;then<br>&nbsp; &nbsp; &nbsp; &nbsp; exit;<br>也不行。<br>
 
将Frm_A作为子窗体不可以么?
 
楼上是指MDI子窗体吗?
 
sgzc 有空到<br>http://www.delphibbs.com/delphibbs/dispq.asp?lid=1988180<br>来拿分。 <br>
 
关于ShowModal不是WMActive的问题,而是Windows.SetParent(Frm_A.Handle ,Handle);的问题,现在可以了。<br><br>只是还有个相关的小问题:<br>在子窗体中我没有uses父窗体,所以,SendMessage(Frm_B.Handle,WM_NCACTIVATE,-1,0);中,Frm_B我用TWinControl(Owner).Handle代替,后来我想,能否用Parent属性代替,但是不行,又想用GetParent(Handle )来得到父窗体的句柄,还是不行,怎样得到父窗体的句柄呢?
 
你 这人 真矫情,为什么不用mdi 窗体<br>全都搞定,又简单。
 
居然说我“矫情”????<br><br>如果MDI子窗体可以做到这个效果我早用了!
 
哦?<br>我没看 清楚 你的要求,不过 你好象也 没专门说出来 你什么要求?<br>不过,我有个问题:这个owener 和 parent 有什么区别?
 
MDI做不到甚麼<br><br>你沒有說阿<br><br>雖然好多人說MDI有問題<br>不過用起來還可以
 
在主窗体上放一TPanel,把子窗体的Parent指向TPanel
 
MDI我用的不多,也不熟,我的一些同事曾在做项目时用过,不好用,网上也听说很多,我不想用MDI行不?????<br><br>MDI子窗体的BorderStyle设为bsSizeToolWin没有效果,MDI子窗体不能ShowModal,MDI子窗体的位置、大小要在程序中设置……还要多少?<br><br>请回答问题好吗?<br><br>还有个相关的小问题:<br>在子窗体中我没有uses父窗体,所以,SendMessage(Frm_B.Handle,WM_NCACTIVATE,-1,0);中,Frm_B我用TWinControl(Owner).Handle代替,后来我想,能否用Parent属性代替,但是不行,又想用GetParent(Handle )来得到父窗体的句柄,还是不行,[blue]怎样得到父窗体的句柄呢[/blue]?
 
liuxi请看看前面的回答!<br><br>把子窗体的Parent指向TPanel和我的方案A没什么不同。
 
那就这样,用方案一,把子窗体的BorderStyle设为bsNone就正常了,只是没有标题栏,标题可以自已做一个不是什么难事吧
 
一、把子窗体的BorderStyle设为bsNone我知道<br>二、不想做标题栏<br>三、sgzc回答大概也能让你进步一点吧[8D]<br>四、这个问题你能回答吗?<br>还有个相关的小问题:<br>在子窗体中我没有uses父窗体,所以,SendMessage(Frm_B.Handle,WM_NCACTIVATE,-1,0);中,Frm_B我用TWinControl(Owner).Handle代替,后来我想,能否用Parent属性代替,但是不行,又想用GetParent(Handle )来得到父窗体的句柄,还是不行,[blue]怎样得到父窗体的句柄呢[/blue]?
 
父窗口句柄 := 子窗口.Parent.Handle不行吗?我试了可以呀
 
后退
顶部