Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Form1 bei OnCreate Ereignis beenden (https://www.delphipraxis.net/18689-form1-bei-oncreate-ereignis-beenden.html)

glunzl 23. Mär 2004 12:07


Form1 bei OnCreate Ereignis beenden
 
Hallo!

Ich erzeuge beim OnFormCreate Ereignis u.a. eine Datei. Wenn diese nicht erstellt werden kann, möchte ich das Programm beenden. Leider Funktioniert aber der Aufruf Form1.Close nicht.
Das Ganze sieht z.Z. so aus:

Delphi-Quellcode:
if FileExists('FileName') then
  if not DeleteFile('FileName') then
    begin
      Application.MessageBox('Geht nicht', 'Meldung', 48) ;
      form1.Close ; //funzt nicht
    end ;
Kann mir jemand sagen warum das nicht funzt?

Gruss
Michael

Matze 23. Mär 2004 12:13

Re: Form1 bei OnCreate Ereignis beenden
 
Da im OnCreate das Formular erzeugt wird, kann man es noch nicht schließen, da es ja noch nicht vorhanden ist.

Im OnActivate würde es gehen, allerdings siehtst du dann für einen Sekundenbruchteil dein Formular.

Sharky 23. Mär 2004 12:14

Re: Form1 bei OnCreate Ereignis beenden
 
Zitat:

Zitat von glunzl
...Kann mir jemand sagen warum das nicht funzt?...

Warum weiss ich auch nicht. Aber packe deine Prüfung doch einfach in das OnActivate.
Oder noch besser. In den Quellcode der Aplikation. Dann braucht das Fenster garnicht erst erzeugt werden.

Dannyboy 23. Mär 2004 12:16

Re: Form1 bei OnCreate Ereignis beenden
 
Hallo glunzl,
dieses sch*** Problem hatte ich auch schon und ich bin daran zerbrochen.
Zur Strafe habe ich das dann so gemacht:
Delphi-Quellcode:
// wir befinden uns in Create des Formulars
Application.Terminate;
HALT;
Gruß DANNYBOY

glunzl 23. Mär 2004 12:17

Re: Form1 bei OnCreate Ereignis beenden
 
@Matze: Danke für die Erklärung. Leuchtet jetzt ein :-)

@Sharky:
Zitat:

Oder noch besser. In den Quellcode der Aplikation.
Wie mache ich denn das?

Michael

Luckie 23. Mär 2004 12:20

Re: Form1 bei OnCreate Ereignis beenden
 
Lass dir die Projektdatei anzeigen, füge in dem Uses Abschnitt SysUtils hinzu, damit du FileExists verwenden kannst, und mach davon das Erzeugen der Weiteren Formulare und das Starten der Anwendung abhängig.

Ach ja die Projekt-Datei ist die Datei mit der endung dpr. Sie enhält das eigentliche Hauptprogramm.

Sharky 23. Mär 2004 12:23

Re: Form1 bei OnCreate Ereignis beenden
 
Zitat:

Zitat von glunzl
....Wie mache ich denn das?

Projekt - Quellcode anzeigen.

Delphi-Quellcode:
program Project1;

uses
  Forms,
  SysUtils,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
  Application.Initialize;
  if FileExists('c:\test.kkk') then
  if not DeleteFile('c:\test.kkk') then
    begin
      Application.MessageBox('Geht nicht', 'Meldung', 48) ;
    end
  else
   begin
     Application.CreateForm(TForm1, Form1);
   end;
  Application.Run;
end.
[Edit]Das Luckie war wieder schneller ;-) [/Edit]

glunzl 23. Mär 2004 12:36

Re: Form1 bei OnCreate Ereignis beenden
 
Danke Euch!

Michael

glunzl 23. Mär 2004 12:50

Re: Form1 bei OnCreate Ereignis beenden
 
@Dannyboy: Noch besser :-)

Michael

Matze 23. Mär 2004 12:55

Re: Form1 bei OnCreate Ereignis beenden
 
Zitat:

Zitat von glunzl
@Dannyboy: Noch besser :-)

Ich denke nicht, dass das besser ist. :?
Ich dachte immer Terminate beendet die Anwendung nicht korrekt. :gruebel:

glunzl 23. Mär 2004 13:10

Re: Form1 bei OnCreate Ereignis beenden
 
grmpf :-(

Jens Schumann 23. Mär 2004 13:22

Re: Form1 bei OnCreate Ereignis beenden
 
Hallo,
man könnte im OnCreate dem Formular mit PostMessage auch eine Botschaft schicken.
Delphi-Quellcode:
PostMessage(Handle,WM_CLOSE,0,0);

Matze 23. Mär 2004 13:32

Re: Form1 bei OnCreate Ereignis beenden
 
Zitat:

Zitat von glunzl
grmpf :-(

Vielleicht irre ich mich auch.

DelphiDeveloper 23. Mär 2004 13:32

Re: Form1 bei OnCreate Ereignis beenden
 
wie @jens schon sagt botschaft mit postmessage schicken

etwa so:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;
const
  WM_MyCloseinCreate = WM_USER + 999;
type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
     procedure MyCloseinCreate(var Message: TMessage); message WM_MyCloseinCreate;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.MyCloseinCreate(var Message: TMessage);
begin
  close;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
   // mach was ...

   // jetzt soll im create close gemacht werden
   PostMessage(self.handle, WM_MyCloseinCreate, 0, 0);
end;

end.

Luckie 23. Mär 2004 13:39

Re: Form1 bei OnCreate Ereignis beenden
 
Warum so umständlich?
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  PostMessage(Handle, WM_CLOSE, 0, 0);
end;
Das reicht schon.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 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 by Thomas Breitkreuz