ImageList kaputt?
spacer
Autor Nachricht
zuma
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 630
Erhaltene Danke: 11


D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: Di 29.11.11 08: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!
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.


Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic star
Beiträge: 929
Erhaltene Danke: 70


Delphi 2010 Enterprise
BeitragVerfasst: Di 29.11.11 08: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)
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Moderator
Beiträge: 2837
Erhaltene Danke: 182

Win 2000, Win XP
Delphi 7, Turbo Delphi Exp.
BeitragVerfasst: Di 29.11.11 09: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."
Ich code EdgeMonkey -~==~- #ee-lounge in Freenode
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
zuma Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 630
Erhaltene Danke: 11


D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: Di 29.11.11 09: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!
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic star
Beiträge: 929
Erhaltene Danke: 70


Delphi 2010 Enterprise
BeitragVerfasst: Di 29.11.11 09: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)
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 979
Erhaltene Danke: 124

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Di 29.11.11 11: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
DRY DRY KISS
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
zuma Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 630
Erhaltene Danke: 11


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

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


in der getImageIndex wird dann dem var-Prameter 'ImageIndex' die entsprechende Konstante zugeordnet
ausblenden Delphi-Quelltext markieren
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!
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Moderator
Beiträge: 2837
Erhaltene Danke: 182

Win 2000, Win XP
Delphi 7, Turbo Delphi Exp.
BeitragVerfasst: Di 29.11.11 12: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."
Ich code EdgeMonkey -~==~- #ee-lounge in Freenode
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 15840
Erhaltene Danke: 741

XP, W7 x64 (Chrome, IE9, FF), Debian, (OSX 10.7)
RAD XE 2, Java (NB), C++, C# (VS 2010), JS/HTML, PHP, Lazarus
BeitragVerfasst: Di 29.11.11 12:27 
Nimm einfach die VirtualTrees, die sind sowieso schneller und können mehr. :nixweiss:
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
zuma Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 630
Erhaltene Danke: 11


D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: Di 29.11.11 13:07 
Jaenicke, genau die benutze ich ;)

ausblenden Delphi-Quelltext markieren
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!
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
zuma Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 630
Erhaltene Danke: 11


D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: Di 29.11.11 15:03 
so, hab zwar den eigentlichen Fehler nicht gefunden, ihn aber ?geschickt? umgangen:

Hab in dem Formular mit TreeView eine

ausblenden Delphi-Quelltext markieren
1:
FImageList : TImageList;


angelegt

und im Formcreate dann

ausblenden Delphi-Quelltext markieren
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!
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 15840
Erhaltene Danke: 741

XP, W7 x64 (Chrome, IE9, FF), Debian, (OSX 10.7)
RAD XE 2, Java (NB), C++, C# (VS 2010), JS/HTML, PHP, Lazarus
BeitragVerfasst: Di 29.11.11 15: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:
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
zuma Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 630
Erhaltene Danke: 11


D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: Di 29.11.11 16: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!
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 15840
Erhaltene Danke: 741

XP, W7 x64 (Chrome, IE9, FF), Debian, (OSX 10.7)
RAD XE 2, Java (NB), C++, C# (VS 2010), JS/HTML, PHP, Lazarus
BeitragVerfasst: Di 27.12.11 00: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 markieren
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. ;-)
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
home home