![]() |
AW: 2. Form schliessen Variable=Nil
Zitat:
Schau mal hin wo ich Form2.free ausführe! ;-) |
AW: 2. Form schliessen Variable=Nil
Hallo ibp,
das Problem ist, dass Du in Form2.FormClose mit Action := caFree; den Speicher frei gibst, aber in Form1 noch auf das Form2 zeigt das nicht mehr vorhanden ist. Wenn Du das weglässt kannst Du doch jederzeit in Form1 mit FreeAndNil (Form2) das Form aus dem Speicher löschen und hast Form2 auf Nil gesetzt und kannst es anschließend wieder neu erzeugen. Bis bald Chemiker |
AW: 2. Form schliessen Variable=Nil
Zitat:
|
AW: 2. Form schliessen Variable=Nil
Hi,
Zitat:
Grüße |
AW: 2. Form schliessen Variable=Nil
So wie du das machst wird die Form TForm2 immer doppelt im Speicher vorhanden sein.
Einmal automatisch beim Programmstart und dann immer wieder beim Aufruf. Irgendwie nicht logisch. Also das Formular nicht automatisch erzeugen lassen. Um TForm2 Modal aufzurufen folgender Code:
Delphi-Quellcode:
Um die globale Variable "Form2" aus der Unit2 beim Free auf Nil zu setzen folgender Code
Procedure TForm1.OpenForm2Modal( Sender : TObject );
Var ModForm2 : TForm2; begin ModForm2 := TForm2.Create( Self ); Try ModForm2.ShowModal; Finally ModForm2.Free; end; end;
Delphi-Quellcode:
procedure TForm2.FormDestroy( Sender : TObject );
begin If Form2 = Self then Form2 := nil; end; |
AW: 2. Form schliessen Variable=Nil
Muss man nicht 'Release' anstelle von 'Free' aufrufen?
|
AW: 2. Form schliessen Variable=Nil
Hallo,
@Sir Rufo: Soweit ich das Verstanden habe wollte er kein Modal-Form haben. Ich würde es einfach so machen:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin if Assigned(TestForm) then begin ShowMessage('Schon da'); TestForm.Show; end else begin TestForm:=TForm2.Create(Self); end; end;
Delphi-Quellcode:
Bis bald Chemiker
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin Action := caFree; end; procedure TForm2.FormCreate(Sender: TObject); begin Caption:= 'Form1 - Test'; Show; end; procedure TForm2.FormDestroy(Sender: TObject); begin if Assigned(TestForm) then begin TestForm:=NIL; end; end; end. |
AW: 2. Form schliessen Variable=Nil
Zitat:
Zitat:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin if not Assigned( Form2 ) then begin Form2 := TForm2.Create( Self ); end else begin ShowMessage( 'Schon da' ); end; Form2.Show; end; Zitat:
Delphi-Quellcode:
procedure TForm2.FormDestroy(Sender: TObject);
begin // Nur wenn die aktuelle Instanz mit der in der globalen Variablen "Form2" gespeicherten übereinstimmt if Form2 = Self then begin Form2 := NIL; end; end; |
AW: 2. Form schliessen Variable=Nil
Was passiert, wenn Form2 zwischen Close und Destroy angezeigt werden soll?
Wieso nicht Form2 nicht einfach im FormClose auf Nil setzen? Weiterhin sollte das Anzeigen und die Logik, ob Form2 schon da ist, in TForm2 selbst implementiert werden. Entweder in einer Class Procedure 'ShowNonModal', oder in einer Funktion, die den Zugriff auf Form2 steuert (Ich würde Letzteres vorziehen)
Delphi-Quellcode:
Nun kann ich Form2 auch dann anzeigen, wenn es gerade geschlossen, aber noch nicht freigegeben wurde.
Function Form2 : TForm2;
Implementation Var _Form2 : TForm2; Function Form2 : TForm2; Begin If _Form2 = Nil Then _Form2 := TForm2.Create(Nil); Result := _Form2; End; ... Procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction); Begin Action := caFree; If Self=_Form2 then _Form2 := Nil; End; [edit]Oh, die Verfeinerung von Sir Rufo fehlt[/edit] |
AW: 2. Form schliessen Variable=Nil
sehe ich das falsch oder nutzt ihr dazu eine globale Variable um in unit2 die Form beim beenden auf NIL zu setzen damit es dann in unit1 vorhanden ist?
Also bei mir ist das so, dass unit2 keinen Zugang zu unit1 hat. Wie macht das eigentlich TComponentList? Wenn dort ein Objekt sich selber zerstört, dann löscht sie den Eintrag selber. War spät gestern und bin nicht ganz hinter die Logik gestiegen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:04 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-2025 by Thomas Breitkreuz