关于messagebox的问题!

jl820712 2004-08-27 11:42:02
if messagebox(handle,'测试','提示',MB_OKCANCEL+MB_IconInformation+MB_SystemModal)=IDOK then begin
.....
end;

目的是要在这个messagebox在10秒中内没任何操作的话,会自动执行“确定”按钮!

请问如何写这个事件的代码?
...全文
314 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
cdsgajxlp 2004-09-01
  • 打赏
  • 举报
回复
创建一个Form,name Form2,再放一个时针timer
当需要的时候,show窗体(ShowModal),不要的时候把他freeandnil掉
一切由timer控制
很好做的,自己试一试
注意加
if Form2=nil then
begin
Form2:=TForm2.create(self)
Form2.Show;//或者ShowModal,根据你的要求来做了
....
end else
begin
....
end;



eagle_2 2004-09-01
  • 打赏
  • 举报
回复
必须另外开启一个timer或者另外开启一个监视线程,因为messagebox执行后实际上产生了软中断,其后面的程序不会执行所以把关闭代码写在messagebox后面是不行的
timer1timer(sender:tobject);
var
h:thandle;
begin
h:=findwindow('messagebox的类名','messagebox的窗体名');//你可以查看一下vcl原代码看看messagebox的类名 你也可以用其他辅助软件捕获,或自己用enumwindows和enumchildwindows枚举自己寻找
if h<>0 then //找到窗口 或者用getactivewindow获得当前最前端窗体的handle,但是要保证你的messagebox为最前端
posemessage(h,wm_close,0,0);
end;
fireinthehole 2004-08-31
  • 打赏
  • 举报
回复
另外启动一个线程,在messagebox弹出的时候取得messagebox的handle,10秒钟后由这个线程向messagebox发出close消息。具体代码还在调试中(我对多线程不是很熟)。
jl820712 2004-08-30
  • 打赏
  • 举报
回复
不是没考虑过用form来做!已经试过了,但用form来做提示框会后另外的问题跑出来,似乎更麻烦,没办法才用messagebox的!
Jumpi 2004-08-30
  • 打赏
  • 举报
回复
D:\Borland\Delphi7\Source\Vcl\Dialogs.pas, 里面有MessageDlg的定义以及MessageForm的定义
亮剑_ 2004-08-30
  • 打赏
  • 举报
回复
可以自己做个窗体啊,如 whitetiger8(键盘未敲坏,基本功未练成) 所言
这样可以更灵活,也少死一些脑细胞:)
jl820712 2004-08-30
  • 打赏
  • 举报
回复
yhf_zhangqian(可恶)

你的代码只是执行一个确定键吧


有没有messagebox的函数代码啊!我找不到
lh9823 2004-08-30
  • 打赏
  • 举报
回复
给个例子 按whitetiger8(键盘未敲坏,基本功未练成)的思想来做
FORM1调用对话窗口的窗口
FORM2(自己做的仿MESSAGEBOX对话窗口)

---------------------------
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
Form2:=TForm2.Create(nil);
Form2.ShowModal;
end;

end.
-----------------------------------------

-----------------------------------------
unit Unit2;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;

type
TForm2 = class(TForm)
Timer1: TTimer;
Button1: TButton;
Button2: TButton;
procedure Button2Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form2: TForm2;
c:integer;
implementation

{$R *.dfm}

procedure TForm2.Button2Click(Sender: TObject);
begin
close;
end;

procedure TForm2.Timer1Timer(Sender: TObject);
begin
inc(c);
Button1.Caption:='Button1';
Button1.Caption:=Button1.Caption+'('+inttostr(c)+')';
if c=10 then
Form2.ModalResult:=mrCancel;
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
c:=0;
end;

end.
------------------------------------------------
不知道楼主是不是这个意思,FORM2只有3个控件BUTTON1 BUTTON2 和TIMER1 具体的对话框其他功能楼主可以自己扩展。
jl820712 2004-08-28
  • 打赏
  • 举报
回复
还不是很明白!可以说清楚点吗?

另外确定按钮的句柄是怎么获得的啊!“确定”按钮是messagebox中的确定按钮!
yhf_zhangqian 2004-08-28
  • 打赏
  • 举报
回复
用Timer一秒为周期。道10妙时:
keybd_event(13,0,KEYEVENTF_EXTENDEDKEY,0); //KEYDOWN,
Jumpi 2004-08-28
  • 打赏
  • 举报
回复
我的意思是参照Messagebox的源码自己编写一个MsgBoxTimer,有时间我亲自编写一个用在我得程序中。Messagebox是一个带窗体的函数!
leobearcn 2004-08-28
  • 打赏
  • 举报
回复
//==建议学学MessageBox的源代码,在LIB中,在里面添加一个Timer,稍做更改
这样不是麻烦么? 还要修改DELPHI源代码.

whitetiger8(键盘未敲坏,基本功未练成) ( ) 的可行性最好!
xthmpro_cn 2004-08-28
  • 打赏
  • 举报
回复
楼上的应该多解释一下.
Jumpi 2004-08-28
  • 打赏
  • 举报
回复
建议学学MessageBox的源代码,在LIB中,在里面添加一个Timer,稍做更改
whitetiger8 2004-08-28
  • 打赏
  • 举报
回复
如果再不懂,建议看书吧:)看看显示模态窗体,和timer组件这块就行了,还有button返回值
whitetiger8 2004-08-28
  • 打赏
  • 举报
回复
现在我们用的是面向对象编程了,你的思路有点问题了。
可以让timer每1秒执行一次,当数10次时就做你想做的事。我不管你用什么方法。
最好你了解一下什么叫timer
而且你要做的事有什么意义吗?
为什么非用messagebox
比如自己新建一个窗体,在窗体上放一个timer组件,窗体的oncreate事件里把timer组件激活。然后计时。当10秒后返回。button1.modalresult属性送一个值 过去就行了,窗体就关了。
当然这个新窗体要用showmodal方法显示它。思路大约就是这样吧。自己写一个窗体显示提示信息,不一定非用messagebox。这样更灵活。
rcaicc 2004-08-28
  • 打赏
  • 举报
回复
我是新手
我想应该是在messagebox的前一句给变量一个值,比如count;=10。timer中加入如果count不等于0就执行dec(count)。然后在begin中用一个while,如果按过确定或取消句跳出循环,count=0则执行确定。

我试的写了一下,可惜messagebox的确定和取消这些句柄不知道怎么获得。如果能获得句柄应该就解决了吧
whitetiger8 2004-08-27
  • 打赏
  • 举报
回复
自己写一个代码了,用timer组件控制一下。
在提示同时timer有效,数10秒,自动进行下一步操作。代码自己写了,练练手
hsmserver 2004-08-27
  • 打赏
  • 举报
回复
先获得确定按钮的句柄
然后广播一条消息;

5,928

社区成员

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

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