Home » Tipps & Tricks » Applikation » Dialoge » MessageDlg automatisch schließen

MessageDlg automatisch schließen

Über einen Message-Dialog werden meist Informationen, Fehlermeldungen oder Bestätigungen angezeigt. In manchen Fällen kann es sinnvoll sein, dass das Fenster automatisch nach einer gewissen Zeit geschlossen wird, wie es z.B. in ICQ der Fall ist.
Sie benötigen dazu einen Timer, der vorher über die Eigenschaft Enabled deaktiviert werden muss.

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Timer1.Enabled:=False;
  if fCloseMess.Tag = mrNone then
    fCloseMess.Close
  else
    fCloseMess.Modalresult:=fCloseMess.Tag;
end;

function TForm1.TimeMessage(const Msg: string; const DlgType: TMsgDlgType;
const Buttons: TMsgDlgButtons; const CloseTime, DefaultResult: Integer): Integer;
begin
  Result:=DefaultResult;
  Timer1.Interval:=CloseTime;
  fCloseMess:=CreateMessageDialog(Msg, DlgType, Buttons);
  try
    Timer1.Enabled:=True;
    fCloseMess.Tag:=DefaultResult; //Setz den Standard-Rückgabewert
    fCloseMess.Position:=poScreenCenter;
    Result:=fCloseMess.ShowModal;
  finally
    Timer1.Enabled:=False;
    fCloseMess.Free;
  end;
end;

Die o.g. Funktion wird im Prinzip genauso aufgerufen, wie ein normaler Message-Dialog, nur das als vorletzter Parameter die Zeit in Millisekunden angegeben werden muss, wann der Dialog sich automatisch schließen soll. Der letzte Parameter gibt einen Default-Wert an, der im Falle einer automatischen Schließung zurückgegeben wird.

procedure TForm1.Button1Click(Sender: TObject);
begin
  if TimeMessage('Programm schließen?',mtConfirmation,[mbYes,mbNo], 5000, mrYes)=mrYes then
    Close;
end;

Damit die Funktion lauffähig ist muss die Variable fCloseMess und die Funktion noch deklariert werden:

private
   fCloseMess: TForm;
   function TimeMessage(const Msg: string; const DlgType: TMsgDlgType;
const Buttons: TMsgDlgButtons; const CloseTime, DefaultResult: Integer): Integer;