AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

TStringList einer TListBox zuweisen

Ein Thema von Peter-Pascal · begonnen am 10. Okt 2012 · letzter Beitrag vom 12. Okt 2012
Antwort Antwort
Benutzerbild von himitsu
himitsu
Online

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

AW: TStringList einer TListBox zuweisen

  Alt 10. Okt 2012, 21:05
Du mußt unbedingt den Unterschied zwischen einem Property und einer Variable lernen.

Nochmals:

Beim Zuweisen an TListBox.Items wird ein Setter aufgerufen und darin wird der Inhalt (alle Strings) von der Einen in die andere Stringliste kopiert.

Wenn du deiner Variable umgekehrt den TListBox.Items zuweist, dann speicherst du nur den Instanzzeiger der Stringliste in deiner Variable.
PS: Du hast dir grade ein Speicherleck gebastelt, denn die TStringList, welche vorher in der Variable "verlinkt" war, fliegt nun spurlos und verloren im Speicher rum.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Peter-Pascal

Registriert seit: 18. Feb 2007
Ort: 32139 Spenge
200 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: TStringList einer TListBox zuweisen

  Alt 10. Okt 2012, 21:28

Wenn du deiner Variable umgekehrt den TListBox.Items zuweist, dann speicherst du nur den Instanzzeiger der Stringliste in deiner Variable.
PS: Du hast dir grade ein Speicherleck gebastelt, denn die TStringList, welche vorher in der Variable "verlinkt" war, fliegt nun spurlos und verloren im Speicher rum.
Genau diese Zuweisung wollte ich ja, denn so kann ich von zwei Stellen auf die gleiche Liste zugreifen. Oder gibt es eine andere Möglichkeit?

Reicht es nicht, der Variablen Nil zuzuweisen, um das Speickerleck zu beseitigen? TListBox.Items wird von TListBox aus dem Speicher entfernt
Peter Niemeier
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: TStringList einer TListBox zuweisen

  Alt 10. Okt 2012, 21:52
Genau diese Zuweisung wollte ich ja, denn so kann ich von zwei Stellen auf die gleiche Liste zugreifen.
Wenn es nur darum geht, dann würde das so schon funktionieren.
Du brauchst vorher nur keine TStringList zu erstellen und in die Variable zu legen.

TListBox.Items wird von TListBox aus dem Speicher entfernt
Jupp.

Reicht es nicht, der Variablen Nil zuzuweisen, um das Speickerleck zu beseitigen?
Wenn du vorher eine selbsterzeugte TStringList dort reingetan hast, dann nicht, denn um die Freigabe dieser Instanz müsstest du dich kümmern.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Peter-Pascal

Registriert seit: 18. Feb 2007
Ort: 32139 Spenge
200 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: TStringList einer TListBox zuweisen

  Alt 10. Okt 2012, 22:10
die Variable ist nur vom Typ TStringList, wird nicht vorher erzeugt. Klappt aber leider doch nicht so schön, wie erhofft. Ich hatte mir dadurch Übersichtlichkeit versprochen. Leider ist das Gegenteil der Fall.

Vielen Dank für Deine Hilfe, himitsu.

Gruß Peter
Peter Niemeier
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#5

AW: TStringList einer TListBox zuweisen

  Alt 10. Okt 2012, 22:29
Ich weiß ja nicht was Du genau vor hast, aber gegf. ist
lbVirtual beim Style der Checklistbox das was Du suchst (die Checkistbox hat dann keine eigen Liste sondern stellt Daten aus einer Stringlist, einem Array oder was auch immer dar), mit den Ereignissen OnData und OnDataObject, die Frage ist nur wie Du die Checked-Eigenschaft verwalten willst.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Peter-Pascal

Registriert seit: 18. Feb 2007
Ort: 32139 Spenge
200 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: TStringList einer TListBox zuweisen

  Alt 11. Okt 2012, 08:21
Hallo Thomas,

die Sache mit lbVirtual habe ich mir angeschaut und ich muss zugeben auf den ersten Blick als zu kompliziert beiseite gelegt. Nichtsdestotrotz möchte ich gerade den vollen Leistungsumfang der CheckListBox haben.

Wozu ich es brauche:

Ich habe mehrere tief verschachtelte selbstgebaute Objecte. In einem Object wird eine Liste (TStringList) geführt, die Objecte und Namen entgegen nimmt. Hier habe ich mich für TStringList entschieden statt TObjectList, gerade weil ich die Liste weitergeben wollte. Und in der CheckBoxList müssen alle Namen angezeigt werden.
Um das ständige synchronisieren zweier Listen zu vermeiden, habe ich diese Zuweisung vorgenommen von TCheckListBox.Item an eine Variable vom Typ TStringList. Das klappt auch. Ich kann entweder über die CheckListBox zugreifen oder über die StringList in meinem Object. Ist aber doch nicht so elegant wie ich es gehofft habe. Greife ich über TCheckListBox.Item zu, muss ich immer eine TypCast machen: TObject(TCheckListBox.Item.Object[i]).
Zur vollständigkeit: Im anderen Falle muss ich natürlich auch einen TypCast durchführen, kann mir aber ein Property schreiben, das mir genau das gewünschte Object liefert.

Ich denke ich werde hier noch viele Fragen stellen. Wobei ich vieles auch in den bisherigen Beiträgen gefunden habe.

Gruß Peter
Peter Niemeier
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#7

AW: TStringList einer TListBox zuweisen

  Alt 11. Okt 2012, 08:36
Klingt so als ob Du Dir die Genrics mal anschauen könntest, mit lbVirtual könntest Du für die Check-Infos direkt eine Property Deiner Objekte vorsehen.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Antwort Antwort

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 19:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz