一个模式窗口显示在主窗口之上时,当鼠标在模式窗口外点击时,模式窗口自动关闭,急(110分)

  • 主题发起人 主题发起人 ryanlee
  • 开始时间 开始时间
R

ryanlee

Unregistered / Unconfirmed
GUEST, unregistred user!
我有一个模式窗口显示在主窗口之上,当鼠标在模式窗口外点击时,模式窗口会自动关闭,
(FORM上有全部占据显示的PANEL,PANEL上有各种组件),请高手帮帮忙,急啊!!!!!!
谢谢了
 
你的模式窗口是否用showmodal方式显示?
按照道理来说showmodal方式显示的是一直在最上层的,
从你说的情况看,好像是没有用showmodal显示窗体,
点击其他窗口,此窗体被其他窗体遮住了。
 
1.检查代码,确认是否用showmodal显示.
2.检查有没有什么事件重载了过程
 
我是SHOWMODAL的,我的意思是MOUSE点击在窗口外时,SHOWMODAL的窗口能关闭.
 
程序有没有setwindowlong重新设置窗体风格?
最好把你的程序贴出来看看?
 
没有,我是SHOWMODAL后,我想在模式窗口上一出窗口外点击MOUSE时,窗口自动关闭.
 
也许讲得不明白,我是想,这样吧,可不可以程序时我就一个窗口,当我MOUSE移动到窗口外,
这时点击MOUSE时,我的程序关闭.不知可不可以做到,我想到一个VC里的绘图工具代码,
MOUSE在外面还有效,但我DELPHI可否做到,很感谢楼上的回答.能继续帮我想想吗?
 

在窗体的private哉定义
procedure cmmouseleave(var msg:Tmessage);message cm_mouseleave;
begin
sendmessage(from1.handle,wm_close,0,0)
end;
 
刚才试了一下可行
unit Unit2;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;

type
TForm2 = class(TForm)
private
procedure cmmouseleave(var msg:Tmessage);message cm_mouseleave;
{ Private declarations }
public
{ Public declarations }
end;

var
Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.cmmouseleave(var msg: Tmessage);
begin
sendmessage(handle,wm_close,0,0)
end;

end.
 
好的,我试一下先
 
很谢谢52free的回复,你所说的方法对于程序主窗口有效,但对于主FORM上SHOWMODAL的窗口就有时会不灵了,message cm_mouseleave;是相对MOUSE离开时引发的,主窗口测试OK,子窗就不行了,请52free帮忙再想想,谢谢
 
我试的就是showmodal的子窗体
你是mdi模式?
 
问题是我MOUSE离开SHOWMODAL窗口就关闭了,我是想点击后关闭
 
那不应该啊
我再看一下
我试的时候子窗体上未放任何控件是个空的子窗体
 
我放与不放都是这样,MOUSE多移动几下(里外),不用点击就会关闭子窗口
 
可以啊
你要将那个消息放到子窗体的窗体类中
不行的话我发代码过去
 
还有一点MOUSE往右或往下移动离开窗口时会马上关闭,往上往左就不会,多几次都不会
你试试往下往右
 
好的,你发E-MAIL: lwl80217@21cn.com
 
对没考虑mouse会移到子窗体的控件上
改了一下
unit Unit2;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm2 = class(TForm)
Edit1: TEdit;
private
{ Private declarations }
procedure cmmouseleave(var msg:Tmessage);message cm_mouseleave;
public
{ Public declarations }
end;

var
Form2: TForm2;

implementation

uses Unit1;

{$R *.dfm}

procedure TForm2.cmmouseleave(var msg: Tmessage);
var tp:Tpoint;
h:Thandle;
begin
getcursorpos(tp);
h:=windowfrompoint(tp);
if h=form1.Handle then
sendmessage(handle,wm_close,0,0)
end;

end.
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部