![]() |
Anwendung wird nicht geschlossen...
Hallo,
ich habe ein kleines Problem und zwar wird meine Anwendung trotz Aufruf von Close im MainFormular nicht geschlossen:
Delphi-Quellcode:
Der Code-Block befindet sich in der Prozedur onFormCreate.
try
IniFileOeffnen(ExtractFilePath(Application.ExeName)); except ShowMessage('Fehler beim Öffnen/Erstellen der ' + CIniName + '!' + ' Bitte überprüfen Sie das Medium. Programm wird beendet'); Close; end; Ich weiss leider nicht, wie ich dieses Problem umgehen/lösen kann. MfG |
Re: Anwendung wird nicht geschlossen...
:hi: Herzlich willkommen in der DP! :party:
Da dein Formular in OnCreate erst erstellt wird, kannst du es dort noch nicht beenden, mache das entweder im OnActivate oder OnShow. Dann müsste es klappen. On Activate wird allerdings, glaube ich, jedesmal ausgeführt, wenn das fenster den Fokus bekommen (falls es ihn zwischendurch "verlor"). Dann kannst du ja eine Boolsche Variable benutzen um zu überprüfen, ob der Code schon ausgeführt wurde. |
Re: Anwendung wird nicht geschlossen...
Hi bimsi,
erstmal herzlich willkommen in der DP :dp: :hi: [OT] Das sag ich in letzter Zeit oft :gruebel: [/OT] Du kannst im OnCreate ein Formular nicht schließen. Du könntest es aber mit einem Timer lösen: Timer aufs Form, Interval auf 500, Enabled auf False. Im OnTimer-Event des Timers den Close-Aufruf. Und im OnCreate schreibst du anstatt des Close-Aufrufs "Timer1.Enabled := True" Das Form blinkt zwar kurz auf, aber das ist besser als wenn es sich nicht schließt ;) Greetz alcaeus [add]Und schon wieder war Matze schneller :roll: :evil:[/add] |
Re: Anwendung wird nicht geschlossen...
Wie wäre es mit Halt, Aplication.Terminate oder Fail im Kontruktor?
|
Re: Anwendung wird nicht geschlossen...
@bimsi: Wie meine vorposter schon geschrieben haben, kannst du im OnCreate Ereignis kein Close benutzen.
Alternative wäre Close durch Application.Terminate zu ersetzen. Besser wäre aber im OnActivate Ereignis ein Close aufzurufen.
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); procedure FormActivate(Sender: TObject); private { Private-Deklarationen } FirstRun: Boolean; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} {--------------------------------------------------------------------------------------------------} procedure TForm1.FormCreate(Sender: TObject); begin FirstRun := True; end; {--------------------------------------------------------------------------------------------------} procedure TForm1.FormActivate(Sender: TObject); begin if not FirstRun then Exit; FirstRun := False; try // Hier INI Datei prüfen except ShowMessage('Fehler'); Close; end; end; {--------------------------------------------------------------------------------------------------} end. |
Re: Anwendung wird nicht geschlossen...
Danke euch. Ich habs mit onShow gelößt.
|
Re: Anwendung wird nicht geschlossen...
Moin!
@NicoDE: Fail ist sehr gefährlich um damit einen Constructor zu beenden. Es wird in der Hilfe von der Nutzung abgeraten und ich selber habe damit arge Probleme gehabt, weil Fail den Speicher vollkommen zerschiesst und z.T. nichtmal richtig zurückspringt. Wenn in einem Constructor etwas schief geht und diese abgebrochen werden soll, dann immer per Exception. MfG Muetze1 |
Re: Anwendung wird nicht geschlossen...
Moin bimsi,
erst einmal herzlich willkommen hier in der Delphi-PRAXiS. Wie wäre es denn, wenn Du die Prüfung vor der Erzeugung des Hauptformulares in der Projektdatei einbaust. Schliesslich soll das Programm im Falle eines Fehlers ja gar nicht erst starten können. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:00 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