Announcement

Collapse
No announcement yet.

Kleines Icon aus einer Datei extrahieren...

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

  • Kleines Icon aus einer Datei extrahieren...

    Hallo,

    ich möchte in einer Datenbank Verknüpfungen von Dateien speichern und hätte gerne dazu das Standard-Icon. Das zu extrahieren, ist kein Problem, das Icon ist aber 32x32 Pixels groß. Wie erhalte ich das kleine Icon, das ja auch vom Explorer verwendet wird?

  • #2
    Hallo,

    die kleinen Icons stehen erst ab den 32-Bit-Versionen von Windows zur Verfügung, daher ist auch die Win32-API-Funktion <b>SHGetFileInfo</b> (als Shell-Funktion) dafür zuständig.

    <pre>
    uses ShellAPI;

    procedure TForm1.FormCreate(Sender: TObject);
    var
    FI: TSHFileInfo;
    begin
    SHGetFileInfo('C:\Ablage\Beispiel.doc', 0,
    FI, Sizeof(FI), SHGFI_SMALLICON or SHGFI_ICON);
    Image1.Picture.Icon.Handle := FI.hIcon;
    end;
    </pre&gt

    Comment


    • #3
      Vielen Dank

      Comment


      • #4
        Nachtrag: ich tue mich jetzt noch ein wenig schwer, das (kleine) Icon, das ich so extrahiert habe, als .bmp zu speichern bzw. in einer Tabelle als Grafik zu speichern.
        Muss ich es auf den Canvas einer Bitmap zeichnen oder gibt es da einen eleganteren Weg?

        Danke..

        Comment


        • #5
          Hallo,

          wenn das Icon in einer Datenbanktabelle gespeichert werden soll, ist folgendes notwendig: <br>
          1. aStream := TBlobStream.Create(Table1Icon as TBlobField, bmReadWrite)<br>
          2. ImageDB.Picture.Icon.SaveToStream(aStream);<br>
          3. Datensatz posten

          Alternativ kann man es auch über SQL erledigen:
          <pre>
          INSERT INTO icondb (Name, Icon) VALUES (:sName, :bIcon)
          </pre>
          Objektinspektor: <i>QueryICON.Params</i> konfigurieren: sName: String und bIcon: Blob
          <pre>
          with QueryIcon do
          begin
          Params[0].AsString := Edit1.Text;
          Params[1].LoadFromStream(aStream);
          ExecSQL;
          end;
          </pre&gt

          Comment


          • #6
            Super! Danke

            Comment

            Working...
            X