Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Form bereits erzeugt? (https://www.delphipraxis.net/278-form-bereits-erzeugt.html)

Tpercon 28. Jun 2002 12:29


Form bereits erzeugt?
 
Ich möchte eine Form per Klick auf einen Button zur Laufzeit erstellen, in der ListBox dieser Form Einträge hinzufügen und diese mit show anschließend anzeigen. Wird das erzeugte Formular geschlossen (OnClose), wird es wieder freigegeben werden. Soweit ist das auch kein Problem. Klickt man auf den Button und das Formular ist noch erzeugt, sollen natürlich nur die Einträge in die ListBox eingefügt werden und nicht die Form neu erzeugt werden. Wie findet man heraus, ob die Form schon erzeugt wurde oder nicht?

toms 28. Jun 2002 12:53

Code:
function FormExists(AForm: TCustomForm): Boolean;
var
  i: integer;
begin
  Result := True;
  for i := Screen.CustomFormCount - 1 downto 0 do
    if Screen.CustomForms[i] = AForm then
      Exit;
  Result := False;
end;

sakura 28. Jun 2002 13:03

Eine weitere Möglichkeit, welche ich nutze ist...

Nehmen wir mal an, dass das Form TfrmBeispiel heisst, dann fügt Delphi automatisch die Variable frmBeispiel ein.

Wenn das Form freigeben wird, dann musst Du die Variable frmBeispiel im Quelltext immer auf nil setzen. Anschließend kannst Du folgenden Code nutzen, um das Form nur dann zu erstellen, wenn es zur Zeit nicht existiert
Code:
if not Assigned(frmBeispiel) then
  frmBeispiel := TfrmBeispiel.Create(Self);

Christian Seehase 28. Jun 2002 13:27

Moin Zusammen,

Zitat:

Zitat von Sakura
Wenn das Form freigeben wird, dann musst Du die Variable frmBeispiel im Quelltext immer auf nil setzen

was sich, je nach Delphi Version und Programmstruktur auch sehr bequem mit

Code:
FreeAndNil(frmBeispiel);
auf einen Rutsch erledigen lässt.

Tpercon 28. Jun 2002 14:25

Danke

Tpercon 16. Jul 2002 14:06

Frage Teil2:
Ich erzeuge im OnClick Ereignis eines MenuItem zur Laufzeit eine Form (FormStyle=fsStayOnTop) und zeige sie mit Show an bzw. möchte ich sie wieder freigeben, wenn sie vorhanden ist. Die Form kann aber auch normal übers x geschlossen werden. Im MainMenuOnChange möchte ich abfragen, ob die Form erstellt ist oder nicht und das MenuItem dann entsprechend checked:=true bzw. false anzeigen lassen. Wie mache ich das?
Mein Code des MenuItem:
Code:
If not Assigned(Form6)
 then
  begin
   Form6:=TForm6.Create(Application);
   Form6.Show;
  end
 else Freeandnil(Form6);
MainMenu1Change:
Code:
If not Assigned(Form6)
 then Item1.Checked:=False
 else Item1.Checked:=True;
Form6OnDestroy:
???

Gruß

Christian Seehase 16. Jul 2002 15:09

Moin Tpercon,

Code:
procedure TForm6.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
  // Annahme: Das Hauptformular mit dem MainMenu heisst Form1
  Form1.Item1.Checked := false;
end;
****EDIT****

Code:
procedure TForm6.FormDestroy(Sender: TObject);
begin
  Form6 := nil;
end;
****EDITEND****
Dann wird das Formular beim Schliessen wieder zerstört.

Noch ein kleiner Vorschlag:

statt

Code:
If not Assigned(Form6)
then Item1.Checked:=False
else Item1.Checked:=True;
einfach

Code:
Item1.Checked := not Assigned(Form6);

Tpercon 16. Jul 2002 16:14

Danke, jetzt geht's! :P


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