AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Löscht TComboBox.Items.Clear auch Objekte?

Löscht TComboBox.Items.Clear auch Objekte?

Ein Thema von Carsten1234 · begonnen am 11. Jun 2009 · letzter Beitrag vom 11. Jun 2009
Antwort Antwort
Carsten1234

Registriert seit: 9. Apr 2008
Ort: Vechelde
178 Beiträge
 
Delphi 8 Professional
 
#1

Löscht TComboBox.Items.Clear auch Objekte?

  Alt 11. Jun 2009, 09:39
Hallo zusammen,

in einer Applikation existieren max. 40 feste und 10 frei vom Anwender eingebbare Einheiten. Zu erwähnen ist, dass bislang nur ca. 20 fixe Einheiten existieren und die Liste auch Lücken aufweisen kann. Alle Einheiten sollen jedoch in einer TComboBox dargestellt werden.
Nun besteht allerdings die "Gefahr", dass der Anwender bei den frei eingebbaren Einheiten eine Einheit eingibt, die bereits bei den festen Einheiten vorhanden ist, doch dies soll möglich sein (über Sinn und Unsinn darüber will ich nicht sprechen).
Damit ich jedoch nun in der ComboBox unterscheiden kann, ob es sich bei der selektierten Einheit um eine feste oder freie Einheit handelt, habe ich die TComboBox analog diesem Beispiel um AddObject erweitert ala
Delphi-Quellcode:
const
  FIXEINHEITEN = 40;
  FREIEINHEITEN = 10;

for x:= 1 to FIXEINHEITEN do
begin
  if (Length({Bezeichnung fixe Einheit}) > 0)
    ComboBox.Items.AddObject({Bezeichnung fixe Einheit}, TObject(x));
end;

for x:= 1 to FREIEINHEITEN do
begin
  if (Length({Bezeichnung freie Einheit}) > 0) then
  ComboBox.Items.AddObject({Bezeichnung freie Einheit}, TObject(x+FIXEINHEITEN));
Die in der ComboBox selektierte Einheit ermittle ich über
Delphi-Quellcode:
var Idx: integer;
Idx:= Integer (ComboBox.Items.Objects[ComboBox.ItemIndex]);
und wenn Idx > FIXEINHEITEN ist, weiß ich, dass die selektierte Einheit eine selbstdefinierte Einheit ist.

Zurück zum Betreff:
Da, wie geschrieben, der Anwender auch selbst definierte Einheiten eingeben bzw. verändern kann, schmeiße ich nach einer Veränderung erstmal alle Einträge in der ComboBox mit
ComboBox.Items.Clear; weg.
Frage: Schmeißt die Clear-Routine auch die Objekte weg oder entsteht da wohlmöglich ein Speicherleck?
Eine TComboBox.Items.DeleteObject od. ähnl. existiert ja nicht...

Dank vorab und Gruß, Carsten
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.098 Beiträge
 
Delphi 12 Athens
 
#2

Re: Löscht TComboBox.Items.Clear auch Objekte?

  Alt 11. Jun 2009, 09:45
standardmäßig nein.


bei der ListView gibt es ein OnItemDelete-Ereignis, wo man das Objekt hätte sehr gut freigeben önnen, das vermiß ich hier leider
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#3

Re: Löscht TComboBox.Items.Clear auch Objekte?

  Alt 11. Jun 2009, 09:46
Du benutzt ja keine Objekte => Es entstehen auch keine Speicherlecks.

Auch wenn der name "Objects" etwas anderes vermuten lässt, du mißbrauchst benutzt das Feld ja für einen Integer
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#4

Re: Löscht TComboBox.Items.Clear auch Objekte?

  Alt 11. Jun 2009, 09:49
Zitat von jfheins:
Du benutzt ja keine Objekte => Es entstehen auch keine Speicherlecks.
Tolle Begründung. Bei deiner Aussage kann man gleich die andere Annahme treffen: wären es Objekte, gibt er sie frei. Aber genau das geschieht nicht! Die Liste weiss nicht ob ihr da echte Objekte angehangen werden oder Zeiger oder halt Ordinalwerte wie du es machst. Von daher wird mit den Objekten nichts gemacht.
  Mit Zitat antworten Zitat
Carsten1234

Registriert seit: 9. Apr 2008
Ort: Vechelde
178 Beiträge
 
Delphi 8 Professional
 
#5

Re: Löscht TComboBox.Items.Clear auch Objekte?

  Alt 11. Jun 2009, 10:12
Bisher also nur ein klares JEIN.
Besser?
Delphi-Quellcode:
for x:= 0 to ComboBox.Items.Count- 1 do
begin
  if (Assigned(TObject(ComboBox.Items.Objects[x]))) then
    TObject(ComboBox.Items.Objects[x]).Free;
end;
ComboBox.Items.Clear;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

Re: Löscht TComboBox.Items.Clear auch Objekte?

  Alt 11. Jun 2009, 10:16
Wären es tatsächlich Objekte, müsstest Du Dich selbst um die Freigabe kümmern. Da Du aber anscheinend einfach nur einen Integer nach TObject castest, um ihn einfügen zu können, wird diese Freigabe ja nicht benötigt.
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 himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.098 Beiträge
 
Delphi 12 Athens
 
#7

Re: Löscht TComboBox.Items.Clear auch Objekte?

  Alt 11. Jun 2009, 10:21
ein klares NEIN.


alles was als Objekt oder per Pointer da eingetragen/drangehängt wurde, wird nicht freigegeben,

aber was direkt in dem Wert drinsteht, also z.B. dein Integer oder etwas anderes, welches direkt in den Objekt-Parameter eingetragen/umgecastet wurde, wird natürlich mit freigegeben, da es ja direkt da drinsteckt und somit mit verschrindet, wenn man den "Parameter" löscht


Es wäre übersichtlicher, wenn man es statt als Objekt als Integer definiert hätte (ebenso wie .Tag), dann wäre es offensichtlicher gewesen.
Also stell dir einfach vor es sei in Integer und kein TObject

[add]
TObject(ComboBox.Items.Objects[x]).Free; da du ja kein Objekt drin hast, würde dieses nicht Funktionieren und zu 99,99...% in einer Exception enden.
(der Rest würde rein zufällig auf ein anderes Objekt zeigen und dieses freigeben)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 11:29 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