![]() |
Wie wird ein Fenster geschlossen?
Hallo zusammen,
mein kleines Problem: Wenn der User auf den X-Button in der Titelleiste meines Formulars klickt, soll irgendeine Methode aufgerufen werden (z.B. um eine bestimmte Aktion abzubrechen etc.). Wird das Fenster jedoch im Code über ein Close() geschlossen, soll o.g. nicht ausgeführt werden... Wie kann ich dieses Problem am Besten lösen? In VB gibt's im OnCloseQuery()-Event wenigstens noch einen entsprechenden Parameter... :( Habe ich vielleicht was übersehen? Danke und liebe Grüße, Marco |
Re: Wie wird ein Fenster geschlossen?
Notfalls mach dir selber einen Parameter!
wenn du im Code Close aufrufen willst setzt du einfach eine Bool-Variable auf True und wenn im OnCloseQuery die Variable auf True steht wingst du das direkt durch... Greetz B00mbuler |
Re: Wie wird ein Fenster geschlossen?
Zitat:
Formular -> Ereignisse -> OnCloseQuery ;) |
Re: Wie wird ein Fenster geschlossen?
Zitat:
|
Re: Wie wird ein Fenster geschlossen?
Hallo hier beiden,
danke für die schnellen Antworten! Zitat:
@boombuler: Diese Lösung habe ich mir auch schon überlegt. Wäre aber allerdings nur eine Notlösung... Warum kann sich jeder selbst denken :???: :wink: @fred: Genau! Gruß, Marco |
Re: Wie wird ein Fenster geschlossen?
Benutze im Code
![]() Alternativ könntest du auch vor dem Aufruf von Close die OnClose-Property auf nil setzen. |
Re: Wie wird ein Fenster geschlossen?
Zitat:
Zitat:
Einfache eine Boolean Variable im private Abschnitt der Formklasse deklarieren und gut ist. |
Re: Wie wird ein Fenster geschlossen?
Hallo Sebastian,
Zitat:
Gruß, Marco P.S.: Wie steht's eigentlich mit deinem TChart-Klone? :-D |
Re: Wie wird ein Fenster geschlossen?
Da kommst Du wohl um eine eigene methode nicht drumrum
close() ist nämlich nicht virtuell und wird imho auch beim Drücken auf das Kreuz gerufen. eine Lösung wäre: im Interface deiner Form schreibst du:
Delphi-Quellcode:
der Body der Funltion sieht dann so aus:
private
_bExecuteCloseAction: Boolean; ... public ... Constructor Create(Owner: TComponent); Override; function CloseQuery: Boolean; Override; Procedure Close(_bExecuteCloseAction: Boolean); ReIntroduce; Overload; ...
Delphi-Quellcode:
Natürlich muss die Boolean variable im Constructor noch initialisiert werden:
Procedure TMyForm.Close(_bExecuteCloseAction: Boolean);
Begin bExecuteCloseAction:=_bExecuteCloseAction; Close; End;
Delphi-Quellcode:
und im CloseQuery abgeprüft:
Constructor TMyForm.Create(Owner: TComponent);
Begin Inherited; bExecuteCloseAction:=True; End;
Delphi-Quellcode:
Jetzt kannst du irgendwo im code schreiben
function TMyForm.CloseQuery: Boolean; Override;
Begin If bExecuteCloseQuery Then Begin //hier Deine schließfunktionalität Result:=?????; End Else Result:=True; End;
Delphi-Quellcode:
MyForm1.Close(false); //wenn nix ausgeführt werden soll
//oder MyForm.Close; //bzw MyForm.Close(true); //wenn die funktionalität ausgeführt werden soll |
Re: Wie wird ein Fenster geschlossen?
Also Jungs, was macht ihr da eigentlich? Das ist ja grausam. :roll:
Delphi-Quellcode:
Klickt man auf die Schaltfläche auf dem Formular, wird es sofort geschlossen, bei Klick auf das Kreuz in der Titelleiste kommt die Abfrage. So war es doch gewollt oder?
type
TForm1 = class(TForm) Button1: TButton; procedure FormCreate(Sender: TObject); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); procedure Button1Click(Sender: TObject); private bCloseButtonUsed: Boolean; { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin bCloseButtonUsed := False; end; procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin if bCloseButtonUsed then CanClose := bCloseButtonUsed else CanClose := Messagebox(Handle, 'Schließen?', 'Fenster schließen', MB_YESNO) = ID_YES; end; procedure TForm1.Button1Click(Sender: TObject); begin bCloseButtonUsed := True; Close; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:21 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