Autor Beitrag
zuma
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: Di 29.11.11 07:38 
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

_________________
Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Di 29.11.11 07:46 
*.res mal neu erzeugen lassen?

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: 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.

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
zuma Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: Di 29.11.11 08:38 
werde beides mal ausprobieren,
danke schon mal für die anregungen.

Zuma

_________________
Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: 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.

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: 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?

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
zuma Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: Di 29.11.11 10:35 
Hallo bummi,
der Fehler tritt tatsächlich in ner Treeview auf

binde die imagelist so an
ausblenden Delphi-Quelltext
1:
TreeviewName.Images := GDM.ImageListName;					


in der getImageIndex wird dann dem var-Prameter 'ImageIndex' die entsprechende Konstante zugeordnet
ausblenden 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 ?

_________________
Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: 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.

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19338
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 29.11.11 11:27 
Nimm einfach die VirtualTrees, die sind sowieso schneller und können mehr. :nixweiss:
zuma Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: Di 29.11.11 12:07 
Jaenicke, genau die benutze ich ;)

ausblenden Delphi-Quelltext
1:
 TVirtualStringTree.Create(aOwner);					

_________________
Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
zuma Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: 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

ausblenden Delphi-Quelltext
1:
FImageList : TImageList;					


angelegt

und im Formcreate dann

ausblenden 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

_________________
Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19338
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: 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

_________________
Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19338
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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:
ausblenden 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. ;-)