Delphi-PRAXiS
Seite 1 von 2  1 2      

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 TForm.Close (https://www.delphipraxis.net/14378-tform-close.html)

jonny 8. Jan 2004 07:46


TForm.Close
 
Hallo ich bau gerade an einem Programm in dem ich Formulare Dynamisch während der Laufzeit ertelle.

Mein Problem ist jetzt Folgendes also wenn ich das Formular jetzt schliesse

Code:
Form.Close;
dann kann ich keine Fenster mit dem gleichen Namen mehr erstellen warum?

Ist das Fenster nur unsichtbar?
Ich habe es auch mit

Code:
Form.Free;
versucht aber das liefert nur eine Fehlermeldeung was soll ich tun?

Luckie 8. Jan 2004 07:48

Re: TForm.Close
 
Bevor du es neu öffnen kannst, musst du logischerweise vorher das Form-Objekt neu erzeugen.

jonny 8. Jan 2004 07:53

Re: TForm.Close
 
Ja das tue ich auch

Hiermal ein Beispiel aus dem Code:
Code:
procedure TForm1.irgendwasClick(Sender: TObject);
var TfSU: TfrmSendURL;
begin
  If Application.FindComponent('SUForm') = Nil Then
  begin
    Application.CreateForm(TfrmSendURL, TfSU);
    TfSU.Name:='SUForm';
    TfSU.lblUserName.Caption := 'Hahaha';
  end
  else
  begin
    (Application.FindComponent('SUForm') As TfrmSendURL).SetFocus;
  end;
end;
Beim ersten mal klappt alles aber wenn ich die Form Schliesse mit

Code:
Close
dann sagt er mir beim nächsten Click auf "irgendwas" das man kein Focus auf eine Unsichtbare Form setzen kann.

Luckie 8. Jan 2004 08:01

Re: TForm.Close
 
Also kuck dir mal meinen Code an:
Delphi-Quellcode:
var
  Form1: TForm1;
  ZweiteForm: TForm;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 Application.CreateForm(TForm2, ZweiteForm);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  if Assigned(ZweiteForm) then
    ZweiteForm.Show;
end;
Wenn ich die zweite Form mit Close schließe, kann ich sie direkt mit dem zweiten Button wieder anzeigen lassen.

jonny 8. Jan 2004 08:07

Re: TForm.Close
 
Ja aber das soll nicht der Sin der Sache sein das Fenster soll komplett geschlossen werden das es nicht mehr da ist wenn ich es schliesse damit mit der meiner Methode ein neues erstellt werden kann es soll nur dann den Focus bekommen wenn es irgendwo hinten liegt aber noch nicht geschlossen wurde.

Luckie 8. Jan 2004 08:11

Re: TForm.Close
 
Wenn es nur "hinten" ist dann existiert es ja. Dann frag ab, ob es visible ist. Man müsste dann noch prüfen, ob es minimier (IsIconic) ist.

jonny 8. Jan 2004 08:15

Re: TForm.Close
 
Mit dem Focus setzen das functioniert ja es gibt nur ein Problem wenn ich es schliesse mit Close dann kann ich kein neues mit dem gleichen Namen erstellen weil das alte ja noch da ist wie kriege ich es ganz weg?

mit Free anstaat Close hab ich auch schon versucht aber ich krieg ne Fehlermeldung.

Luckie 8. Jan 2004 08:25

Re: TForm.Close
 
Zitat:

Zitat von jonny
wenn ich es schliesse mit Close dann kann ich kein neues mit dem gleichen Namen erstellen weil das alte ja noch da ist wie kriege ich es ganz weg?

Hm.
Delphi-Quellcode:
var
  Form1: TForm1;
  MyForm2: TForm;

implementation

{$R *.dfm}

uses
  Unit2;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Application.CreateForm(TForm2, MyForm2);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  if Assigned(MyForm2) then
    MyForm2.Show;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  if Assigned(MyForm2) then
    MyForm2.Free;
end;
Mit Button1 erzeuge ich die zweite Form. Mit Button2 zeige ich sie an. Wenn ich sie jetzt mit Button3 wieder schließe / freigebe, kann ich sie mit Button1 wieder ohne Probleme erzeugen. Also irgendwas machst du da falsch, aber sehen tue ich es jetzt auch nicht.

Delphi-Quellcode:
procedure TForm1.Button4Click(Sender: TObject);
begin
  if (Assigned(MyForm2)) and (MyForm2.Visible) then
    MyForm2.BringToFront;
end;
Und wenn sie gerade nicht sichtbar ist, bekomme ich sie mit Button4 wieder "nach vorne".

galex 8. Jan 2004 08:45

Re: TForm.Close
 
Moin,

ich benutze folgendes:
Delphi-Quellcode:
var frmSendURL: TfrmSendURL;
1.Formular erzeugen
Delphi-Quellcode:
  Application.CreateForm(TfrmSendURL, frmSendURL);
2.Formular anzeigen
Delphi-Quellcode:
  frmSendURL.Show;
3.Formular schließen
Delphi-Quellcode:
  frmSendURL.Hide;
{
anzeigen
schließen
anzeigen
schließen
anzeigen
}

4. Formular verniechten
Delphi-Quellcode:
  frmSendURL.Free;
oder
Delphi-Quellcode:
FreeAndNil(frmSendURL);

Luckie 8. Jan 2004 08:48

Re: TForm.Close
 
Hide macht das Formular nur unsichtbar, schließt es baer nicht, dies tut nur, wie der Name auch schon sagt, Close();.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:09 Uhr.
Seite 1 von 2  1 2      

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