Autor Beitrag
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 26.12.08 23:34 
- Nachträglich durch die Entwickler-Ecke gelöscht -
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 26.12.08 23:35 
Dafür kannst du die Variable CanClose in OnCloseQuery entsprechend setzen.
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 26.12.08 23:45 
- Nachträglich durch die Entwickler-Ecke gelöscht -
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 27.12.08 05:22 
- Nachträglich durch die Entwickler-Ecke gelöscht -
Blackheart666
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2195

XP
D3Prof, D6Pers.
BeitragVerfasst: Sa 27.12.08 10:23 
ausblenden 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;

_________________
Blackheart666
Der Irrsinn ist bei Einzelnen etwas Seltenes, - aber bei Gruppen, Parteien, Völkern, Zeiten die Regel. (Friedrich Nietzsche)
Chemiker
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 194
Erhaltene Danke: 14

XP, Vista 32 Bit, Vista 64 Bit, Win 7 64 Bit, Win 10, Win 11
BDS 2006, RAD Studio 2009+C++, Delphi 13, VS 2010 Prof.
BeitragVerfasst: Sa 27.12.08 10:51 
Hallo,

Das CanClose-Flag entsprechend setzen.

ausblenden 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
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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:
ausblenden Delphi-Quelltext
1:
 CanClose := MessageDlg('Möchtest du das Programm wirklich beenden?', mtWarning, [mbYes, mbNo], 0)= mrYes;					
Webo
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 577
Erhaltene Danke: 14

Win 7, Debian
C# (Visual Studio 2013), PHP, C, C++ (Eclipse, KDevelop)
BeitragVerfasst: Sa 27.12.08 12:23 
user profile iconFrühlingsrolle hat folgendes geschrieben Zum zitierten Posting springen:

ausblenden 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

_________________
Man kann nur das aus dem Ärmel schütteln, was man auch vorher reingesteckt hat.
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 27.12.08 18:24 
- Nachträglich durch die Entwickler-Ecke gelöscht -
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 27.12.08 19:29 
- Nachträglich durch die Entwickler-Ecke gelöscht -
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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:
user profile iconFrühlingsrolle hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden 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; // Ja wird geklickt !
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 194
Erhaltene Danke: 14

XP, Vista 32 Bit, Vista 64 Bit, Win 7 64 Bit, Win 10, Win 11
BDS 2006, RAD Studio 2009+C++, Delphi 13, VS 2010 Prof.
BeitragVerfasst: 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.

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 27.12.08 20:38 
Warum so kompliziert schon wieder...
user profile iconDeddyH hat oben doch schon die richtige Lösung ohne weitere Variable gepostet. :roll:
user profile iconDeddyH hat folgendes geschrieben Zum zitierten Posting springen:
Macht es doch mal kürzer:
ausblenden Delphi-Quelltext
1:
 CanClose := MessageDlg('Möchtest du das Programm wirklich beenden?', mtWarning, [mbYes, mbNo], 0)= mrYes;					

Das macht exakt das selbe...
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 27.12.08 20:42 
jaenicke hat folgendes geschrieben:
Das macht exakt das selbe...

Richtiiiiiiich ;)
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 27.12.08 21:03 
- Nachträglich durch die Entwickler-Ecke gelöscht -
Blackheart666
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2195

XP
D3Prof, D6Pers.
BeitragVerfasst: Sa 27.12.08 21:20 
Man bräuchte sich nicht streiten wenn die Threadsteller nicht immer solch Geheimnisse hätten. :wink:

_________________
Blackheart666
Der Irrsinn ist bei Einzelnen etwas Seltenes, - aber bei Gruppen, Parteien, Völkern, Zeiten die Regel. (Friedrich Nietzsche)
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 27.12.08 21:27 
user profile iconBlackheart666 hat folgendes geschrieben Zum zitierten Posting springen:
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 user profile iconFrühlingsrolle den komplizierteren Code genommen hat? Vielleicht sieht eine Zeile nach nix aus. :D
Blackheart666
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2195

XP
D3Prof, D6Pers.
BeitragVerfasst: 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:

_________________
Blackheart666
Der Irrsinn ist bei Einzelnen etwas Seltenes, - aber bei Gruppen, Parteien, Völkern, Zeiten die Regel. (Friedrich Nietzsche)
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 27.12.08 21:37 
Letzteres, er wollte ja nur einen noch einen Knopf zum Schließen ;-).
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 28.12.08 00:10 
- Nachträglich durch die Entwickler-Ecke gelöscht -