自定义类中调用windows.MessageBox的问题

璀璨夜空 2010-03-29 05:51:44
在自定义类TMy中添加一个FHandle成员,在主窗口中创建这个类对象My,同时传入窗口的句柄到FHandle中My.SetHandle(Form1.Handle),为什么My.ShowMessage()中调用MessageBox(FHandle, '', '', MB_OK)无法屏蔽掉主窗口Form1,也就是MessageBox没有模态效果了。

但是在Form1中单独使用MessageBox(Self.handle, '', '', MB_OK)就能屏蔽主窗口。

请问大家为什么?
...全文
95 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
璀璨夜空 2010-03-29
  • 打赏
  • 举报
回复
唉,眼睛都看花了,老了,眼睛不中用了。
璀璨夜空 2010-03-29
  • 打赏
  • 举报
回复
找到问题了,唉,都怪自己马虎。但是话说回来,怎么可能一直不马虎呢,呵呵!谢谢大家了。
璀璨夜空 2010-03-29
  • 打赏
  • 举报
回复
真是0啊,好奇怪啊。原本以为不可能的情况竟然可能的。唉。

但是我每次都这样啊,怎么还是0呢。

My = TMy.create();
My.SetHandle(Self.Handle);

{
procedure TMy.SetHandle(tmpHandle: cardinal);
begin
FHandle := tmpHandle;
end;
}

每次创建对象都紧跟着就设置 FHandle啊,怎么还是0呢。妈的,好好查查。

先谢谢了。
SQLDebug_Fan 2010-03-29
  • 打赏
  • 举报
回复
只是没有指定父窗口,检查一下FHandle是否为0
璀璨夜空 2010-03-29
  • 打赏
  • 举报
回复
我刚才又测试了一下,新建一个工程,添加UnitTMy单元,单元中就一个类Tmy
TMy = class
private
FHandle: cardinal;
public
procedure SetHandle(tmp: cardinal);
procedure ShowMessage();
end;

procedure TMy.ShowMessage;
begin
MessageBox(FHandle, ...);
end;

主窗口中Form1中就一个Button
点击Button生成My := Tmy.create; My.SetHandle(Self.Handle); My.ShowMessage;
奇怪的是这回MessageBox是模态的了,但是在我的一个小游戏工程中,怎么不行呢?奇怪!
dinoalex 2010-03-29
  • 打赏
  • 举报
回复
上面所说未测,你用鼠标点去看看是不是,如果是,上面的就可行. 不行的话,等其它人帮吧
dinoalex 2010-03-29
  • 打赏
  • 举报
回复
这里的self应该是applicaction

所以my.sethandle(application.handle)应该就行了

5,388

社区成员

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

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