请问:如何判断Application.MessageBox已经弹出来了?

时间:2022-12-02 17:09:31
我做了一个消息发送程序,当有消息来的时候,弹出一个Application.MessageBox让对方选择是否察看,但是如果用户没有查看的时候另外一个消息又来了,会弹出第二个Application.MessageBox,我想做个判断,如果提示窗口已经弹出来了,就不再谈出提示窗口,如何判断Application.MessageBox已经弹出来了呢?请高手支招。

10 个解决方案

#1


这个要求挺变态的,你换个思路。
如果执行了Application.MessageBox 设全局变量为1,如果Application.MessageBox有了返回值则全局变量为0

#2


你干脆自己做个窗体来代替这个MessageBox好了
然后用
if not assigned(form1) then
  Form1:= Form1.Create(Application);
Form1.ShowModal;

#3


我都是用一个变量来标志(比如初使值为0),在显示MessageBox前,检查这个变量的值是否
为0。如果为1,直接退出;如果为0,先将变量设为1,然后调用MessageBox。在MessageBox
下面一行,将变量的值设为0就可以了。

#4


function AppMessage(AMsg: string): Boolean;

implementation

var 
  bHas: Boolean=False;
  

function AppMessage(AMsg: string): Boolean;
begin
  Result:=False;
  if bHas then Exit;
  bHas:=True;
  Application.MessageBox(PChar(AMsg), '提示', MB_ICONINFORMATION+MB_OK);
  bHas:=False;
  Result:=True;
end;

#5


你用这个吧,你生成后有句柄的
messagedlg();

#6


简单的方法就是设置标志变量

zhoutian618(周天) 完全可以

#7


简单的办法是设置一个全局变量 有消息时设置为TRUE 用户看消息后设置为FALSE
有新消息来时再设置为TRUE 只有当FALSE状态时才弹出新消息

#8


其实messagebox也是一个窗体,你完全可以根据窗体的caption找到窗体
比如
 messagebox(0,'hello world','hello',mb_ok);

 h := findwindow(nil,'hello');
 if h > 0 then
    showmessage('messagebox has been called');

不过我还是比较倾向于楼上几位的方法

#9


还是自己做个窗体好。

#10


强烈同意
 naughtyboy((笨!奔!)) 


Application.MessageBox(PChar(AMsg), '提示', MB_ICONINFORMATION+MB_OK);


产生窗体是类名为:  #32770 (Dialog)
Caption 为:        提示  
该窗体下有一个  Button 与 Static

判断时为了得到准确的结果,
建议要同时判断以上几个条件,

因为  #32770 (Dialog) 类是很普遍的, QQ 的主窗体就是它

#1


这个要求挺变态的,你换个思路。
如果执行了Application.MessageBox 设全局变量为1,如果Application.MessageBox有了返回值则全局变量为0

#2


你干脆自己做个窗体来代替这个MessageBox好了
然后用
if not assigned(form1) then
  Form1:= Form1.Create(Application);
Form1.ShowModal;

#3


我都是用一个变量来标志(比如初使值为0),在显示MessageBox前,检查这个变量的值是否
为0。如果为1,直接退出;如果为0,先将变量设为1,然后调用MessageBox。在MessageBox
下面一行,将变量的值设为0就可以了。

#4


function AppMessage(AMsg: string): Boolean;

implementation

var 
  bHas: Boolean=False;
  

function AppMessage(AMsg: string): Boolean;
begin
  Result:=False;
  if bHas then Exit;
  bHas:=True;
  Application.MessageBox(PChar(AMsg), '提示', MB_ICONINFORMATION+MB_OK);
  bHas:=False;
  Result:=True;
end;

#5


你用这个吧,你生成后有句柄的
messagedlg();

#6


简单的方法就是设置标志变量

zhoutian618(周天) 完全可以

#7


简单的办法是设置一个全局变量 有消息时设置为TRUE 用户看消息后设置为FALSE
有新消息来时再设置为TRUE 只有当FALSE状态时才弹出新消息

#8


其实messagebox也是一个窗体,你完全可以根据窗体的caption找到窗体
比如
 messagebox(0,'hello world','hello',mb_ok);

 h := findwindow(nil,'hello');
 if h > 0 then
    showmessage('messagebox has been called');

不过我还是比较倾向于楼上几位的方法

#9


还是自己做个窗体好。

#10


强烈同意
 naughtyboy((笨!奔!)) 


Application.MessageBox(PChar(AMsg), '提示', MB_ICONINFORMATION+MB_OK);


产生窗体是类名为:  #32770 (Dialog)
Caption 为:        提示  
该窗体下有一个  Button 与 Static

判断时为了得到准确的结果,
建议要同时判断以上几个条件,

因为  #32770 (Dialog) 类是很普遍的, QQ 的主窗体就是它