AGB  ·  Datenschutz  ·  Impressum  







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

TObjectList Problem

Ein Thema von Dennis07 · begonnen am 5. Dez 2011 · letzter Beitrag vom 8. Dez 2011
Antwort Antwort
Seite 1 von 3  1 23      
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
485 Beiträge
 
Delphi 11 Alexandria
 
#1

TObjectList Problem

  Alt 5. Dez 2011, 09:47
Hallo Leute,
ich hoffe dass ich hier richtig liege, ist ja mehr oder weniger wie ein 6er im Lotto zu wissen wo genau hier ein beitrag reingehört.
Also nun zu meinem Problem:
Ich muss ein Programm schreiben dass Panels zur Laufzeit erstellt und per Knopdruck wieder alle brav entfernt.
Das mit dem Erstellen ist ja kein Problem, habe ich mit NewPanel := TPanel.Create. Erst bei der 2. Frage fängt es an zu Hacken...
Ich habe mich entschlossen, für das Löschen der Panels eine TObjectList direkt zum Programmstart zu erstellen, in die ich alle erstellen Panels einordne. Wie ich die Panels lösche, zu dem Problem bin ich nicht einmal gekommen, denn es hackt bereits hier:
Aus irgenteinem Grund listet der die Neu erstellen Panels nicht in die Liste ein (k.a.wieso, wharcheinlich habe ich nur irgentetwas dummes übersehen. Hier mal schnell alles, was euch hierzu interessieren könnte:

Delphi-Quellcode:
var
  NewPanel: TPanel;
  PanelID: Integer = 1;
  PanelsList: TObjectList;
  { ... }

procedure TfmPool.FormCreate(Sender: TObject);
begin
  PanelsList := TObjectList.Create;
  { ... }
end;

procedure SpawnPanel(PanelX,PanelY: Integer);
begin
  NewPanel := TPanel.Create(Application);
  PanelsList.Add(NewPanel);
  with NewPanel do
  begin
    Name := 'Panel' + IntToStr(PanelID);
    PanelID := PanelID + 1;
    Left := PanelX;
    Top := PanelY;
    Caption := ObjectCaption;
    Parent := fmPool;
    Enabled := False;
    { ... }
    OnClick := fmPool.SelectObject;
  end;
end;

procedure TfmPool.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  PanelsList.Free;
end;
Anzuumerken wäre vielleicht, dass keine Fehlermeldung erscheint.
Vielen Dank
--Dennis
Dennis
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: TObjectList Problem

  Alt 5. Dez 2011, 10:01
Soll heißen, die Liste bleibt leer? Wieso verwendest Du übrigens globale Variablen, die sind doch gar nicht nötig. Und wenn Du die Panels eh in die Objektliste einfügst, musst Du auch keinen Owner angeben.
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

Geändert von DeddyH ( 5. Dez 2011 um 10:17 Uhr) Grund: Buchstabendreher korrigiert
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: TObjectList Problem

  Alt 5. Dez 2011, 10:18
Er fügt die Panels doch in die Liste ein, oder was macht PanelsList.Add(NewPanel);

Wie kommst du darauf, dass die nicht in der Liste stehen?

BTW: Da du ja anscheinend eine eindeutige ID für die Panels benötigst, würde ich ja schon eher eine TCollection vorschlagen, da wird die ID gleich mitproduziert
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: TObjectList Problem

  Alt 5. Dez 2011, 10:21
Gab es TCollection schon unter Delphi 5? Oder stimmt die angegebene Delphi-Version nicht? Achja, eins noch: wenn man die Objekliste im FormCreate anlegt, sollte man sie im FormDestroy freigeben und nicht im FormClose. Sonst kann es passieren, dass man darauf zugreift, obwohl sie bereits entsorgt wurde.
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
Benutzerbild von Codewalker
Codewalker

Registriert seit: 18. Nov 2005
Ort: Ratingen
945 Beiträge
 
Delphi XE2 Professional
 
#5

AW: TObjectList Problem

  Alt 5. Dez 2011, 10:39
Und nicht vergessen: TObjectList hat ein Property namens OwnsObjects (wird im Constructor gesetzt). Ist es true (standard), dann werden beim Löschen der Object-List auch alle noch enthaltenen Objekte automatisch freigegeben.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: TObjectList Problem

  Alt 5. Dez 2011, 10:47
Nicht nur beim Löschen der Liste selbst, sondern auch beim Löschen von Elementen aus der Liste.
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
Benutzerbild von Gollum
Gollum

Registriert seit: 14. Jan 2003
Ort: Boxberg
456 Beiträge
 
Delphi 10.1 Berlin Professional
 
#7

AW: TObjectList Problem

  Alt 5. Dez 2011, 11:10
Hallo,

die Variable NewPanel darf nicht global sein, sondern sie muss lokal in der Procedure SpawnPanel deklariert werden.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: TObjectList Problem

  Alt 5. Dez 2011, 11:18
Wieso denn das? Es ist zwar nicht schön so wie im Moment, aber darf und muss ist IMHO die falsche Wortwahl.
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
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
485 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: TObjectList Problem

  Alt 5. Dez 2011, 13:40
Zitat:
Soll heißen, die Liste bleibt leer?
Genau.

Zitat:
Wieso verwendest Du übrigens globale Variablen, die sind doch gar nicht nötig.
Ich habe euch nur einen kleinen Teil des Codes gegeben. Ich brauche sie noch in anderen Procedures, ist aber hier nicht relevant (deswegen euch erspart).

Zitat:
Und wenn Du die Panels eh in die Objektliste einfügst, musst Du auch keinen Owner angeben.
Danke, das wusste ich nicht.

Zitat:
Gab es TCollection schon unter Delphi 5?
Keine Ahrnung. Worauf willdst du hinaus (kenne diese Klasse nicht, sry)?

Zitat:
Wieso denn das? Es ist zwar nicht schön so wie im Moment, aber darf und muss ist IMHO die falsche Wortwahl.
Ich denke auch, das dürfte doch keinen Unterschied machen, oder?
Dennis
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: TObjectList Problem

  Alt 5. Dez 2011, 13:42
Das mit TCollection bezog sich auf Sir Rufos Post. Wie stellst Du denn fest, dass die Liste leer bleibt? Fragst Du testhalber die Anzahl der Elemente ab?
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
Antwort Antwort
Seite 1 von 3  1 23      


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 18:44 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