AGB  ·  Datenschutz  ·  Impressum  







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

Wo gebe ich ein Formular wieder frei?

Ein Thema von idefix2 · begonnen am 27. Jun 2010 · letzter Beitrag vom 27. Jun 2010
Antwort Antwort
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#1

Wo gebe ich ein Formular wieder frei?

  Alt 27. Jun 2010, 11:21
Hallo,

ich bastle gerade an einer Unit, die mir ein "abstraktes" Formular implementiert, das ich dann zur Laufzeit mit unterschiedlichen Parametern erstellen kann.
Dazu gibt es eine Methode createform (....), der die Laufzeitparameter für das Formular übergeben werden.

Jetzt brüte ich über einem bzw. eigentlich zwei Problemen:

Das Formular wird nichtmodal aufgerufen, d.h. u.U. wird das aufrufende Formular geschlossen und dessen Instanz entfernt, während das neue Formular noch aktiv ist. Ich kann also die Form-Variable nicht in der aufrufenden Instanz deklarieren. Die Frage glaube ich beantwortet zu haben, bin mir aber nicht ganz sicher. Wahrscheinlich ist der richtige Platz dafür eine globale Liste oder ein globales array of TmyForm?

Aber vor allem, wo ist die "richtige" Stelle, um das Formular freizugeben, wenn es geschlossen worden ist? Das OnClose Ereignis ist wahrscheinlich noch zu früh, da fürchte ich, daß ich dem Formular quasi den Boden unter den Füssen wegziehe. Gibt es ein Ereignis, das aufgerufen wird nachdem das Formular geschlossen wurde und die Instanz ohne Probleme aus dem Speicher entfernt werden kann, oder wie könnte ich das sonst lösen? Ich habe schon daran gedacht, timergesteuert die Liste der Formulare durchzugehen und solche, die nicht mehr gebraucht werden, mit einer gewissen Verzögerung freizugeben. Die Lösung gefällt mir aber eigentlich gar nicht.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Wo gebe ich ein Formular wieder frei?

  Alt 27. Jun 2010, 11:23
Vielleicht denke ich zu simpel, aber wenn Du einfach im OnClose caFree als CloseAction angibst?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Wo gebe ich ein Formular wieder frei?

  Alt 27. Jun 2010, 11:25
Zitat:
Ich kann also die Form-Variable nicht in der aufrufenden Instanz deklarieren.
Dieses darf nicht der Owner sein. Wenn du ausserhalb des Rufers nicht auf die Referenzvariable zugreifen willst, könnte diese theoretisch auch dort deklariert sein.
Setzte die ClosAction auf caFree
Markus Kinzler
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#4

AW: Wo gebe ich ein Formular wieder frei?

  Alt 27. Jun 2010, 11:34
Zitat:
Vielleicht denke ich zu simpel
Ich fürchte, ich bin es, der da zu kompliziert denkt

Danke

@ mkinzler:
Ja, Du hast Recht, so würde es gehen - bei der freigabe einer Komponente werden ja nur die Unterkomponenten freigegeben, deren Owner sie ist, und die lokal angelegte Variable Form ist ja nur ein Zeiger auf den eigentlichen Record mit den Komponentendaten. Aber ich brauche ziemlich sicher eine Zugriffsmöglichkeit auf alle vorhandenen Formularinstanzen (schon allein, um das klassische "Fenster"-Menü zu implementieren), also wird eine globale Liste in dem Fall wohl der beste Platz sein.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Wo gebe ich ein Formular wieder frei?

  Alt 27. Jun 2010, 11:41
Screen.Forms bzw. FormCount hilft Dir nicht weiter?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#6

AW: Wo gebe ich ein Formular wieder frei?

  Alt 27. Jun 2010, 12:27
Screen.Forms?

Klingt gut. Nach etwas Suchen auch in der Delphi Hilfe gefunden (zwar nicht über F1, das wäre wohl zu viel verlangt, aber über die DP-Delphi-Reference bin ich hingekommen).

Ich schätze, ich werde noch eine ganze Weile brauchen, bis ich die Klassenbibliothek der Delphi VCL auch nur halbwegs überblicke. Von daher könnt ihr euch noch auf einige dumme Fragen von mir gefasst machen - weil in der Hilfe suchen kann man nur, wenn man ungefähr weiss, was man suchen soll, und auch dann sind viele Features oft so gut versteckt, dass man sie nicht leicht findet.

Nachdem ich beim Durchlaufen dieses Feldes ja bei jedem Element leicht feststellen kann, ob es ein normales Form ist oder von myForm abstammt, kann ich mir eine separate Liste meiner eigenen (im Sinn von "von TmyForm abstammend") Formulare wirklich sparen.
  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 12:37 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