Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi ImageList und ListView speichern (https://www.delphipraxis.net/66738-imagelist-und-listview-speichern.html)

delphinia 3. Apr 2006 15:12


ImageList und ListView speichern
 
Hallo liebe leser...

Stehe vor dem Problem, das ich gerne die Icons einer TimageList speichern würde. aber nicht nur einfach speichern sondern es muss ein Bezug zu dem ListView Eintrag zusätzlich gespeichert werden.

So das ich beim Laden weis - aha icon XY gehört zu ListView Item XY ....

Ergo muss da irgendow noch ein Bezug rein nur wüsst ich nicht wie :gruebel:

Könnt Ihr mir helfen?

WoTo 3. Apr 2006 19:03

Re: ImageList und ListView speichern
 
Hallo delphinia,
du mußt dem ListItem ein SubItem zuordnen und dem SubItem mit
Delphi-Quellcode:
AListitem.SubItems.AddObject(AName,AIcon);
ein Objekt geben.

Also nochmal etwas genauer:
Delphi-Quellcode:
// ListviewItem erstellen
AListItem := AListView.Items.Add;
// Objekt in SubItem speichern
AListItem.SubItems.AddObject(AIcon.Name,AIcon);
anschließend kann man sich das Objekt wieder laden:

Delphi-Quellcode:
AListItem := AListView.Selected;
AIcon := TIcon(AListItem.SubItems.Objects[AListItem.SubItems.IndexOf(AName)]);
Ich hoffe dir damit ein wenig geholfen zu haben.
Ansonsten könnte man TListView ableiten und eine StringListe hinzufügen:
Delphi-Quellcode:
TListViewEx = class(TListView)
private
  FIconList: TStringList;
public
  property IconList : TStringList read FIconList write FIconList;
end;
und dann jedesmal beim Erstellen eines ListItems ein Icon-Objekt der StringListe geben. Die StringListe darf aber nicht sortiert sein, da sonst der Bezug zur Listview verloren geht.

MfG
Woto

delphinia 3. Apr 2006 19:07

Re: ImageList und ListView speichern
 
Mein Problem oder mein Verständnisproblem ist folgendes - weshalb ich die Icons mit Bezug zu dem ListView Item speichern möchte.

Ich verschiebe die Icons in der Liste ich lösche oder füge Icons hinzu ....


Und wie Du bei Deinem Beispiel schriebst geht das alles nicht wenn die Liste Sortiert wird! hmmm

Luckie 3. Apr 2006 19:11

Re: ImageList und ListView speichern
 
Man sollte immer die zugrundeliegenden Datenstrukturen von der Bedienoberfläche entkoppeln. Denn dann kannst du die Datenstruktur speichern und bist unabhängig von der Oberfläche. So bald man versucht Kontrollelemente zur Datenhaltung zu nutzen, sollte man das gesamt Konzept überdenken und ihm gescheite Datenstrukturen zugrundelegen.

delphinia 3. Apr 2006 19:14

Re: ImageList und ListView speichern
 
Zitat:

Zitat von Luckie
Man sollte immer die zugrundeliegenden Datenstrukturen von der Bedienoberfläche entkoppeln. Denn dann kannst du die Datenstruktur speichern und bist unabhängig von der Oberfläche. So bald man versucht Kontrollelemente zur Datenhaltung zu nutzen, sollte man das gesamt Konzept überdenken und ihm gescheite Datenstrukturen zugrundelegen.

was genau heist? - sorry aber das war mir gerade ein wenig zu hoch :oops: .....

Wie kann ich ne ImageList von eriner ListView entkoppeln?
Die gehören doch zusammen??? :gruebel:

Luckie 3. Apr 2006 19:24

Re: ImageList und ListView speichern
 
Nehmen wir an wir haben in einem Listview zwei Spalten: Name und dazugehörige E-Mail Adresse. Wenn ich jetzt an eine Person eine Mail schicken will, sollte man nicht auf die zweite Spalte im Listview zugreifen, sondern auf eine Datenstrucktur, die der Ansicht im Listview zugrundeliegt. Zum Beispiel ein Array of Record:
Delphi-Quellcode:
type
  TKontakt = record
    ID: Integer;
    Name: String[255];
    Mail: String[255];
  end;
Wobei ID der Index des Eintrages im Listview sein kann. Schiebst du jetzt noch eine Spalte dazwischen, musst du nicht überall gucken, wo du auf die zweite Spalte zugreifst und dies in die dritte Spalte ändern, weil die E-Mail Adresse ja jetzt in der dritten Spalte steht. Natürlcih musst du jetzt darauf achten, dass die Eintrage synchron sind mit der zurgrundeliegenden Datenstruktur. Dieser Aufwand ist aber zu verschmerzen. Und je komplexer die Datenstrukturen sind, desto mehr Probleme bekommst du, wenn du Kontrollelemente zur Datenhaltung missbrauchst.

Die ImageList gehgört zum Listview. Aber die einzelnen Einträge der ImageList gehören ja irgendwie zu deinen Daten. Und wenn du an den Daten was änderst, soll sich ja auch das Icon aus der ImageListe ändern:

Delphi-Quellcode:
type
  TFoobar = record
    Item: ...;
    ImageIndex: Integer;
  end;
Änderst du jetzt waqs im Listview führst du auch die Änderung in deiner Datenstruktur durch. Und wenn du dann den Listview aus der Datenstruktur füllst, weißt du immer welches Icon aus der ImageListe zu deinem Eintrag gehört, weil du ja den Index mit deinem Eintrag gespeichert hast.

delphinia 3. Apr 2006 19:49

Re: ImageList und ListView speichern
 
hmm ein bisschen hab ich verstanden. nur noch nicht so ganz wie ich das auf mein Problem umsetzten kann
bez. woher ich denn dann nun weis das die Record ID die ID XY vom Image ist und umgedreht...

Aber Du hast recht derzeit muss ich wenn ich nen Item verschiebe ne Funktion aufrufen damit auch das Icon in der ImageList verschoben wird!

Ich muss wohl erst einmal gestehe, dass ich gerade einmal 2 Monate mit Delphi mich versuche ;) und hin udn wieder (so wie jetzt) hab ich das gefühl das ich dem nicht gewachsen bin! :wall:

delphinia 8. Apr 2006 00:31

Re: ImageList und ListView speichern
 
hmm also ich versteh das mit den Records nicht - hat jemand gute links zu Beispielen, die zu meinem Problem passen.? ich habe noch nie mit Records gearbeitet ;(


Danke Euch


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:44 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 by Thomas Breitkreuz