W WangZhaoHui Unregistered / Unconfirmed GUEST, unregistred user! 2005-12-26 #21 我的form2是showmodal的。要是show的就简单多了。<br>我的本意就是showmodal的form2也能象show的form2一样。一点击窗体以外的区域就隐藏或失去焦点了。我原来没考虑太周全。只是简单的按esc关闭。后来发现太麻烦。就问问有没有补救的办法。要是用show就容易多了。
我的form2是showmodal的。要是show的就简单多了。<br>我的本意就是showmodal的form2也能象show的form2一样。一点击窗体以外的区域就隐藏或失去焦点了。我原来没考虑太周全。只是简单的按esc关闭。后来发现太麻烦。就问问有没有补救的办法。要是用show就容易多了。
Z zqw0117 Unregistered / Unconfirmed GUEST, unregistred user! 2005-12-26 #22 刚刚我试了下SetCapture,好像确实不行。大家用过Spy++吧?上面点一个按钮,然后移动鼠标,Spy++能收到消息!我记得以前我在DFW上看到这个解决方案的,可是现在想不起来具体用的那个函数(我印象中好像是SetMouseCapture什么的,可是我找了半天也没找到这个函数),唉。
刚刚我试了下SetCapture,好像确实不行。大家用过Spy++吧?上面点一个按钮,然后移动鼠标,Spy++能收到消息!我记得以前我在DFW上看到这个解决方案的,可是现在想不起来具体用的那个函数(我印象中好像是SetMouseCapture什么的,可是我找了半天也没找到这个函数),唉。
G gear1023 Unregistered / Unconfirmed GUEST, unregistred user! 2005-12-28 #26 blue]Beyondbill[/blue]已经说得很明白了.<br><br>实现窗体的OnDeactivate事件<br>示例<br>procedure TfrmTest.FormDeactivate(Sender: TObject);<br>begin<br> Close;<br>end;
blue]Beyondbill[/blue]已经说得很明白了.<br><br>实现窗体的OnDeactivate事件<br>示例<br>procedure TfrmTest.FormDeactivate(Sender: TObject);<br>begin<br> Close;<br>end;
W WangZhaoHui Unregistered / Unconfirmed GUEST, unregistred user! 2005-12-28 #27 to gear1023:<br>我的form是showmodal的。没有办法触发FormDeactivate事件的。除非是点按窗体内。我是不能点窗体内的,只能点按窗体外。
B Beyondbill Unregistered / Unconfirmed GUEST, unregistred user! 2005-12-28 #28 来自:WangZhaoHui, 时间:2005-12-26 17:25:59, ID:3309196<br>是啊。实在不行我只能用form.show;然后free了。唉。<br>我原来就是想做个类似combox一点下拉出一条条信息。但没有标题栏。我自己想做一个。将form.style 设成bsNone.一点别的地方就关闭了或隐藏了。 <br><br>如果说你只想做一个ComboBox的下拉列表,用Form来封装的话,那就应该用Show,而不是ShowModal。用ShowModal确实用我上面给你的方法不行,用Show没问题的
来自:WangZhaoHui, 时间:2005-12-26 17:25:59, ID:3309196<br>是啊。实在不行我只能用form.show;然后free了。唉。<br>我原来就是想做个类似combox一点下拉出一条条信息。但没有标题栏。我自己想做一个。将form.style 设成bsNone.一点别的地方就关闭了或隐藏了。 <br><br>如果说你只想做一个ComboBox的下拉列表,用Form来封装的话,那就应该用Show,而不是ShowModal。用ShowModal确实用我上面给你的方法不行,用Show没问题的
W WangZhaoHui Unregistered / Unconfirmed GUEST, unregistred user! 2005-12-28 #29 主要是我想这样<br>procedure Tmainform.button1click(sender:tobject);<br>begin<br> if form2.showmodal = mrOK then<br> begin<br> mainform的处理(edit1.text := ***)<br> end;<br>end;<br>如果我用show, 没办法在过程中间停下来啊。只能谁用form2,form2就得use谁,处理在form2里写,通用性太差了。谁还有什么高见吗
主要是我想这样<br>procedure Tmainform.button1click(sender:tobject);<br>begin<br> if form2.showmodal = mrOK then<br> begin<br> mainform的处理(edit1.text := ***)<br> end;<br>end;<br>如果我用show, 没办法在过程中间停下来啊。只能谁用form2,form2就得use谁,处理在form2里写,通用性太差了。谁还有什么高见吗
B Beyondbill Unregistered / Unconfirmed GUEST, unregistred user! 2005-12-28 #30 像这样也不是没办法的,告诉你一种方法,而且可以减低像你这样的高耦合<br>在Form2中设置一个回掉方法方法属性,比如说叫OnMyClose;<br>具体示例如下<br><br>TForm2 = class(TForm)<br>private<br> FOnMyClose : TNotifyEvent;<br>protected<br><br>public<br><br>published<br> Property OnMyClose : TNotifyEvent read FOnMyClose write FOnMyClose;<br>end;<br><br>......省略.....<br><br>procedure TForm2.FormClose(Sender: TObject;<br> var Action: TCloseAction);<br>begin<br> if Assigned(OnMyClose) then<br> OnMyClose(Sender);<br>end;<br><br>在主窗体中<br><br>Tmainform= class(TForm)<br>private<br> form2 : TForm2;<br>protected<br> procedure DoClose(Sender : TObject);<br>public<br><br>published<br><br>end;<br><br>.....省略...<br><br>procedure Tmainform.button1click(sender:tobject);<br>begin <br> form2 := TForm2.Create(sender);<br> form2.OnMyClose := DoClose;<br> form2.Show;<br>end;<br><br>procedure Tmainform.Doclose(Sender : TObject);<br>begin<br> mainform的处理(edit1.text := ***)<br>end;<br><br>通过上面这样一处理,大大降低了窗体间的耦合性,form2不需要知道主窗体的存在
像这样也不是没办法的,告诉你一种方法,而且可以减低像你这样的高耦合<br>在Form2中设置一个回掉方法方法属性,比如说叫OnMyClose;<br>具体示例如下<br><br>TForm2 = class(TForm)<br>private<br> FOnMyClose : TNotifyEvent;<br>protected<br><br>public<br><br>published<br> Property OnMyClose : TNotifyEvent read FOnMyClose write FOnMyClose;<br>end;<br><br>......省略.....<br><br>procedure TForm2.FormClose(Sender: TObject;<br> var Action: TCloseAction);<br>begin<br> if Assigned(OnMyClose) then<br> OnMyClose(Sender);<br>end;<br><br>在主窗体中<br><br>Tmainform= class(TForm)<br>private<br> form2 : TForm2;<br>protected<br> procedure DoClose(Sender : TObject);<br>public<br><br>published<br><br>end;<br><br>.....省略...<br><br>procedure Tmainform.button1click(sender:tobject);<br>begin <br> form2 := TForm2.Create(sender);<br> form2.OnMyClose := DoClose;<br> form2.Show;<br>end;<br><br>procedure Tmainform.Doclose(Sender : TObject);<br>begin<br> mainform的处理(edit1.text := ***)<br>end;<br><br>通过上面这样一处理,大大降低了窗体间的耦合性,form2不需要知道主窗体的存在
W WangZhaoHui Unregistered / Unconfirmed GUEST, unregistred user! 2005-12-28 #31 谢谢Beyondbill,有完整的例子粘一个吗。