![]() |
MessageDlg und ESCAPE
Hallo Leute,
ich habe ein kleines Problem. Ich will beim Verlassen meines Prog die Wahl zwischen dem Speichern der Date, dem verlassen ohne Speichern und dem Abbruch des Vorgangs (nicht verlassen) lassen. Dazu mache ich MessageDlg auf und übergebe ihm die Buttons. Das war solange mal wunderbar bis jemand mal auf die Idee gekommen ist statt eines Buttons ESCAPE zu drücken. Das führt dazu das ich als Result mrNo zurückkriege und alle Eingaben futsch sind weil ich dann nicht speichere. Fällt irgendeinem von euch dazu eine Lösung ein bzw. eine Möglichkeit das zu verhindern. Gibts in MessageBox irgendwelche Möglichkeiten? |
Re: MessageDlg und ESCAPE
Gibts sowas ? :shock: Genau dasselbe Problem ist mir vor 1 St. aufgefallen. :lol: Also ich habe es mal voerst so gemacht :
Delphi-Quellcode:
So richtig gefallen tut mir das aber irgendwie auch nicht. 8)
if MessageDlg('Alles speichern ?', mtInformation, [mbYes, mbNo], 0) = mrNo then begin
if MessageDlgPos('Nicht speichern ? Sind Sie sicher ? ',mtInformation,[mbYes,mbNo],0,200,200) = mrYes then EingDM.ReadTransaction.Rollback |
Re: MessageDlg und ESCAPE
Escape entspricht eben dem "Nein", obwohl "Abbrechen" sinnvoller wäre. Probier das mal mit einer Messagebox aus.
|
Re: MessageDlg und ESCAPE
@Luckie
Gegenbeispiel (vom Kunden der mein Prog nutzt): Öffne mal Word, tippe was ein und schließe Word. Dann in der erscheinenden MessageBox mal ESCAPE drücken. Die Messagebox geht auf Abbruch und nicht auf Nein. Ich traue ja BigBill ja viel zu aber das kann kein Feature sein was nur Word hat, mal ganz davon abgesehen das das nicht nur Word sondern auch die Delphi-IDE kann! @Hansa So krieg ich das meinem Kunden leider nicht verkauft. Dann schon lieber ne eigene MessageBox basteln! |
Re: MessageDlg und ESCAPE
Mit application.message klappt das gaaaanz hervorragend ;-)
Delphi-Quellcode:
[edit=sakura] [delphi]Tags Mfg, sakura[/edit]
procedure TForm1.Button1Click(Sender: TObject);
var antwort : integer; begin antwort := application.messagebox('Ja oder Nein?','Frage',32+3); if antwort=idyes then begin showmessage('Antwort war ja / Speichern'); end else if antwort=idno then begin showmessage('Antwort war nein / Nicht Speichern'); end else showmessage('Antwort war Abbrechen'); end; |
Re: MessageDlg und ESCAPE
Zitat:
|
Re: MessageDlg und ESCAPE
Kaum macht mans richtig, schon funktionierts!!!
(Altes chinesisches Sprichwort) @Luckie: Immer diese feinen Unterschiede zwischen MessageBox und MessageDlg!! |
Re: MessageDlg und ESCAPE
Kleiner Codeschnippsel:
Delphi-Quellcode:
ESC bewirkt hier wie gewünscht "Abbrechen" = mrCancel.... :gruebel:
CASE MessageDlg('Soll das Projekt gesichert werden?',mtConfirmation, mbYesNoCancel, 0) OF
mrYes : CanClose := ProjektSpeichern(); mrNo : CanClose := TRUE; END; Gruß Stephan |
Re: MessageDlg und ESCAPE
mbYesNoCancel, ja da war doch was. :thumb: Nur noch eine Frage : Wo kommt das CanClose her und wie wirkt es sich aus ?
|
Re: MessageDlg und ESCAPE
Hi Hansa,
Zitat:
![]() Greetz alcaeus |
Re: MessageDlg und ESCAPE
Ja, :thumb: das is einer OnCloseQuery-Behandlung entnommen, in diesem Fall wird ein MDIChild geschlossen und nachgefragt, ob man vor dem Schließen die Datei speichern möchte. Wird abgebrochen, ist der Parameter "CanClose"=FALSE und das MDIChild wird nicht geschlossen (wie bei Word u.ä.) ...Das OnCloseQuery Ereignis tritt ein, bevor das Fenster geschlossen wird..
Gruß Stephan :dance: |
Re: MessageDlg und ESCAPE
OnCloseQuery zusammen mit YesNoCancel ist genau das was gebraucht wird. Zumindest von mir. 8) Das beste daran ist das Verhaltenbei mrCancel. Das Formular ist dann nämlich genau in dem Zustand, wie es vor dem versuchten schließen war. Cursor, Feldinhalte usw. bleiben dann unverändert. Und ich hatte mir zumindest schon überlegt, wie ich den Cursor wieder an die Stelle zurückbugsiere, wo er vorher war. :mrgreen:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:56 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 by Thomas Breitkreuz