Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - ImageList kaputt?
zuma - Di 29.11.11 07:38
Titel: ImageList kaputt?
Moin,
ich benutze mehrere ImageLists zur verwaltung der Grafiken im Programm.
Diese sind in einem Global Data Modul.
Eine der Listen hat neuerdings einen Fehler, den ich mir nicht erklären kann und den ich auch nicht behoben bekomme, auf die Images greife ich per Konstanten zu.
Die Icons sind 16*16 Bitmaps.
Der Fehler:
Komischerweise werden aus einer Imagelist (94 Icons drin) die ersten 15 Icons nicht richtig angezeigt. Und das auch nur in einem Programm, in einem anderen Programm funktionieren die.
Der Fehler äußert sich folgendermaßen:
Es wird bei den ersten 15 Icons immer das erste in der Imagelist angezeigt
ab dem 16ten kommt immer das richtige Icon. In einem anderen Programm mit dem selben GDM funktioniert aber alles richtig.
Fehlerbehebungsversuche:
- dcu's löschen
- die betroffenen Icons entfernen / neu einfügen
- konstanten geprüft (inkl. debug)
jeweils natürlich mit neu erzeugen direkt danach
füge ich ein weiteres icon (z.B. das 10te) nochmal hinten ein und drehe die entsprechende Konstante, wird alles korrekt angezeigt.
Für Tipps, was ich noch prüfen/machen könnte, wäre ich dankbar
Zuma
Nersgatt - Di 29.11.11 07:46
*.res mal neu erzeugen lassen?
Martok - Di 29.11.11 08:23
Was passier wenn du irgendwelche Dummy-Bilder hinten anhängst?
Kann mich da an eine seltsame Fallunterscheidung nach Länge in TCustomImageList erinnern.
zuma - Di 29.11.11 08:38
werde beides mal ausprobieren,
danke schon mal für die anregungen.
Zuma
Nersgatt - Di 29.11.11 08:42
Schau auch mal, ob Du in verschiednen Unterordnern *.res-Dateien mit dem selben Namen hast. Irgendwie hab ich dunkel im Hinterkopf, dass ich sowas schon mal hatte.
bummi - Di 29.11.11 10:22
bei der Zahl 15 klingelt es bei mir, Du hast die Images nicht aus versehen in einem Treeview an Stateimages statt an Images angehängt?
zuma - Di 29.11.11 10:35
Hallo bummi,
der Fehler tritt tatsächlich in ner Treeview auf
binde die imagelist so an
Delphi-Quelltext
1:
| TreeviewName.Images := GDM.ImageListName; |
in der getImageIndex wird dann dem var-Prameter 'ImageIndex' die entsprechende Konstante zugeordnet
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| ... if Assigned(PTreeDataBenutzer(Sender.GetNodeData(Node)).Gruppe) then ImageIndex := cIconGruppe else ImageIndex := cIconPerson; ... |
hab bereits ne zusätzliche imagelist nochmal neu aufgebaut (sch...s-Arbeit ;) ),
in der Treeview tritt der Fehler weiterhin auf.
Scheint also doch eher in der TreeView der Fehler zu sein ... nur wo :gruebel:
Ideen ?
Martok - Di 29.11.11 11:01
Genau, DAS war das was ich meinte. Ist nicht wirklich dokumentiert, aber wenn man sowas tut werden die indizes 0-15 als OverlayImages verwendet (mehr geht nicht) und danach irgendwie anders weiter gezählt. Such mal in der Dokumentation zu den Properties und ggf. auch im Source vom TreeView. Das Problem hatte ich in MLib auch, war irgendwie extrem undurchsichtig.
zuma - Di 29.11.11 12:07
Jaenicke, genau die benutze ich ;)
Delphi-Quelltext
1:
| TVirtualStringTree.Create(aOwner); |
zuma - Di 29.11.11 14:03
so, hab zwar den eigentlichen Fehler nicht gefunden, ihn aber ?geschickt? umgangen:
Hab in dem Formular mit TreeView eine
Delphi-Quelltext
1:
| FImageList : TImageList; |
angelegt
und im Formcreate dann
Delphi-Quelltext
1: 2:
| FImageListe := TImageList.Create(Self); FImageListe.AddImages(GDM.NameDerImageList); |
und siehe da, dann läuft es wieder richtig ...
Naja, besser nen Workaround als ne Fehlerhafte Darstellung ;)
Zuma
jaenicke - Di 29.11.11 14:38
Also ich habe hier auch eine TImageList, die direkt im Objektinspektor an Images der TVirtualStringTree zugeordnet ist, da tritt das Problem nicht auf. Und ich hatte das Problem auch noch nie. :gruebel:
zuma - Di 29.11.11 15:25
Hallo Jaenicke,
also, ObjektInspektor is nich,
da alles dynamisch erzeugt wird ;)
Brauche mehrere der Treeviews, da gibts ne Methode, die die erzeugt.
Die einzelnen Treeviews zeigen zwar jeweils andere Datenteile meiner Objekte an,
die Icons sind aber bei allen gleich.
Daher gibts eine Imagelist für alle Icons, die dann im erzeugen der TreeViews an deren Eigenschaft Images gehängt wird.
Komisch ist ja eben, das ich in einem anderem Programm dieselbe ImageList aus dem selben Datamodul verwende (aber dort nicht an Treeview gebunden) und dort alles einwandfrei geht.
Zuma
jaenicke - Mo 26.12.11 23:03
Ich habe hier gerade auch eine VirtualStringTree mit Images und habe mich bei dem Anblick meines jetzt fertigen Quelltextes an den Thread hier erinnert. Ich schätze nämlich bei dir fehlt schlicht die Unterscheidung des Bildtyps. ;-)
Bei dir reicht vermutlich:
Delphi-Quelltext
1: 2:
| if Kind <> ikOverlay then ImageIndex := ... |
Denn wenn du
immer den ImageIndex setzt, setzt du den auch als Overlay und nicht nur als normales Bild. ;-)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!