Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Form zur Laufzeit neu erstellen (https://www.delphipraxis.net/111365-form-zur-laufzeit-neu-erstellen.html)

mkinzler 2. Apr 2008 10:59

Re: Form zur Laufzeit neu erstellen
 
Nein satt
Delphi-Quellcode:
Kompo.free;
Delphi-Quellcode:
FreeAndNil ( kompo);
verwenden. dann kannst du mit

Delphi-Quellcode:
if assigned( kompo)
abfragen ob das Objekt noch existent ist.

Hansa 2. Apr 2008 11:00

Re: Form zur Laufzeit neu erstellen
 
Warum hat FormClose einen Parameter ?

Delphi-Quellcode:
procedure Tfrm.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  inherited;
  Action := caFree;
end;
So sieht das normalerweise aus. Alles andere ist überflüssig. Bei kleineren Programmen ohne OOP auch das inherited. FreeAndNil-Orgien besorgt Delphi automatisch. :zwinker:

mkinzler 2. Apr 2008 11:17

Re: Form zur Laufzeit neu erstellen
 
Das ist natürlich bei modalen Eingabeformularen sehr geschickt, nach schließen des Formualar sind die Eigaben gleich weg. :gruebel:

HolgerCW 2. Apr 2008 11:25

Re: Form zur Laufzeit neu erstellen
 
Nun folgt das nächste Problem:

Wenn ich nun die Form "gefreet und genilt" habe und während der Laufzeit wieder erstelle, kommt hier eine Zugriffsverletzung:

Delphi-Quellcode:
procedure TFormAnmeldung.BitBtnOKClick(Sender: TObject);
begin

 //Kein Passwort
 if FormAnmeldung.CB_Anwender.text = '' then ...
Warum ?

Muss ich die ComboBox u.s.w. auch noch erstellen. Die müssten doch mit erstellt werden da ich ja hiermit erstelle:

Delphi-Quellcode:
FormAnmeldung := TFormAnmeldung.Create(Application);

FormAnmeldung.ShowModal;

Hansa 2. Apr 2008 11:26

Re: Form zur Laufzeit neu erstellen
 
Ja und ? Wenn der User das so will ? Das caFree wird im FormClose tätig. Es ist nicht dafür zuständig, dass dieses ausgelöst wird ! Außerdem gibts auch FormCloseQuery um gezielt vorzugehen.

Edit : bezieht sich hierdrauf :

Zitat:

Zitat von mkinzler
Das ist natürlich bei modalen Eingabeformularen sehr geschickt, nach schließen des Formualar sind die Eigaben gleich weg. :gruebel:


DeddyH 2. Apr 2008 11:26

Re: Form zur Laufzeit neu erstellen
 
Delphi-Quellcode:
procedure TFormAnmeldung.BitBtnOKClick(Sender: TObject);
begin

//Kein Passwort
if {FormAnmeldung.}CB_Anwender.text = '' then ...

messie 2. Apr 2008 11:29

Re: Form zur Laufzeit neu erstellen
 
Ich hab auch mal Action := caFree ausprobiert, der Verweis ist aber noch da. Da muss man also := nil noch nachschieben.

Grüße, Messie

Hansa 2. Apr 2008 11:38

Re: Form zur Laufzeit neu erstellen
 
Welcher Verweis ist noch da ? :shock: Habe hier zig Forms. Alle werden zum Anzeigen per create erzeugt und ohne Firlefanz mithilfe von cafree beim Close entfernt. Bei Bedarf werden sie also immer wieder neu erzeugt und das wars. Das gab noch nirgendwo einen Fehler.

messie 2. Apr 2008 11:48

Re: Form zur Laufzeit neu erstellen
 
Zitat:

Zitat von Hansa
Welcher Verweis ist noch da ? :shock: Habe hier zig Forms. Alle werden zum Anzeigen per create erzeugt und ohne Firlefanz mithilfe von cafree beim Close entfernt. Bei Bedarf werden sie also immer wieder neu erzeugt und das wars. Das gab noch nirgendwo einen Fehler.

Zitat:

Zitat von mkinzler
Delphi-Quellcode:
if assigned(Form) then

Diese Prüfung geht dann nicht. Und die kann recht wichtig sein, wenn man mit nichtmodalen oder mdi-Fenstern arbeitet.

Grüße, Messie

HolgerCW 2. Apr 2008 12:15

Re: Form zur Laufzeit neu erstellen
 
Wenn ich die Form mit Form.Show anstatt Showmodal anzeige klappt es ... Warum ?


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:29 Uhr.
Seite 2 von 3     12 3      

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-2025 by Thomas Breitkreuz