AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Form bereits erzeugt?

Ein Thema von Tpercon · begonnen am 28. Jun 2002 · letzter Beitrag vom 16. Jul 2002
Antwort Antwort
Tpercon

Registriert seit: 7. Jun 2002
638 Beiträge
 
Delphi 5 Professional
 
#1

Form bereits erzeugt?

  Alt 28. Jun 2002, 12:29
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?
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#2
  Alt 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;
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#3
  Alt 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);
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#4
  Alt 28. Jun 2002, 13:27
Moin Zusammen,

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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Tpercon

Registriert seit: 7. Jun 2002
638 Beiträge
 
Delphi 5 Professional
 
#5
  Alt 28. Jun 2002, 14:25
Danke
  Mit Zitat antworten Zitat
Tpercon

Registriert seit: 7. Jun 2002
638 Beiträge
 
Delphi 5 Professional
 
#6
  Alt 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ß
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#7
  Alt 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);
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Tpercon

Registriert seit: 7. Jun 2002
638 Beiträge
 
Delphi 5 Professional
 
#8
  Alt 16. Jul 2002, 16:14
Danke, jetzt geht's!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:09 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