如何自动关闭弹出的messagedlg?

解决方案 »

  1.   

    用线程来实现吧
    不断的findwindow
      

  2.   

    自己建个窗口界面模拟Messagedlg就可以
      

  3.   

    有下面的函数,你可以在定时器中Show!
    function CreateMessageDialog(const Msg: string; DlgType: TMsgDlgType; Buttons: 
    TMsgDlgButtons): TForm;
      

  4.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        Timer1: TTimer;
        procedure Button1Click(Sender: TObject);
        procedure Timer1Timer(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
       hh:word;
    implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
    with CreateMessageDialog('dsfdsf',mtWarning, [mbYes, mbNo]) do
        try
         Position := poScreenCenter;
         hh:=handle;
         timer1.Enabled:=true;
         ShowModal;
         hh:=0;
         timer1.Enabled:=false;
        finally
          hh:=0;
          timer1.Enabled:=false;
          Free;
        end;end;procedure TForm1.Timer1Timer(Sender: TObject);
    begin
    if hh>0 then
        SendMessage(hh, WM_SYSCOMMAND, SC_CLOSE, 0);
      enabled:=false;
    end;end.