AGB  ·  Datenschutz  ·  Impressum  







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

Dynamisch erstellte Formulare wieder freigeben

Ein Thema von torud · begonnen am 16. Jun 2011 · letzter Beitrag vom 21. Jun 2011
Antwort Antwort
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#1

Dynamisch erstellte Formulare wieder freigeben

  Alt 16. Jun 2011, 19:25
Delphi-Version: 7
Hallo Wissende,

mit folgendem Code erstelle ich dynamisch SubForms auf einer Scrollbox.

Delphi-Quellcode:
procedure TForm1.list_playersDblClick(Sender: TObject);
var
  dt_pan : Tdt_panel;
begin
  if list_players.ItemIndex >= 0 then
    with list_players.Items.Objects[list_players.ItemIndex] as TPlayerData do
      begin
        dt_pan := Tdt_panel.Create(form1);
        dt_panel.PlayerId := Id;
        dt_pan.Parent := sc_box;
        dt_pan.Align := alTop;
        dt_pan.Visible := true;
        dt_pan.parseXMl_2_DataPanel(Name, XML_EV_Players.ChildNodes[1].ChildNodes,Idx);
      end;
end;
Bisher habe ich auf dem Panel, welches schon fertig exitsiert, nur eben zur Laufzeit mehrfach auf der Scrollbox erzeugt werden muss, immer mit

Self.close; freigegeben. Der Button, der diesen Code aufruft, liegt auf dem Form selbst.

Nun muss ich aber das jeweilige Form zerstören. Wenn ich Self.Free aufrufe, passiert entweder gar nix, oder aber ich erhalte eine Exception mit div. SpeicherAdressen, die mir nicht weiterhelfen. Liegt es daran, dass der Button den Tod seines Parents aufruft und sich der Code selbst dabei überholt?

Wenn ich das Form vom MainForm aus freigebe, ist alles supi. Deshalb habe ich versucht, diese Routine (des MainForms) vom SubForm aus aufzurufen. Ich glaube aber, aufgrund weiterer Fehlermeldungen, dass das noch nicht des Rätsels Lösung ist.

Was ist Ursache für dieses Problem und wie kann ich es fixen?
Danke
Tom
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: Dynamisch erstellte Formulare wieder freigeben

  Alt 16. Jun 2011, 19:41
Du musst durch die Components-Collection steppen und überprüfen, ob die Objekte vom entsprechende Typ ist und diese dann Freigeben
Markus Kinzler
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#3

AW: Dynamisch erstellte Formulare wieder freigeben

  Alt 16. Jun 2011, 20:00
Eine Form wird mit Form.Release freigegeben.
  Mit Zitat antworten Zitat
bcvs

Registriert seit: 16. Jun 2011
668 Beiträge
 
Delphi 12 Athens
 
#4

AW: Dynamisch erstellte Formulare wieder freigeben

  Alt 21. Jun 2011, 10:52
Nun muss ich aber das jeweilige Form zerstören. Wenn ich Self.Free aufrufe, passiert entweder gar nix, oder aber ich erhalte eine Exception mit div. SpeicherAdressen, die mir nicht weiterhelfen. Liegt es daran, dass der Button den Tod seines Parents aufruft und sich der Code selbst dabei überholt?

Wenn ich das Form vom MainForm aus freigebe, ist alles supi. Deshalb habe ich versucht, diese Routine (des MainForms) vom SubForm aus aufzurufen. Ich glaube aber, aufgrund weiterer Fehlermeldungen, dass das noch nicht des Rätsels Lösung ist.

Was ist Ursache für dieses Problem und wie kann ich es fixen?
Ich bin mir nicht sicher, ob ich verstanden habe, was Du da machst. Du erzeugst Objekte vom Typ Tdt_panel auf einer Scrollbox. Tdt_panel ist als class(TPanel) definiert, nehme ich mal an. Also erzeugst du keine Forms, sondern Panels. Das ist schon ein großer Unterschied, bitte korrekte Terminologie benutzen, sonst versteht dich hier keiner.

Du könntest beim Klick auf den Schließen-Button (der Teil der Klasse Tdt_panel ist, nehme ich an) lediglich ein Flag setzen (KannGeloeschtWerden:=true) und das MainForm mit SendMessage benachrichtigen dass ein Panel gelöscht werden soll. Das MainForm geht dann die Panels durch und löscht die mit dem Flag.
  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 22:38 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