![]() |
AW: MessageDlg über den Default-Button automatisch schließen (MeinCustomDialog.Close;
Wofür wäre diese Variable denn dann? Komme nicht ganz dahinter.
Den messageDlg muss ich leider über eine Message klicken, da er sonst nur geschlossen wird (Rückgabwert Cancel, 2), auch wenn der Button Cancel nicht existiert. |
AW: MessageDlg über den Default-Button automatisch schließen (MeinCustomDialog.Close;
Ich verstehe den Sinn nicht, einen MessageDlg anzuzeigen, der sich automatisch schließt - also nie angeklickt wird. Wäre es nicht sinnvoller, hier stattdessen ein Banner anzuzeigen?
Oder soll das eine Art Nagscreen sein, der nach x Sekunden zugeht, vom Benutzer aber auch schon vorher weggeklickt werden kann? |
AW: MessageDlg über den Default-Button automatisch schließen (MeinCustomDialog.Close;
Habe ich auch schon gesagt. Nur seine Antwort nicht ganz verstanden. In der Statusleiste einfach die letzte Benachrichtigung anzeigen. Fertig.
|
AW: MessageDlg über den Default-Button automatisch schließen (MeinCustomDialog.Close;
Zitat:
Delphi-Quellcode:
Ich meinte es so:
// Dialog erzeugen
MeinCustomMsgDialog := CreateMessageDialog(DlgText, mtInformation, [mbYes, mbNo], mbNo); DialogDefaultButton := TButton(MeinCustomMsgDialog.ActiveControl); // Default Button anklicken if DialogDefaultButton.Handle <> 0 then SendMessage(DialogDefaultButton.Handle, BM_CLICK, 0, 0) else DialogDefaultButton.Close; //Auswertung von MeinCustomMsgDialog case CreateMessageDialog.ShowModal of mbYes: MacheWasBeiJa; mbNo: MacheWasBeiNein; end;
Delphi-Quellcode:
EDIT:
// Dialog erzeugen
MeinCustomMsgDialog := CreateMessageDialog(DlgText, mtInformation, [mbYes, mbNo], mbNo); // Dialog schließen: DialogWurdeAutomatischGeschlossen := true; MeinCustomMsgDialog.Close; //Auswertung von MeinCustomMsgDialog case CreateMessageDialog.ShowModal of mbYes: MacheWasBeiJa; mbNo: MacheWasBeiNein; else if DialogWurdeAutomatischGeschlossen then MacheWasBeiAutomatischemSchließen; end; Aber natürlich ist der Vorschlag der anderen, das anders zu realisieren, z.B. über ein Banner, immer noch sinnvoller. |
AW: MessageDlg über den Default-Button automatisch schließen (MeinCustomDialog.Close;
Das mit dem Banner halte ich für nicht sinnvoll. Es ist auch kein Nagscreen oder ähnliches.
Es ist einfach eine Nachricht, die angezeigt und bestätigt werden muss. Wird sie nicht innerhalb des Timeouts bestätigt, gilt die Aktion als abgebrochen. Verstehe nicht, was daran nicht zu verstehen ist. :o |
AW: MessageDlg über den Default-Button automatisch schließen (MeinCustomDialog.Close;
Und wenn ich da eben mal nicht am Rechner bin, wenn der MessageDlg aufpoppt, muss ich die Aktion von vorne starten? Ich muss also die ganze Zeit auf den Bildschirm starren?
Irgendwie ist das Konzept nicht ganz rund für meine Augen. |
AW: MessageDlg über den Default-Button automatisch schließen (MeinCustomDialog.Close;
Die Aktion dauert in etwa 10 bis 20 Millisekunden. So schlimm wird es also nicht sein :-D
Der Nutzen ist ganz einfach: wenn man die Software fernsteuert und warum auch immer nicht den Modus dafür eingeschaltet hat und dann ein Dialog aufpoppt, ist die Fernsteuerung nutzlos und kann nichts mehr ausrichten. |
AW: MessageDlg über den Default-Button automatisch schließen (MeinCustomDialog.Close;
Also, man kann den Dialog auch z.B. um eine "automatisch schließen"-CheckBox erweitern .
Ich lass auch einen Timer laufen, welcher im Knopf, bzw. in der Title-Caption den TimeOut anzeigt. Bei Mausbewegung oder Tastenklick wird der TimeOut deakiviert. Zum Schließen kann man das Click vom Button aufrufen, oder ModalResult der Form/Dialog setzen.
Delphi-Quellcode:
PS: Bie Buttons heißen so, wie die Parameter.
TButton(DialogDefaultButton).Click;
// oder TButton(MeinCustomMsgDialog.FindComponent('OK')).Click; // oder MeinCustomMsgDialog.ModalResult := mrOK; mbCancel -> Control.Name='Cancel' -> ModalResult:=mrCancel Bei Dialogen via ShowMessage und Co. kommt es drauf an, ob die "neue" Dialog-API vom Windows oder die eigenen TMessageDialog-VCL-Klassen verwendet werden. Dementsprechend muß der Code anders sein, also ob VCL oder Windows-Dialog-API. Via Screen.Forms oder Screen.ActiveForm kommt man auch nachträglich an die VCL-Dialoge ran. MeinCustomMsgDialog.ActiveControl: Man kann auch in MeinCustomMsgDialog.Components den TButton/TCustomButton mit TButton().Default=True suchen ... das ist definitiv der Default-Button. |
AW: MessageDlg über den Default-Button automatisch schließen (MeinCustomDialog.Close;
Zitat:
![]() Nur, wenn eine Fernsteuerung (was immer das sein mag) möglich ist ohne den entsprechenden Modus (was darf man darunter verstehen) einzuschalten, solltest Du das Bedienkonzept Deiner Software einmal überdenken. |
AW: MessageDlg über den Default-Button automatisch schließen (MeinCustomDialog.Close;
Zitat:
Zitat:
Delphi-Quellcode:
procedure MeinCustomMsgDialogOnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
// ... MeinCustomMsgDialog.OnMouseMove := MeinCustomMsgDialogOnMouseMove; // ... procedure TMeineForm.MeinCustomMsgDialogOnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin MeinCustomMsgDialogTimer.Enabled := False; MeinCustomMsgDialogCounterLabel.Visible := False; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz