if messagebox(handle,'测试','提示',MB_OKCANCEL+MB_IconInformation+MB_SystemModal)=IDOK then begin       
.....
end;目的是要在这个messagebox在10秒中内没任何操作的话,会自动执行“确定”按钮!请问如何写这个事件的代码?

解决方案 »

  1.   

    自己写一个代码了,用timer组件控制一下。
    在提示同时timer有效,数10秒,自动进行下一步操作。代码自己写了,练练手
      

  2.   

    还不是很明白!可以说清楚点吗?另外确定按钮的句柄是怎么获得的啊!“确定”按钮是messagebox中的确定按钮!
      

  3.   

    我是新手
    我想应该是在messagebox的前一句给变量一个值,比如count;=10。timer中加入如果count不等于0就执行dec(count)。然后在begin中用一个while,如果按过确定或取消句跳出循环,count=0则执行确定。我试的写了一下,可惜messagebox的确定和取消这些句柄不知道怎么获得。如果能获得句柄应该就解决了吧
      

  4.   

    现在我们用的是面向对象编程了,你的思路有点问题了。
    可以让timer每1秒执行一次,当数10次时就做你想做的事。我不管你用什么方法。
    最好你了解一下什么叫timer
    而且你要做的事有什么意义吗?
    为什么非用messagebox
    比如自己新建一个窗体,在窗体上放一个timer组件,窗体的oncreate事件里把timer组件激活。然后计时。当10秒后返回。button1.modalresult属性送一个值 过去就行了,窗体就关了。
    当然这个新窗体要用showmodal方法显示它。思路大约就是这样吧。自己写一个窗体显示提示信息,不一定非用messagebox。这样更灵活。
      

  5.   

    如果再不懂,建议看书吧:)看看显示模态窗体,和timer组件这块就行了,还有button返回值
      

  6.   

    建议学学MessageBox的源代码,在LIB中,在里面添加一个Timer,稍做更改
      

  7.   

    //==建议学学MessageBox的源代码,在LIB中,在里面添加一个Timer,稍做更改
    这样不是麻烦么? 还要修改DELPHI源代码.  whitetiger8(键盘未敲坏,基本功未练成) ( ) 的可行性最好!
      

  8.   

    我的意思是参照Messagebox的源码自己编写一个MsgBoxTimer,有时间我亲自编写一个用在我得程序中。Messagebox是一个带窗体的函数!
      

  9.   

    用Timer一秒为周期。道10妙时:
    keybd_event(13,0,KEYEVENTF_EXTENDEDKEY,0); //KEYDOWN,
      

  10.   

    yhf_zhangqian(可恶) 你的代码只是执行一个确定键吧
    有没有messagebox的函数代码啊!我找不到
      

  11.   

    可以自己做个窗体啊,如  whitetiger8(键盘未敲坏,基本功未练成) 所言
    这样可以更灵活,也少死一些脑细胞:)
      

  12.   

    D:\Borland\Delphi7\Source\Vcl\Dialogs.pas, 里面有MessageDlg的定义以及MessageForm的定义
      

  13.   

    不是没考虑过用form来做!已经试过了,但用form来做提示框会后另外的问题跑出来,似乎更麻烦,没办法才用messagebox的!
      

  14.   

    给个例子 按whitetiger8(键盘未敲坏,基本功未练成)的思想来做 
    FORM1调用对话窗口的窗口
    FORM2(自己做的仿MESSAGEBOX对话窗口)---------------------------
    unit Unit1;interfaceuses
      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;implementationuses Unit2;{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
      Form2:=TForm2.Create(nil);
      Form2.ShowModal;
    end;end.
    ----------------------------------------------------------------------------------
    unit Unit2;interfaceuses
      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 具体的对话框其他功能楼主可以自己扩展。
      

  15.   

    另外启动一个线程,在messagebox弹出的时候取得messagebox的handle,10秒钟后由这个线程向messagebox发出close消息。具体代码还在调试中(我对多线程不是很熟)。
      

  16.   

    必须另外开启一个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;
      

  17.   

    创建一个Form,name Form2,再放一个时针timer 
    当需要的时候,show窗体(ShowModal),不要的时候把他freeandnil掉
    一切由timer控制
    很好做的,自己试一试
    注意加
    if Form2=nil then
    begin
      Form2:=TForm2.create(self)
      Form2.Show;//或者ShowModal,根据你的要求来做了
      ....
    end else
    begin
      ....
    end;