AGB  ·  Datenschutz  ·  Impressum  







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

erstellte Form in TList freigeben

Ein Thema von Looper · begonnen am 12. Mär 2009 · letzter Beitrag vom 12. Mär 2009
Antwort Antwort
Seite 1 von 2  1 2      
Looper

Registriert seit: 28. Sep 2007
Ort: Hamburg
131 Beiträge
 
Delphi XE2 Professional
 
#1

erstellte Form in TList freigeben

  Alt 12. Mär 2009, 20:18
Abend an alle,

ich schreibe gerade in Programm welches einige Formulare erstellt, die von TForm abgeleitet sind.
Diese speichere ich in einer Liste. Da bei mir ein erstelltes Formular 50 MB Speicher benötigt möchte ich gerne diese auch aus der TList wieder entfernen können, aber irgendwie scheitere ich daran!?
Die TList speichert Zeiger dieses Records:
Delphi-Quellcode:
  RTFieldForm = record
    Form : TFieldForm;
    Num : Integer;
  end;
Das erstellen und anzeigen funktioniert auch wunderbar, nur das freigeben halt nicht. Hier mein gescheiterter Code:
Delphi-Quellcode:
var
  F : PFieldForm;
begin
  new(F);
  F := lFields.Items[0];
  FreeAndNil(F^.Form); //Free funktioniert auch nicht...
  Dispose(f);
end;
Ich bin mir ziemlich sicher, dass Item[0] auch einen richtigen Pointer beeinhaltet.

Gruß Janek
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#2

Re: erstellte Form in TList freigeben

  Alt 12. Mär 2009, 20:22
Wäre die Verwendung von TObjectList nicht einfacher?
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
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: erstellte Form in TList freigeben

  Alt 12. Mär 2009, 20:23
Lass auf jeden Fall mal das New(f) weg.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Looper

Registriert seit: 28. Sep 2007
Ort: Hamburg
131 Beiträge
 
Delphi XE2 Professional
 
#4

Re: erstellte Form in TList freigeben

  Alt 12. Mär 2009, 20:29
Also wenn ich New(f) weglasse, funktioniert es auch nicht.
Ich versuche mich einmal an TObjectList und melde mich wieder.

Aber schonmal Danke für die Tipps!
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: erstellte Form in TList freigeben

  Alt 12. Mär 2009, 20:42
Wenn du uns jetzt noch mitteiltest, was nicht funktioniert... Möglicherweise willst du auch noch mit TList.Delete den freigegebenen Eintrag aus der Liste löschen.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Looper

Registriert seit: 28. Sep 2007
Ort: Hamburg
131 Beiträge
 
Delphi XE2 Professional
 
#6

Re: erstellte Form in TList freigeben

  Alt 12. Mär 2009, 20:48
Also:
Ich erstelle ein Formular mit diesem Code
Delphi-Quellcode:
  new(F);
  F^.Num := 1;
  F^.Form := TFieldForm.Create(MainForm);
  F^.Form.Show;
  lFields.Add(F);
  Dispose(F);
Und jetzt will ich das auch wieder freigeben können:
  lFields.Delete(0); //geht nicht Naja und oben hatte ich ja auch schon einen anderen Lösungsversuch geschrieben. Als Fehlermedlung komm immer ein Speicherfehler:
z.B.
Zitat:
---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt GoL.exe ist eine Exception der Klasse EAccessViolation aufgetreten. Meldung: 'Zugriffsverletzung bei Adresse 0000006D. Lesen von Adresse 0000006D'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
---------------------------
OK Hilfe
---------------------------
Mehr finde ich auch nicht heraus.. Ich prüfe nochmal, ob überhaupt ein Index angelegt worden ist

Janek

//Count liefert 1 zurück, also wird ein Index auch angelegt.

//okay jetzt geht es
Beim Erstellen muss das Dispose weg und beim Freigeben das New. Eigentlich auch logisch
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#7

Re: erstellte Form in TList freigeben

  Alt 12. Mär 2009, 22:30
warum der umweg über das record? speicher doch den pointer auf die Form-Instanz doch gleich in der TList und die nummer kannst notfalls im Tag-Property des Forms unterbringen.

freigeben kannst das dann einfach, indem du einer TForm-Variable den (auf deine Form-klasse gecasteten) Pointer zuweist und dann normal freigibst.

Gruß Frank
  Mit Zitat antworten Zitat
Looper

Registriert seit: 28. Sep 2007
Ort: Hamburg
131 Beiträge
 
Delphi XE2 Professional
 
#8

Re: erstellte Form in TList freigeben

  Alt 12. Mär 2009, 22:33
Danke für die Antwort Frank, aber dann wird ja tortzdem nicht der Speicher der Form richtig freigegeben oder?
Immer wenn ich TForm.Free angegeben habe, wurde die Form zwar "gelöscht" hat aber trotzdem noch die 50 MB Speicher gefressen.

Ich versteh bloß nicht wieso.
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: erstellte Form in TList freigeben

  Alt 12. Mär 2009, 22:37
Vielleicht hast du Komponten auf der Form, die nciht die Form als Parent haben und die somit noch nicht zerstört wurden? Vielleicht solltest mal nach dem Speicherleck schauen.

Wie wärs damit?
Delphi-Quellcode:
var : FormList : TObjectList
      Form1 : TForm;
      i : integer;
begin
 FormList := TObjectList.Create;
 FormList.OwnsObjects := True;
 Form1 := TForm.Create(Self);
 
 i := FormList.AddObject(Form1);
 FormList.Delete(i);
end;
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
Looper

Registriert seit: 28. Sep 2007
Ort: Hamburg
131 Beiträge
 
Delphi XE2 Professional
 
#10

Re: erstellte Form in TList freigeben

  Alt 12. Mär 2009, 22:41
Bam. Da viel es mir vor Schuppen von den Augen.

Ich habe bloß meine dumme Klasse vergessen freizugeben.
Vielen Dank an alle, die mir geholfen haben

Good night, Janek
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 13:42 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