Announcement

Collapse
No announcement yet.

Icon zu einer Datei-Extension ermitteln

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Icon zu einer Datei-Extension ermitteln

    Hallo,

    ich möchte Dateien, die einer Zip-Datei komprimiert sind, in einer Listview mit den korrekten Icons anzeigen.

    Normalerweise sollte das bei existierenden Dateien mit SHGetFileInfo und TImageList kein Problem sein.

    Wenn aber nur die Extension verwertbar ist: Gibt es da eine einfache Möglichkeit? (Extension in der Registry nachschauen, zugehörige Application suchen usw. hat doch einige Tücken - manchmal ist z.B. DefaultIcon angegeben, manchmal nicht...)

    Danke im Voraus... Gruß Uli

  • #2
    SHGetFileInfo()

    Comment


    • #3
      SHGetFileInfo von was? Von der Extension?

      Da es sich um ein Zip-Archiv handelt, sind die Files ja nicht unbedingt auf der Platte vorhanden.

      Gruß Ul

      Comment


      • #4
        Müsste trotzdem mit SHGetFileInfo() gehen.
        <li>1. SHGetFileInfo() mit z.B. 'C:\' aufrufen und das Handle auf die globale ImageList der FileExt's zurückgeben lassen
        <li>2. SHGetFileInfo() nun mit den Dateinamen aus dem ZIP aufrufen und jeweils den IconIndex in die globale ImageList zurückgeben lassen.
        <li>bei SHGetFileIndo() muß die Datei nicht existieren (glaub ich)

        Gruß Hage

        Comment


        • #5
          Hallo Hagen,

          1. Das Handle auf die globale ImageList ermittle ich so:
          <pre>
          h := SHGetFileInfo(PChar('c:\'), 0,FI, Sizeof(FI), SHGFI_SMALLICON or SHGFI_SYSICONINDEX);
          </pre>
          OK, und dann? Dieses Handle einer eigenen ImageList zuweisen? OK, wenn ich dann den Index ermitteln möchte, z.B. mit:
          <pre>
          SHGetFileInfo(PChar('test.pdf'), 0,FI, Sizeof(FI), SHGFI_SMALLICON or SHGFI_SYSICONINDEX );
          inx := FI.iIcon;
          </pre>
          kommt immer 5 heraus.

          Irgendwie checke ich das nicht.

          Danke im voraus... Ul

          Comment


          • #6
            Das Handle des ersten Aufrufes setzt Du mit ImageList1.Handle := h; wichtig ist das ImageList1.ShareImages := True ist. Der zweite Aufruf der Dir die 5 zurückgibt IST dann der Index in die ImageList1.
            Allerdings zeigten meine tests das es eben doch eine existierende Datei sein muß Nun, d.h. wir haben damit nur die Hälfte erreicht und müssen uns durch die Registry ackern.

            Gruß Hage

            Comment


            • #7
              Hallo Hagen,

              na, dann hab' ich ja doch was verstanden. Schade, wäre schön gewesen :-)

              Herzliche Grüße Ul

              Comment

              Working...
              X