![]() |
Form.hide Problem bei dynamischen Erzeugen via create(self)
Hallo,
bin gerade auf ein merkwürdiges Problem gestoßen: Bisher hatte ich immer folgendes:
Delphi-Quellcode:
klappt gut, is ja auch einfach :-D
form1.hide;
form2.show; Nun habe ich aus Speichergründen, weil ich sehr große Videos in die Formulare einbinde, mir folgendes überlegt:
Delphi-Quellcode:
Problem dabei:
form1.hide
form2 := Tform2.create(self); form2.show; Alles klappt, im Debugger sehe ich, dass alles freigegeben und neu erzeugt wird, ABER dann springt er sofort zu der form2.hide Methode!! (in der natürlich wieder steht:
Delphi-Quellcode:
um eben Speicher freizugeben...
Screen.ActiveForm.release;
Wenn ich form2.show auskommentiere, dann springt er nicht mehr dorthin, tut aber natürlich nix mehr... Für alle Hilfe bin ich sehr dankbar! Litotes |
Re: Form.hide Problem bei dynamischen Erzeugen via create(se
Zitat:
Ich habe das eben mal so aufgebaut wie du es beschrieben hast, aber bei mir wird die Form korrekt angezeigt und Form1 ausgeblendet. Wenn ich aber das Screen.ActiveForm.Release in die Form1 stelle, dann habe ich den Effekt, dass kein Fenster angezeigt wird, dass daran liegt, dass Form1 den Fokus hat und somit freigegeben wird, da Screen.ActiveForm.Release sich das Fenster mit dem Fokus holt, und danach Form2.Show nicht mehr aufgerufen wird. Gruß Mazel |
Re: Form.hide Problem bei dynamischen Erzeugen via create(se
Hi,
danke für die schnelle Antwort: Zitat:
form2.show ist passiert (sieht man im Debugger), aber nach dem form2.show springt er im Code der Form2 direkt in die form2.formhide -Methode, was mich völlig verwirrt, weil er das ja nirgends gesagt bekommt! Gruss Litotes |
Re: Form.hide Problem bei dynamischen Erzeugen via create(se
Hast du schon mal versucht die Reihenfolge zu ändern?
Delphi-Quellcode:
Was ist self? (Form1?)
form2 := Tform2.create(self);
form2.show; form1.hide; |
Re: Form.hide Problem bei dynamischen Erzeugen via create(se
Zitat:
Ich vermute auch, du machst den beliebten Standardfehler:
Delphi-Quellcode:
Nächster Standardfehler:
procedure TForm1.Button1Click(...);
begin Form1.Hide; // FALSCH !!! // man darf nicht auf seine eigene Objektvariable (hier: Form1) zugreifen Hide; // Richtig !! end;
Delphi-Quellcode:
procedure TForm1.Button1Click(...);
begin form2 := Tform2.create(self); // hier wurde "self" als Owner übergeben // wenn nun Form1 freigegeben wird, wird automatisch auch form2 geschlossen // und freigeben !! form2.show; end; |
Re: Form.hide Problem bei dynamischen Erzeugen via create(se
Hallo,
ein Vorschlag war (von mkinzler), die Reihenfolge zu ändern:
Delphi-Quellcode:
Das klappt leider nicht.
form2 := Tform2.create(self);
form2.show; form1.hide; shmia schreibt: Zitat:
Delphi-Quellcode:
Mit Taskmanager habe ich das überprüft und klappt auch wunderbar.
Screen.ActiveForm.Release;
Nun sagt shmia, das ich zwei STandardfehler begehe, den ersten habe ich bereits korrigiert, aber die Lösung für den zweiten ist mir unklar, aber ich denke, das ist genau das, was ich suche! also der Fehler laut shmia:
Delphi-Quellcode:
Ok, aber was ist dann die Lösung?? (ich komm nicht drauf),
procedure TForm1.Button1Click(...);
begin form2 := Tform2.create(self); // hier wurde "self" als Owner übergeben // wenn nun Form1 freigegeben wird, wird automatisch auch form2 geschlossen // und freigeben !! form2.show; end; denn genau das passiert ja und ist mein Problem, nämlich form2 wird geschlossen und freigegeben! Wäre sehr dankbar, wenn shmia oder ein anderer Crack mir das sagen kann... Gruss Litotes |
Re: Form.hide Problem bei dynamischen Erzeugen via create(se
Zitat:
Erklärst du das mal bitte? |
Re: Form.hide Problem bei dynamischen Erzeugen via create(se
Form1 ist eine bestimmte Referenzvariable und nicht die aktuelle Instanz.
Einfach
Delphi-Quellcode:
oder
Hide;
Delphi-Quellcode:
verwenden
Self.Hide;
|
Re: Form.hide Problem bei dynamischen Erzeugen via create(se
Zitat:
Wenn ich das nicht überlesen habe, dann hast du noch gar nicht gesagt, wo genau deine Form2 erzeugt wird. Wenn shmias Vermutung stimmt, dann wäre Form1 der Besitzer von Form2. Das kann mal beabsichtigt sein, ist es in deinem Fall aber wohl eher nicht. Mache die Anwendung zum Besitzer von Form2. Das ist der Normalfall.
Delphi-Quellcode:
form2 := Tform2.create(Application);
|
Re: Form.hide Problem bei dynamischen Erzeugen via create(se
Zitat:
Aber wo ist die Verwendung von Form1.Hide in einer TForm1.Button1Click ein Fehler? Habt ihr ein Beispiel, wann und wieso das in diesem Fall schiefgehen kann? Will sagen: Wenn er Form1 (eine Instanz von TForm1) verstecken will, dann kann er überall sagen: Form1.Hide. Form1 wird ausgeblendet und er ist zufrieden. Dass er - wenn er mehrere Instanzen von TForm1 erzeugt hat - immer nur die eine Instanz namens Form1 schließt, sobald in irgendeiner Instanz der zugehörige Button1 gedrückt wird, das ist mir klar. Hat aber ja mit seinem Problem hier überhaupt nichts zu tun. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:55 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