关于消息的问题,请高手解答!

RosinXia 2004-05-08 09:36:42
一个窗体,我点叉叉键关闭和右键单击任务栏关闭,所触发的消息难道不一样吗??
前一种情况我用WM_CLOSE能处理到,可是后一种就不知道了!而且我用一个消息处理方法来处理WM_CLOSE的时候,老是提示栈溢出,我搞不懂!我怎样才能把上述两个消息都处理到而不出错呢?
...全文
49 13 点赞 打赏 收藏 举报
写回复
13 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
hydonlee 2004-05-08
重要的是, 这样两个消息的处理过程是不一样的.
一个发送向Application, 而一个是发向Form...

可以通过对Application的消息处理实现 .
  • 打赏
  • 举报
回复
楚人无衣 2004-05-08
private
{ Private declarations }
procedure WMSysCommanda(var Msg: TMsg; var Handled: Boolean);
...

procedure TfrmFir.FormCreate(Sender: TObject);
begin
Application.OnMessage := WMSysCommanda;
...
end;
...
procedure TfrmFir.WMSysCommanda(var Msg: TMsg; var Handled: Boolean);
begin
if Msg.wParam = SC_CLOSE then
begin
if Application.MessageBox('你要退出吗?', '确定', MB_OKCANCEL + MB_ICONERROR) = idok then
Inherited
else
Abort;
end;
end;
  • 打赏
  • 举报
回复
RosinXia 2004-05-08
我是否应该在窗口过程里做这些工作,而不是在消息方法里?
  • 打赏
  • 举报
回复
yongxin800 2004-05-08
procedure TForm1.WMSYSCOMMAND(var Msg: TWMSYSCOMMAND);
begin
if Msg.wParam = SC_CLOSE then
begin
if Application.MessageBox('你要退出吗?', '确定', MB_OKCANCEL + MB_ICONERROR) = idok then
Inherited
else
Abort;
end;
end;
  • 打赏
  • 举报
回复
RosinXia 2004-05-08
怎么没有人了啊??
  • 打赏
  • 举报
回复
RosinXia 2004-05-08
我改成这样也不行啊!哪里错了?
procedure TForm1.WMSYSCOMMAND(var Msg: TWMSYSCOMMAND);
begin
if Msg.Msg = SC_CLOSE then
begin
if Application.MessageBox('你要退出吗?', '确定', MB_OKCANCEL + MB_ICONERROR) = idok then
Inherited
else
Abort;
end;
end;
  • 打赏
  • 举报
回复
RosinXia 2004-05-08
hch_45(HCH ~ahong.net~)高手的意思我懂,但是由于某些特殊情况,我必须得用消息得方法来处理!
  • 打赏
  • 举报
回复
hch_45 2004-05-08
你可以在FormCloseQuery事件中加入

if Application.MessageBox('你要退出吗?', '确定', MB_OKCANCEL + MB_ICONERROR) = IDOK then
CanClose := true
else
CanClose := false;
  • 打赏
  • 举报
回复
juliens 2004-05-08
咦,我们两个的绰号相同么,哈哈,有缘有缘!
  • 打赏
  • 举报
回复
hch_45 2004-05-08
应该是处理
WM_SYSCOMMAND

当wParam = SC_CLOSE

就是 窗口关闭
  • 打赏
  • 举报
回复
juliens 2004-05-08
帮你顶!
  • 打赏
  • 举报
回复
RosinXia 2004-05-08
初步代码如下:
if Application.MessageBox('你要退出吗?', '确定', MB_OKCANCEL + MB_ICONERROR) = IDOK then
Inherited
else
Abort;
  • 打赏
  • 举报
回复
RosinXia 2004-05-08
问题还是没有解决,关键怎么会发生栈溢出错误呢??兄弟们,顶顶啊,分不够可以加的!
  • 打赏
  • 举报
回复
相关推荐
发帖
Delphi
加入

4968

社区成员

Delphi 开发及应用
申请成为版主
帖子事件
创建了帖子
2004-05-08 09:36
社区公告
暂无公告