MessageDlg закрывать через х секунд?

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

MessageDlg закрывать через х секунд?

Сообщение McLion » 03.07.2016 14:36:50

Всем привет,

как это сделать, что бы MessageDlg закрывалось автоматически через определенное время?

Спасибо!
Аватара пользователя
McLion
постоялец
 
Сообщения: 332
Зарегистрирован: 06.02.2015 18:41:00

Re: MessageDlg закрывать через х секунд?

Сообщение Little_Roo » 03.07.2016 14:41:43

Timer ?
Аватара пользователя
Little_Roo
энтузиаст
 
Сообщения: 638
Зарегистрирован: 27.02.2009 19:56:36
Откуда: Санкт-Петербург

Re: MessageDlg закрывать через х секунд?

Сообщение VirtUX » 03.07.2016 15:57:54

использовать собственную форму. Выводить её FormDlg.ShowModal, и по таймеру закрывать её.
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: MessageDlg закрывать через х секунд?

Сообщение AlphaBlend » 03.07.2016 16:26:36

Код: Выделить всё
{ Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Buttons, StdCtrls, ExtCtrls; }

TOnTimerMessage = class
      private
           ASeconds: Cardinal;
           timer: TTimer;
           Form: Tform;
      procedure GoTimer(Sender: TObject);
      public
      constructor create(ACaption: String; ATextMessage: String; AMsgType:TMsgDlgType; AButtons: TMsgDlgButtons; ATimeLimit: Cardinal) ;
   end;


   { оборачивающая  функция }

   function ShowMessageWithTimer(ACaption: String; ATextMEssage: String; AMsgType: TMsgDlgType; AButtons: TMsgDlgButtons; AtimeLimit:Cardinal):integer;





Тут инциализация ( IMPLEMENTATION ) ...

Код: Выделить всё
constructor TOntimerMessage.create(ACaption: String; ATextMessage: String; AMsgType:TMsgDlgType; AButtons: TMsgDlgButtons; ATimeLimit: Cardinal);
  begin
       Form:=CreateMessageDialog(ATextMEssage,AMsgType, AButtons);
       Form.Caption:=ACaption;
       Timer:= TTimer.Create(Form);
       Timer.Interval:=1000;
       Timer.OnTimer:=@Self.GoTimer;
   
       Aseconds:=ATimeLimit;

         Timer.Enabled:=true;
  end;

  procedure TOnTimerMessage.GoTimer(Sender: TObject);
  begin
       if Self.Form.Showing then
        begin
             dec(Aseconds);
             { if Aseconds = 0 then Form.ModalResult:=2; { это вернется  в  любом случае ^_^  } }
             if Aseconds = 0 then Form.close;
        end;
  end;



function ShowMessageWithTimer(ACaption: String; ATextMEssage: String; AMsgType: TMsgDlgType; AButtons: TMsgDlgButtons; AtimeLimit:Cardinal):integer;
  var
    Mess:TOntimerMessage;
  begin
       Mess:=TOnTimerMessage.create(ACaption,AtextMessage,AmsgType,Abuttons,AtimeLimit);
       result:=Mess.Form.ShowModal;
   end;                                                                                         


пример работы :

Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);

  begin
      ShowMessageWithTimer('привет','Через десять секнуд окошко закроется!', mtInformation, [mbOk], 10);
  end;                       


:roll:
Аватара пользователя
AlphaBlend
постоялец
 
Сообщения: 207
Зарегистрирован: 22.05.2016 10:13:10


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Роман1971 и гости: 26

Рейтинг@Mail.ru