Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Eigenes Programm automatisch beenden


alex_id - Di 25.03.03 06:48
Titel: Eigenes Programm automatisch beenden
Hi

Da ich mein Programm in den taskmanager einbinden möchte soll es sich nach getaner Arbeit selbst schliessen!!!
Aber wie ??? :( Denn mit "Form1.Close" geht es nicht denn ich hab es mit einen einfachen Programm getestet zB : müsste sich folgendes Programm sofort nach dem Start wieder selbst beenden :

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
unit test;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
   Form1.close;
end;
end.


oder muss ich das auf eine andere Art und Weise tun :?:
Alex


BungeeBug - Di 25.03.03 07:47

Hi
ich würde Application.Terminate; nehmen, das sollte (wenn ich mich nicht irre) die entsprechende Windowsfunktion sein die das erledigt

MfG BungeeBug


Motzi - Di 25.03.03 08:29

Application.Terminate sollte nach Möglichkeit nicht verwendet werden, da in diesem Fall nur eine WM_QUIT Message erzeugt wird (genauere Erläuterung dazu hab ich schon mehrmals gepostet. Bei Interesse einfach suchen...)

Zu dem Thema Formular im OnCreate-Ereignis schließen gab es auch schonmal eine längere Diskussion (gelle Popov? :wink:)
Meine favorisierte Methode in diesem Fall ist

Quelltext
1:
PostMessage(Handle, WM_CLOSE, 0, 0);                    

Aber auch hier gilt einfach mal die Suchfunktion anwerfen...


Tino - Di 25.03.03 12:30

Also ich würde das Hauptfenster schließen und fertig.

Gruß
Tino


Motzi - Di 25.03.03 14:44

Tino hat folgendes geschrieben:
Also ich würde das Hauptfenster schließen und fertig.

Gruß
Tino

Es gibt aber Situationen in denen ein Aufruf von Close nicht funktioniert (aus welchen Gründen auch immer...). War bei mir schon mehrmals der Fall, aber die Methode mit PostMessage funktioniert jedesmal perfekt...


Delete - Di 25.03.03 14:56

Sieht so aus, als wenn du das Fenster gar nicht brauchst, da du es im OnCreate-Ereignis gleich wieder schließt. Dann mach doch eine Konsolen-Anwendung. Oder noch nicht mal das und entfern die Unit des Formulares aus deinem Programm und schreib deinen Code in die Projekt-Datei.


Tino - Di 25.03.03 15:01

Motzi hat folgendes geschrieben:
Es gibt aber Situationen in denen ein Aufruf von Close nicht funktioniert

Bei mir hat es bislang immer funktioniert.

Gruß
Tino


alex_id - Mi 26.03.03 01:34

Hi Leute

Danke für die Tips !!!

Ich habe mich für die Variante von "BungeeBug" entschlossen und es funktioniert wunderbar !!! (Application.Terminate;)

danke

Alex


Delete - Mi 26.03.03 01:35

Warum hast du ein Fenster, wenn du es nicht brauchst?


alex_id - Mi 26.03.03 01:44

Hi Luckie

Da mit nur einem Fenster war nur ein Beispiel !!!
Ich will ein paar informationen anzeigen und dann soll sich das Prog von selber schließen ... ich weiß klingt etwas umständlich :roll:
aber ich hätte es auch ohne diese Informationen machen können, aber nur durch probieren lernt man mehr :D

Alex


recall - So 10.08.03 14:46

Hallo,

hmm... ich bin gerade auf den Beitrag gestoßen und hatte den ersten Quelltext gelesen:

On Create => Form1.Close;

Wie soll man denn ein Formluar schließen, das noch gar nicht erzeugt wurde ???

Daher tippe ich mal, dass hier der Aufruf von Close nicht funktioniert (@Tino)

Viele Grüsse.

P.S.: Der Aufruf geht auch nicht in OnShow, weiß jemand wieso ?
Das Fenster existiert ja schon nur ists halt nicht sichtbar :)


UC-Chewie - So 10.08.03 15:44

Im OnCreate-Ereignis ist das Fenster im Übrigen schon erzeugt.


recall - So 10.08.03 17:43

Woher weisst du das ?

Auszug aus der Delphi-Hilfe:
Zitat:
Use OnCreate to perform special processing when the form is created ...


Ist das jetzt wirklich schon erzeugt ?
Wenn ich es übersetze, dann heisst das: Während es erzeugt wird !? :(

Viele Grüsse.


AndyB - So 10.08.03 18:35

Es ist noch nicht sichtbar. Das Fensterhandle existiert aber bereits.