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

RosinXia 2004-05-08 09:36:42
一个窗体,我点叉叉键关闭和右键单击任务栏关闭,所触发的消息难道不一样吗??
前一种情况我用WM_CLOSE能处理到,可是后一种就不知道了!而且我用一个消息处理方法来处理WM_CLOSE的时候,老是提示栈溢出,我搞不懂!我怎样才能把上述两个消息都处理到而不出错呢?
...全文
101 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
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
  • 打赏
  • 举报
回复
问题还是没有解决,关键怎么会发生栈溢出错误呢??兄弟们,顶顶啊,分不够可以加的!

5,927

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧