![]() |
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?
|
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; |
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); |
Moin Zusammen,
Zitat:
Code:
auf einen Rutsch erledigen lässt.
FreeAndNil(frmBeispiel);
|
Danke
|
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:
MainMenu1Change:
If not Assigned(Form6)
then begin Form6:=TForm6.Create(Application); Form6.Show; end else Freeandnil(Form6);
Code:
Form6OnDestroy:
If not Assigned(Form6)
then Item1.Checked:=False else Item1.Checked:=True; ??? Gruß |
Moin Tpercon,
Code:
****EDIT****
procedure TForm6.FormClose(Sender: TObject; var Action: TCloseAction);
begin Action := caFree; // Annahme: Das Hauptformular mit dem MainMenu heisst Form1 Form1.Item1.Checked := false; end;
Code:
****EDITEND****
procedure TForm6.FormDestroy(Sender: TObject);
begin Form6 := nil; end; Dann wird das Formular beim Schliessen wieder zerstört. Noch ein kleiner Vorschlag: statt
Code:
einfach
If not Assigned(Form6)
then Item1.Checked:=False else Item1.Checked:=True;
Code:
Item1.Checked := not Assigned(Form6);
|
Danke, jetzt geht's! :P
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03: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