Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Anwendung wird nicht geschlossen... (https://www.delphipraxis.net/29971-anwendung-wird-nicht-geschlossen.html)

bimsi 17. Sep 2004 16:28


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:
  try
    IniFileOeffnen(ExtractFilePath(Application.ExeName));
  except
  ShowMessage('Fehler beim Öffnen/Erstellen der ' + CIniName + '!'
                  + ' Bitte überprüfen Sie das Medium. Programm wird beendet');
  Close;
  end;
Der Code-Block befindet sich in der Prozedur onFormCreate.
Ich weiss leider nicht, wie ich dieses Problem umgehen/lösen kann.

MfG

Matze 17. Sep 2004 16:31

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.

alcaeus 17. Sep 2004 16:32

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]

NicoDE 17. Sep 2004 16:34

Re: Anwendung wird nicht geschlossen...
 
Wie wäre es mit Halt, Aplication.Terminate oder Fail im Kontruktor?

Sprint 17. Sep 2004 16:38

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.

bimsi 17. Sep 2004 16:46

Re: Anwendung wird nicht geschlossen...
 
Danke euch. Ich habs mit onShow gelößt.

Muetze1 17. Sep 2004 17:11

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

Christian Seehase 17. Sep 2004 17:42

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 11:20 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz