请问如何用鼠标点击Dialog以外的区域时,关闭对话框。 ( 积分: 100 )

  • 主题发起人 主题发起人 WangZhaoHui
  • 开始时间 开始时间
W

WangZhaoHui

Unregistered / Unconfirmed
GUEST, unregistred user!
我在主程序显示了一个对话框<br>Application.createForm(Form2, TForm2);<br>Form2.showModal;<br>Form2.free;<br>在Form2中,我想用鼠标点击Form2以外的区域时,关闭掉Form2;<br>谁有不用mousehook的办法。
 
我在主程序显示了一个对话框<br>Application.createForm(Form2, TForm2);<br>Form2.showModal;<br>Form2.free;<br>在Form2中,我想用鼠标点击Form2以外的区域时,关闭掉Form2;<br>谁有不用mousehook的办法。
 
showmodal --&gt; Show;<br><br>在 onDeactive 时间里面写如下程序:<br> &nbsp;Free;
 
不能用show,用show改起来太麻烦了。我起码得改几十处
 
用Windows消息来控制
 
CaptureMouse函数,这样就可以接受来自窗体外部的点击和移动鼠标消息。
 
写反了,是MouseCapture := True;
 
或者用API<br>SetCapture(Form1.Handle);<br>窗体关闭的时候一定要调用<br>ReleaseCapture
 
给个例子。代码应该写在哪里。我没用过这些函数啊。多谢大家了。
 
我用时间控件做了一个<br> &nbsp;GetCursorPos(p);<br> &nbsp;if (p.X&gt;=CursorOper.Left) and (p.X&lt;=CursorOper.Left+CursorOper.Width)<br> &nbsp; &nbsp;and (p.Y&gt;=CursorOper.Top) and (p.Y&lt;=CursorOper.Top+CursorOper.Height) then<br> &nbsp;begin<br> &nbsp; &nbsp;CursorStatus.Panels[0].Text:='在本窗体内';<br> &nbsp;end else<br> &nbsp;begin<br> &nbsp; &nbsp;CursorStatus.Panels[0].Text:='在本窗体外';<br> &nbsp; &nbsp;hand:=WindowFromPoint(p);
 
然后呢。我点击一下关闭窗体该如何做啊。
 
消息业可以,不过呢,如果窗体上有别的控件,那么鼠标移动上面,它也认为离开了窗体<br>你可以在上名做写判断看鼠标所在位置的控件-》父是不是窗体,然后判断要不要关闭<br>unit Unit1;<br><br>interface<br><br>uses<br> &nbsp;Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,<br> &nbsp;Dialogs, StdCtrls;<br><br>type<br> &nbsp;TForm1 = class(TForm)<br> &nbsp; &nbsp;Edit1: TEdit;<br> &nbsp;private<br> &nbsp; &nbsp;{ Private declarations }<br> &nbsp;public<br> &nbsp; &nbsp;{ Public declarations }<br> &nbsp; &nbsp;procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;<br> &nbsp;end;<br><br>var<br> &nbsp;Form1: TForm1;<br><br>implementation<br><br>{$R *.dfm}<br><br>{ TForm1 }<br><br>procedure TForm1.CMMouseLeave(var Message: TMessage);<br>begin<br> &nbsp;close;<br>end;
 
关闭窗口就关闭喽
 
不好意思,错了
 
实现窗体的OnDeactivate事件<br>示例<br>procedure TfrmTest.FormDeactivate(Sender: TObject);<br>begin<br> &nbsp;Close;<br>end;
 
上面的好像不行
 
是啊。实在不行我只能用form.show;然后free了。唉。<br>我原来就是想做个类似combox一点下拉出一条条信息。但没有标题栏。我自己想做一个。将form.style 设成bsNone.一点别的地方就关闭了或隐藏了。
 
可以的,我试过<br>而且像你说的是在自定义的ComboBox中用那肯定没问题,我在我自己写的一个扩展的ComboBox中就是用的这种技术
 
我业试了一下<br>好像不行啊
 
你可以在窗体焦点移出Form2时对Form2窗体句柄进行关闭操作,也就是说你可以通过判断当前活动窗体的方法来达到你的需求。
 
后退
顶部