/█//█//█/如何截获窗体被关闭的消息?(现在分不多,以后会多给些) (10分)

  • 主题发起人 主题发起人 yuleibo
  • 开始时间 开始时间
Y

yuleibo

Unregistered / Unconfirmed
GUEST, unregistred user!
我发表一下我的看法,我的思路是截获消息,判断,
如果是WM—CLOSE的消息,则执行ShowWindow(Application.Handle, SW_HIDE);
的语句,
如果不是,则把消息传给WINDOW执行,思路知道,可是我在写源程序,
因为经验水平有限,对消息的处理上面总是吃不透。如果有朋友吃透的话,不妨教教我。

www.softdiy.com

MYOICQ:5008022

yuleibo@tytxy.com
 
既然问题太简单,就不必写出来让人答复。

直言!
 
?真的没有人知道吗??
 
大家知道吗?
 
1. 捕捉windows的关机消息
interface
。。。。

Type
....
private
procedure Checkwinclose(var mymsg:Tmessage);message WM_QUERYENDSESSION;
...
procedure TForm1.Checkwinclose(var mymsg: Tmessage);
begin
{你准备在关机前干的事情}
MYMsg.Result:=1{记住做完事情通知WINDOWS可以关机了}

end;
 
private
procedure Checkwinclose(var mymsg:Tmessage);message WM_QUERYENDSESSION;
...
procedure TForm1.Checkwinclose(var mymsg: Tmessage);
begin
{你准备在关机前干的事情}
MYMsg.Result:=1{记住做完事情通知WINDOWS可以关机了}

end;
我注意了你的这个代码,我觉得Checkwinclose 这个是不是可以自己定义的。
我要的是在点击窗体右上角的小叉以后,不是关闭,而是最小化,所以要检查这个消息。
是关闭就最小化,不是则把消息给WINDOW。

如果我现在要把Checkwinclose 改成mycheckclose 可以不可以。?


 
FormCloseQuery事件就可以了,!!!
 
不行,要是这样的话,还是关闭窗体了。

这个是事件,只是说是在事件执行的时候干些什么事情。并不是说就可以避免这个事件,

而我要求的是用方法把这个消息给截获掉。
 
[:)]你把哪个CanClose:=false;你看能不能关???
 
方法试过了,是可以,我也可以解决这个问题了,可是。哎。这个还不是我满意的呀。
如果可以截获消息的话,可以用来干很多的事情,不是光是禁止关闭窗体。
 
把这个单元加到你的程序里,试试看就知道了
没有仔细检查,可能有小的问题

unit MyWinProc;

interface

uses Windows, Forms;

procedure InitMyWinProc;

implementation

var
WProc:TFNWndProc;

function NewWndProc(Handle:HWND;Msg,WParam,LParam:integer):LongInt; stdcall;
begin
if Msg=WM_CLOSE then
begin
//do what you want to do
end
else Result:=CallWindowProc(WProc,Handle,Msg,WParam,LParam);
end;

procedure InitMyWinProc;
begin
WProc:=TFNWndProc(SetWindowLong(Application.Handle,GWL_WNDPROC,LongInt(@NewWndProc)));
end;

initialization
InitMyWinProc;

finalization
if WProc<>nil then SetWindowLong(Application.Handle,GWL_WNDPROC,LongInt(WProc));

end.
 
还是和我编程出现的错误一样?

Application.Run;

断点在这个地方,提示是 系统错误,找不到模块,代码126
 
我的程序一直在用,没发现这种错误, 不过我捕获的是自定义的消息
你怎么做的? 找不到什么模块? 是编译时找不到,还是运行时找不到
 
  是运行的时候。谁知道找不到什么模块,我自己编写的时候也是这个样子。

我也是用了WNDPROC的消息截获,也不行。

你能讲一下,WNDPROC是截获什么时候的消息。
能写一下,判断关闭窗体消息,把这个消息吃掉的语句吗?
 
对了,张无忌,什么是窗体回调函数?他起什么作用?
 
WNDPROC截获所有本程序的消息,
我的程序里,消息要先经过NewWinProc处理,里面有判断是不是关闭窗体的if..then..
不过如过你有多个窗体,最好再判断一下Handle参数来确定是哪个窗体关闭
至于你怎么会找不到什么模块,怀疑你的Delphi出问题了
 
能不能把你的源程序,删掉的可以让我看的。然后发给我?OK

yuleibo@tytxy.com
 
呵呵。UPUP
设成消息函数可以吗?
 
接受答案了.
 
后退
顶部