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;