Shell32.dll (Icon Library) -> ImageList



  • Hallo,

    Ich möchte gerne eine Icon Library wie Shell32.dll in eine ImageList laden, um die darin enthaltenen Icons für ein Programm zu nutzen. Ich habe versucht mit SHGetFileInfo die Shell32.dll zu laden, aber ich komme nicht an die Icons ran. In den anderen Beiträgen habe ich noch nichts darüber gelesen wie man eine solche .dll Datei einlesen kann...

    Kann mir jemand einen Tip geben?
    Vielen Dank!



  • Sieh dir mal die WinAPI-Funktion ExtractIcon() an. Damit kannst du zuerst die Anzahl der Icons in der Datei ermitteln und anschliessend diese in einer Schleife zur ImageList hinzufügen.

    Denk aber dran, dass die Gesamtzahl und der jeweilige Index der Icons bei den verschiedenen Windows-Versionen variieren. Du kannst dich also nicht darauf verlassen, dass z.B. das Ordner-Icon immer an dritter Stelle steht.



  • @Jansen

    Danke für die Hilfe! Aber Du hast recht, es ist natürlich blöd, wenn der Index der Icons bei den einzelenen Betriebssystemen verschieden ist... Ich hab´s jetzt so gemacht, dass ich mit einem IconEditor (Microangelo) die Icons, die ich brauche aus der Shell32.dll rausgeschnitten hab und diese dann einzeln in einer ImageList abgespeichert.
    Ich hab jetzt bloß das Problem, dass die Icons in meinem TreeView nicht angezeigt werden. Der Platz für das Icon bleibt immer weiss. Aber dass die Icons richtig in die ImageList geladen wurden, ist sicher weil ich sie mit

    ImageList1->GetIcon(0, Image1->Picture->Icon);
    

    z.B. auf einem Image anzeigen kann. Ich habe für Images und StateImages die gleiche ImageList. Die Icons weise ich dann so zu:

    TTreeNode *vorg = TreeView1->Items->Add(NULL, "Computer");
    vorg->ImageIndex = 0;
    vorg->SelectedIndex = 0;
    

    Nur werden sie nicht angezeigt 😞



  • Hallo!

    Hab es gerade selbst noch hinbekommen: Anscheinend genügt es nicht, wenn man die Imagelist bloß im Objektinspektor auswählt. Wenn ich nochmal vor der Zuweisung der Icons der TreeView die ImageListe zuweise, funktioniert es...

    TTreeNode *vorg = TreeView1->Items->Add(NULL, "Computer");
    TreeView1->Images = ImageList1; //ohne die Zeile geht´s bei mir nicht!
    vorg->ImageIndex = 0;
    vorg->SelectedIndex = 0;
    




  • Hallo,

    kleines Update in diesem Asbach-Uralt-Thread, falls mal jemand mit TTreeView->StateImages in Verbindung mit TTreeNode->StateIndex Probleme hat (ich habe jedenfalls gerade eine Weile gesucht):

    StateIndex bewirkt erst ab Wert 1 eine Bildanzeige aus der StateImages-ImageList. Die Werte -1 und 0 bewirken, dass kein Statusbild neben einem TTreeNode angezeigt wird!

    MfG


Anmelden zum Antworten