Icon aus Datei



  • Hallo!

    Ich möchte einer TListView einen Eintrag hinzufügen mit dem Symbol einer Datei... Komme damit jedoch nicht ganz klar...
    Habe folgenden Code:

    TListItem *Listitem;
    TIcon *Icon = new TIcon();
    String ExtrFileName;
    
    ExtrFileName = "C:\\Beispiel.exe";
    
    Listitem = ListView1->Items->Add();
    Listitem->Caption = ExtrFileName;
    Icon->Handle = ExtractIcon(HInstance,ExtrFileName.c_str(),0);
    Listitem->ImageIndex = ImageList1->AddIcon(Icon);
    
    //Die folgende Zeile entkommentieren zeigt, dass der ImageList kein Icon
    //hinzugefügt wird... :-(
    //ShowMessage(IntToStr(ImageList1->Count));
    

    Irgendwie wird aber der ImageList1 nichtmal ein Icon hinzugefügt... Was mache ich da nur falsch??

    tschüss

    Robert



  • Sieht auf Anhieb alles richtig aus, abgesehen davon, dass das delete fehlt. 😉

    Hast du denn mal überprüft, ob ExtractIcon überhaupt erfolgreich ist, also einen Wert ungleich NULL zurückgibt?



  • Hallo!

    Erstmal besten Dank für deine Antwort!
    ups... - delete fehlt... - ohh du Peinlichkeit 🙂

    Habe den Fehler gefunden: Ich hatte dem ListView SmallImages statt LargeImages auf ImageList1 gesetzt...

    Was ich jetzt aber festgestellt habe: Ich bin dumm 🙂 Ich kann zwar jetzt stolz sein, dass dies funktioniert, bemerke dabei aber auch gleich, dass das gar nicht die Funktion ist, die ich brauche ... 😮 :o
    Da hab ich mich wohl irgendwo "verlesen" 🙂

    Ich möchte, dass das Icon einer jeden Datei angezeigt werden kann. Mit meiner Funktion kann ich jetzt zwar die Icons einer Exe, Dll oder ICO - Datei anzeigen, das Symbol für eine *.txt oder *.doc - Datei zeigts mir aber leider nicht an... 😞

    Weiß vielleicht jemand, welche Funktion ich da brauche???

    Danke nochmal!

    tschüss
    Robert



  • Hi rowisoft

    ich mach das so:

    void __fastcall TForm1::LoadAppIcon(AnsiString FName)
    {
      SHFILEINFO shFinfo;
      HIMAGELIST hImgList = NULL;
      if (FName.Length()>0)
      {
        hImgList = (HIMAGELIST)SHGetFileInfo( FName.c_str(),
                                              0,
                                              &shFinfo,
                                              sizeof( shFinfo ),
                                              SHGFI_ICON);
        TIcon *Icon;
        Icon=new TIcon;
        Icon->Handle=CopyIcon(shFinfo.hIcon);
        Image1->AutoSize=true;
        Image1->Stretch=false;
        Image1->Picture->Assign(Icon);
        delete Icon;
      }
    }
    

    Ich lass das Icon gleich in 'nem TImage anzeigen.

    Geht prima! Holt die Zuordnung, die Windows im Explorer nutzt! 😃

    PS: Du musst das nicht in ner Funktion verpacken! :p

    [ Dieser Beitrag wurde am 30.03.2003 um 15:58 Uhr von DerAltenburger editiert. ]



  • Hallo!

    Vielen Dank! Funktioniert!!!
    Wäre das jetzt nicht vielleicht was für die FAQ - 2 "Icon-Funktionen" in einem?

    Danke euch nochmal!!!

    schönen Sonntag!

    tschüss
    Robert



  • die info hättest du durch suchen auch finden können! 😉

    Dateien+Verzeichnisse - Standard-Icons für Dateianzeige verwenden



  • Wo mag wohl DerAltenburger den Code her haben ... 😉

    Aber wer hat denn mal eine schöne/treffende Überschrift für die FAQ?
    Sowas wie "Standard-Icons für Dateianzeige verwenden" vielleicht?



  • Original erstellt von Jansen:
    Sowas wie "Standard-Icons für Dateianzeige verwenden" vielleicht?

    Joa, is OK.



  • @Jansen

    Wo mag wohl DerAltenburger den Code her haben

    Ich glaub' das war 'mal in einer Delphi- FAQ (Torrys o.ä.) 😉

    Bin eigentlich Pascal- Freak gewesen. :p



  • Nur seltsam, dass du in dem von Sunday zitierten, knapp 3 Wochen alten Thread scheinbar noch keine Ahnung davon hattest ... 😉



  • @Jansen

    Da gings mir um die Gesantkomponente 'TreeView fuer Ordner- Baum' !!!
    😉 (Treeview fuer alle Laufwerke, Arbeitsplatz und Netzwerk [mit oder ohne Icons])


Anmelden zum Antworten