Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Form lässt sich nicht schließen (https://www.delphipraxis.net/137125-form-laesst-sich-nicht-schliessen.html)

RedShakal 14. Jul 2009 20:55


Form lässt sich nicht schließen
 
Moin zusammen.

Ich habe ein Programm welches 3 Forms benutzt.

Login Screen => 2 Buttons -> Login -> Register <-

Reg => Form1.Hide -> Form2.Show ... nach Registration umgekehrt.

Login => Form1.Hide -> Form3.Show ... blablabla...


Wenn ich das X bei Form1 drücke geht die Anwendung ohne Probleme zu. Wenn ich jedoch das X auf Form2 oder Form3 drücke, verschwindet zwar das Form, aber die Anwendung bleibt im Taskmanager offen.

Habe schon alles Probiert was mir einfällt:

FormClose
Application.Terminate
Exit;
FormDestroy
Close;

Nichts hat geholfen.

Wenn ich einen Button erstelle wo Application.Terminate drinsteht, sagt er mir das er nicht verbunden währe ( Obwohl ausserhalb der IRC Verbindung nichts offen ist. Als ich den Disconnect befehl rausgenommen hatte zeigte er mir die Meldung dennoch an.)

Was kann man da machen?

Als ich Forms mit Form2.Create(self); erstellen wollte, bekam ich nur einen Error das Label1 schon existieren würde.

Satty67 14. Jul 2009 21:05

Re: Form lässt sich nicht schließen
 
Form1 ist das MainForm und muss zum schließen der Anwendung geschlossen werden. Also Form2.Close oder Form3.Close schließt nicht die Anwendung sondern nur das Fenster. Da Form1 versteckt ist, bleibt nur das ManagementFenster in der Tastleiste übrig.

Anwendung via Form1.Close schließen.

RedShakal 14. Jul 2009 21:06

Re: Form lässt sich nicht schließen
 
habe ich leider schon erfolgslos versucht :cry:

mkinzler 14. Jul 2009 21:10

Re: Form lässt sich nicht schließen
 
Schon mit .ShowModal() versucht?

Satty67 14. Jul 2009 21:13

Re: Form lässt sich nicht schließen
 
Zitat:

Wenn ich das X bei Form1 drücke geht die Anwendung ohne Probleme zu
...aber Form1.Close funktioniert nicht?

Schließt Form1 nur, solange Form2/3 nicht offen sind/waren? Wenn ja, wie erzeugst Du Form2/3?

(geht wohl in die gleiche Richtung wie mkinzler vermutet, ich glaube du zeigst/erzeugst Form2/3 falsch)

RedShakal 14. Jul 2009 21:36

Re: Form lässt sich nicht schließen
 
Also Form1 klappt so nicht. Auch wenn ich alle Forms versuche zu schließen dann bekomme ich einen Fehler wieder das irgentwelche Verbindungen nicht bestehen würden.

Wie kann man denn Falsch das Form zeigen gibt es noch andere Methoden?

Satty67 15. Jul 2009 09:08

Re: Form lässt sich nicht schließen
 
Zitat:

Zitat von RedShakal
Als ich Forms mit Form2.Create(self); erstellen wollte, bekam ich nur einen Error das Label1 schon existieren würde.

Passiert, wenn Du z.B. für ein automatisch erzeugtes Formular nochmal Create aufrufst (wenn dann hättest Du TForm2.Create aufrufen müssen, aber nicht wenn es sowieso schon automatisch erzeugt wurde)

Anzeigen kann man ein Formular auf viele Arten, landet im Prinzip aber bei den Varianten .Show und .ShowModal

Deinen Fehler kann ich nicht reproduzieren, müsstest also etwas Code posten, wie die Formulare angelegt und angezeigt werden bzw. wie Du versuchst die Anwendung zu schließen.

RedShakal 15. Jul 2009 16:14

Re: Form lässt sich nicht schließen
 
Der Code meiner registration.pas schaut momentan so aus:

Delphi-Quellcode:
unit registration;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls;

type
  TForm2 = class(TForm)
    Label1: TLabel;
    Benutzername: TEdit;
    Label2: TLabel;
    Passwort: TEdit;
    Passwort2: TEdit;
    Label3: TLabel;
    Label4: TLabel;
    Email: TEdit;
    Button1: TButton;
    Button2: TButton;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;

implementation

uses login, main;

{$R *.dfm}

procedure TForm2.Button2Click(Sender: TObject);
begin
Form1.Visible := true;
Form2.Close;
Form1.Client.Disconnect;
end;

procedure TForm2.Button1Click(Sender: TObject);
var
  Buffer : string;
  Reg   : byte;
begin
  If Passwort.Text <> Passwort2.Text then Showmessage('Die Passwörter sind nicht identisch!');
  If Passwort.Text = ''             then Showmessage('Bitte wähle ein Passwort!');
  If Benutzername.Text = ''         then Showmessage('Der Benutzername darf nicht leer sein!');
  If Email.Text = ''                then Showmessage('Bitte gib eine E-Mail Adresse ein!');

  if Passwort.Text = Passwort2.Text then
    begin
      if Benutzername.Text <> '' then
        begin
          if Email.Text <> '' then
            begin
              Reg := 1;
            end;
        end;
    begin

  if Reg = 1 then
    begin
      Form1.Client.Connect(5000);
      Form1.Client.WriteLn('Register' + '|' + Form2.Benutzername.Text + '|' + Form2.Passwort.Text + '|' + Form2.EMail.Text);
      Buffer := Form1.Client.ReadLn;

      if Buffer = 'Erstellt' then
        begin
          Showmessage('Account wurde erfolgreich erstellt!');
          Form2.Close;
          Form1.Show;
          Form1.Client.Disconnect;
          Button1.Enabled := false;
        end;

      if Buffer = 'Vorhanden' then Showmessage('Account existiert bereits!');
    end;
  end;
  end;
end;



end.

Ich benutze Form Hide und Form Show um die Forms zu zeigen oder zu verstecken.
Um Form1 zu verstecken nutze ich Form1.Hide. Um andere Forms zu schließen, nutze ich Form2.Close;

Satty67 15. Jul 2009 20:22

Re: Form lässt sich nicht schließen
 
OK, da sind eine Menge Schönheitsfehler, aber nichts was zwingend verhindert, dass Form1 geschlossen wird. Soll jetzt hier auch nicht Thema sein...

Evtl. liegt es an diesem Clienten (IRC-Client Komponente?), der noch einen Thread aktiv hat und das Schließen behindert? Es liegt also eher an Form1 bzw. einer Komponente darauf, dass Form1 nicht geschlossen werden kann.

Application.Terminate ist sehr mächtig, um von beliebiger Stelle aus die Anwendung zu beenden. Wenn er damit die Fehlermeldung bringt "Verbindung ...bla", würde ich das als Ursache sehen und gezielt danach suchen.

Meine erste Vermutung, das ein nicht "schließbares" Fenster das verhindert, war wohl falsch.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:30 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