![]() |
formCloseQuery umgehen
Hallo,
gibt es eine möglichkeit, das event "OnCloseQuery" beim schließen eines programmes zu umgehen? Ziel ist folgendes: Programm starten Initialisieren wenn nicht erfolgreich, dann schließen ohne FormCloseQuery(...) auszuführen sonst programm durchlaufen lassen und "beim" Schließen FormCloseQuery(...) ausführen Oder muß ich den umweg über var CloseWurdeWaehrendInitAufgerufen:bool; gehen? Gruß Martin |
Re: formCloseQuery umgehen
Hi,
du musst nicht über diese Variable gehen. Du kannst zwar ein Event nicht wirklich umgehen, aber eingetragen für ein solches Event wird immer nur ein Funktionszeiger. Wenn du nun keine Behandlung des Events OnCloseQuery möchtest, so brauchst du nur den leeren / nil Zeiger angeben (z.B. im Objektinspektor kein Eintrage bei dem Ereignis OnCloseQuery). Wurde dein Init erfolgreich ausgeführt, so kannst du dort (nachdem du weißt dass es erfolgreich war) einfach deine Behandlung zuweisen:
Delphi-Quellcode:
type
TForm1 = class(TForm) ... private procedure init; procedure DoOnCloseQuery(* was auch immer benötigt wird *) end; procedure TForm1.init; begin ... if ERFOLGREICH then begin self.OnCloseQuery := self.DoOnCloseQuery; end; end; |
Re: formCloseQuery umgehen
genauso könntest du im private eine Variable plazieren in der du speicherst ob das INIT erfolgreich war. Und im OnCloseQuery gehst du dann auf die Variable ein
|
Re: formCloseQuery umgehen
erst einmal vielen Dank für die Antworten
@SirThornberry den weg über eine extra variable wollte ich möglichst umgehen, da es nur um ein einmaliges fehlerabfangen beim starten geht. @Der_Unwissende man munkelt, es soll auch ausserhalb des OI die möglichkeit geben, events zuzuordnen... auf die idee hätte ich vielleicht auch mal selbst kommen können, schlimm, wie man manachmal auf dem schlauch steht. :wall: aber leider tritt noch ein kleines problem auf:
Delphi-Quellcode:
ich kann mein programm während des Events "OnCreate" nicht mit self.close schließen. gibt es da alternativen, sonst muß ich mir noch mal was anderes überlegen.
type
TForm1 = class(TForm) ... private procedure DoOnFormCreate; procedure DoOnCloseQuery(* was auch immer benötigt wird *) end; procedure TForm1.DoOnFormcreate(sender:TObject; begin ... if ERFOLGREICH then begin self.OnCloseQuery := self.DoOnCloseQuery; end else self.close ; //<--- geht nicht end; |
Re: formCloseQuery umgehen
Ich kann auch nicht gleichzeitig mit dem einen Bein ins Auto einsteigen und mit dem anderen wieder aussteigen wollen. Das OnCreate-Ereignis ist nun mal dazu da das Formular zu initialisieren. Entweder beendest du deine Anwendung vorher oder nachher.
|
Re: formCloseQuery umgehen
hab mir schon sowas gedacht. dann muß mal schauen, ob da nicht ein grundsätzlicher designgedanke fehlerhaft ist.
|
Re: formCloseQuery umgehen
wie wärs mit halt(0) im fehlerfall?
|
Re: formCloseQuery umgehen
gut, das hat vor allem den vorteil, dass es genau so funktioniert, wie ich mir das vorstelle ;-)
dank Dir, sonst hätte ich das erst beim ersten auslösen des Timers abfangen können, sprich 100ms später. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:19 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