Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Statusbar - Programm schließen unterbinden
Delete - Fr 26.12.08 23:34
Titel: Statusbar - Programm schließen unterbinden
- Nachträglich durch die Entwickler-Ecke gelöscht -
jaenicke - Fr 26.12.08 23:35
Dafür kannst du die Variable CanClose in OnCloseQuery entsprechend setzen.
Delete - Fr 26.12.08 23:45
- Nachträglich durch die Entwickler-Ecke gelöscht -
Delete - Sa 27.12.08 05:22
- Nachträglich durch die Entwickler-Ecke gelöscht -
Blackheart666 - Sa 27.12.08 10:23
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin if MessageDlg('Möchtest du das Programm wirklich beenden?', mtWarning, [mbYes, mbNo], 0)= mrNo then Showmessage('Tu was vor dem schließen'); end; |
Chemiker - Sa 27.12.08 10:51
Hallo,
Das CanClose-Flag entsprechend setzen.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm3.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin beep; if MessageDlg('Möchtest du das Programm wirklich beenden?', mtWarning, [mbYes, mbNo], 0)= mrYes then begin CanClose:=TRUE; end else begin CanClose:= FALSE; end; end; |
Bis bald Chemiker
Delete - Sa 27.12.08 10:52
idYes und idNo sind Konstanten und werden als Rückgabewert der Funktion MessageBox ausgewertet, Du hast aber den MessageDlg verwendet, dort sind die Rückgabewerte anders (mrYes und mrNo).
Macht es doch mal kürzer:
Delphi-Quelltext
1:
| CanClose := MessageDlg('Möchtest du das Programm wirklich beenden?', mtWarning, [mbYes, mbNo], 0)= mrYes; |
Webo - Sa 27.12.08 12:23
Frühlingsrolle hat folgendes geschrieben : |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); var Auswahl: word;
begin If CanClose = true then beep; Auswahl:= MessageDlg('Möchtest du das Programm wirklich beenden?', mtWarning, [mbYes, mbNo], 0); case Antwort of idYes: begin Close; end; idNo: end; end; | |
Da rufst du ja das Event in sich selbst wieder auf, nämlich mit Close; dadurch wiederholt sich das natürlich ewig.
Wie die anderen vor mir schon gesagt haben, du musst (damit geschlossen werden soll) CanClose:=true; setzen und falls auf nein geklickt wurde CanClose:=false;
Grüße
Webo
Delete - Sa 27.12.08 18:24
- Nachträglich durch die Entwickler-Ecke gelöscht -
Delete - Sa 27.12.08 19:29
- Nachträglich durch die Entwickler-Ecke gelöscht -
jaenicke - Sa 27.12.08 19:31
Dann schließe in deinem Schließenknopf doch direkt mit Close, ohne Abfrage. Denn die kommt ja danach in OnCloseQuery.
Alternative (allerdings nicht besonders sinnvoll, weil an zwei Stellen Abfragen stattfinden, je nach Schließmethode):
Eine globale Variable setzen, die dir in OnCloseQuery sagt, dass dort keine Abfrage mehr nötig ist.
// EDIT:
Das ist keine gute Idee:
Frühlingsrolle hat folgendes geschrieben : |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm3.Button3Click(Sender: TObject); var Eing: Integer;
Eing:=MessageBox(0,'Möchten Sie das Pogramm wirklich beenden?','Warnung',(mb_YesNo+mb_iconWarning)); case Eing of 6: Close; end; | |
Denn erstens kann sich eine solche Konstante auch mal ändern, und wenn du da den Zahlenwert nimmst, ändert sich der nicht mit.
Zweitens:
Alleine an der 6 erkennst du später nicht mehr welcher Knopf das ist. An der Konstante schon.
Drittens:
Statt
(mb_YesNo+mb_iconWarning) ist richtig
mb_YesNo or mb_iconWarning.
Chemiker - Sa 27.12.08 20:36
Hallo Frfühlingsrolle,
wie jaenicke schon beschrieben hat, würde ich an Deiner Stelle auch die Abfrage zentralisieren. Verwende für die Abfrage nur einen Dialog, der Anwender wird’s Dir danken.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| procedure TForm3.Button1Click(Sender: TObject); begin close; end;
procedure TForm3.FormCloseQuery(Sender: TObject; var CanClose: Boolean); var Antwort: Integer; begin beep; Antwort:= MessageDlg('Möchtest du das Programm wirklich beenden?', mtWarning, [mbYes, mbNo], 0); if Antwort = mrYes then begin CanClose:=TRUE; end else begin CanClose:= FALSE; end; end; |
Bis bald Chemiker
jaenicke - Sa 27.12.08 20:38
Warum so kompliziert schon wieder...
DeddyH hat oben doch schon die richtige Lösung ohne weitere Variable gepostet. :roll:
DeddyH hat folgendes geschrieben : |
Macht es doch mal kürzer:
Delphi-Quelltext 1:
| CanClose := MessageDlg('Möchtest du das Programm wirklich beenden?', mtWarning, [mbYes, mbNo], 0)= mrYes; | |
Das macht exakt das selbe...
Delete - Sa 27.12.08 20:42
| jaenicke hat folgendes geschrieben: |
| Das macht exakt das selbe... |
Richtiiiiiiich ;)
Delete - Sa 27.12.08 21:03
- Nachträglich durch die Entwickler-Ecke gelöscht -
Blackheart666 - Sa 27.12.08 21:20
Man bräuchte sich nicht streiten wenn die Threadsteller nicht immer solch Geheimnisse hätten. :wink:
jaenicke - Sa 27.12.08 21:27
Blackheart666 hat folgendes geschrieben : |
| Man bräuchte sich nicht streiten wenn die Threadsteller nicht immer solch Geheimnisse hätten. :wink: |
Erstens war das kein Streit, nur eine Klarstellung ;-), und zweitens: Was meinst du mit Geheimnissen? :gruebel:
Warum
Frühlingsrolle den komplizierteren Code genommen hat? Vielleicht sieht eine Zeile nach nix aus. :D
Blackheart666 - Sa 27.12.08 21:35
Mit Geheimniss meine ich das er wohl noch etwas anderes bezweckt als im Anfangspost beschrieben oder er denkt einfach nur zu kompliziert. :wink:
jaenicke - Sa 27.12.08 21:37
Letzteres, er wollte ja nur einen noch einen Knopf zum Schließen ;-).
Delete - So 28.12.08 00:10
- Nachträglich durch die Entwickler-Ecke gelöscht -
jaenicke - So 28.12.08 00:20
Hey, nicht falsch verstehen, das war nicht böse gemeint.
Tut mir leid, wenn das so rüberkam. :flehan:
Delete - So 28.12.08 02:22
- Nachträglich durch die Entwickler-Ecke gelöscht -
jaenicke - So 28.12.08 02:26
Das kommt schon noch. ;-)
Irgendwann weiß man automatisch was bestimmte Sachen noch so alles bewirken bzw. wie bestimmte Abläufe sind. Aber am Anfang bringt man eben manches nicht richtig miteinander in Verbindung, das ist normal. Und dann kann man sich manches eben zunächst nicht erklären. ;-)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!