AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Datei Icons herausfinden

Ein Thema von gsh · begonnen am 31. Okt 2007 · letzter Beitrag vom 2. Nov 2007
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von F.W.
F.W.

Registriert seit: 28. Jul 2003
Ort: Zittau
636 Beiträge
 
#11

Re: Datei Icons herausfinden

  Alt 1. Nov 2007, 20:31
Ich habe mir dazu mal eine kleine Komponene geschrieben, welche es ermöglicht ganz schnell und unkompliziert auf die Dateisymbole und Beschriftungen der Typen zu zugreifen:

Delphi-Quellcode:
unit ShellIcons;

interface

uses
  SysUtils, Classes, CommCtrl, Controls, Windows, ShellAPI;

type
  TShellIcons = class(TComponent)
  private
    FBigIcons: TImageList;
    FSMallIcons: TImageList;
    { Private-Deklarationen }
  protected
    { Protected-Deklarationen }
  public
    property BigIcons: TImageList read FBigIcons;
    property SmallIcons: TImageList read FSMallIcons;


// '' steht für Ordner Dateierweiterungen müssen mit . angegeben werden
    function GetFileType(const Extension: String): String;
    function GetImageIndex(const Extension: String; const Opened: Boolean): Integer;
    procedure RefreshShellIcons;

    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    { Public-Deklarationen }
  published
    { Published-Deklarationen }
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Beispiele', [TShellIcons]);
end;

{ TShellIcons }

constructor TShellIcons.Create(AOwner: TComponent);
begin
 inherited;

 FBigIcons := TImageList.Create(Self);
 FBigIcons.ShareImages := True;

 FSmallIcons := TImageList.Create(Self);
 FSMallIcons.ShareImages := True;

 RefreshShellIcons;
end;

destructor TShellIcons.Destroy;
begin
 FBigIcons.Free;
 FSmallIcons.Free;

 inherited;
end;

function TShellIcons.GetFileType(const Extension: String): String;
var
 FileInfo: TSHFileInfo;
 FAttr, Attr: Cardinal;
begin
 ZeroMemory(@FileInfo, SizeOf(FileInfo));

//SHGFI_SMALLICON oder _LARGEICON hat keinen Einfluss auf FileInfo.iIcon >> haben immer den selben Index
 Attr := SHGFI_TYPENAME or SHGFI_USEFILEATTRIBUTES;

 if Extension = 'then
    FAttr := FILE_ATTRIBUTE_DIRECTORY else
    FAttr := FILE_ATTRIBUTE_NORMAL;

 ShGetFileInfo(PChar(Extension), FAttr, FileInfo, SizeOf(TSHFileInfo), Attr);

 Result := FileInfo.szTypeName;
end;

function TShellIcons.GetImageIndex(const Extension: String; const Opened: Boolean): Integer;
var
 FileInfo: TSHFileInfo;
 FAttr, Attr: Cardinal;
begin
 ZeroMemory(@FileInfo, SizeOf(FileInfo));

//SHGFI_SMALLICON oder _LARGEICON hat keinen Einfluss auf FileInfo.iIcon >> haben immer den selben Index
 Attr := SHGFI_ICON or SHGFI_SYSICONINDEX or SHGFI_USEFILEATTRIBUTES or SHGFI_TYPENAME;
 if Opened then
    Attr := Attr or SHGFI_OPENICON;

 if Extension = 'then
    FAttr := FILE_ATTRIBUTE_DIRECTORY else
    FAttr := FILE_ATTRIBUTE_NORMAL;

 ShGetFileInfo(PChar(Extension), FAttr, FileInfo, SizeOf(TSHFileInfo), Attr);

 Result := FileInfo.iIcon;
end;

procedure TShellIcons.RefreshShellIcons;
var
 FileInfo: TSHFileInfo;
 HBigList, HSmallList: HImageList;
begin
 ZeroMemory(@FileInfo, SizeOf(FileInfo));

 HSmallList := HImageList(SHGetFileInfo('', FILE_ATTRIBUTE_NORMAL, FileInfo, SizeOf(FileInfo), SHGFI_SYSICONINDEX or SHGFI_SMALLICON));
 if HSmallList <> 0 then
    FSMallIcons.Handle := HSmallList;

 HBigList := HImageList(SHGetFileInfo('', FILE_ATTRIBUTE_NORMAL, FileInfo, SizeOf(FileInfo), SHGFI_SYSICONINDEX or SHGFI_LARGEICON));
 if HBigList <> 0 then
    FBigIcons.Handle := HBigList;
end;

end.
Vielleicht hilft sie ja!

[Edit]
Warum bleibt mein Code beim posten nicht eingerückt???

Wenn ich eh schon den Beitrag nochmal editiere dann gleich nochmal eine kurze Anleitung:
- zur Benutzung die Komponente installieren und auf die Form ziehen oder eben zur Laufzeit erzeugen
- zur Laufzeit die Eigenschaft für die Bilder der Komponente auf ShellIcons.BigIcons oder .SmallIcons setzen
- mit GetImageIndex und GetFileType bekommt man den Index des Bildes/die Dateitypenbeschriftung

PS: Wenn mir jemand sagen kann, was ich machen muss, damit die Imagelisten auch im Objektinspektor erscheinen? Wenn ich sie als published deklariere erscheinen sie trotzdem nicht. Liegt das am ReadOnly?
  Mit Zitat antworten Zitat
Benutzerbild von gsh
gsh

Registriert seit: 24. Okt 2004
1.542 Beiträge
 
Delphi XE Architect
 
#12

Re: Datei Icons herausfinden

  Alt 1. Nov 2007, 21:26
Hi
Danke

Aber des bringt eher wenig da du des gleich machst wie ich ...
Habs daweil einmal so gelöst:
Delphi-Quellcode:
  if DirectoryExists(Filename) then
  begin //Ordner
    GetFileIcon(Filename, DateiIcon, true);
  end
  else
  begin //Datei
    GetFileIcon(Filename, DateiIcon, false);
  end;
Alex
"Sage nicht alles, was du weißt, aber wisse alles, was du sagst!" Matthias Claudius
"Wer sich über Kritik ärgert, gibt zu, daß er sie verdient hat." Tacitus
  Mit Zitat antworten Zitat
Benutzerbild von F.W.
F.W.

Registriert seit: 28. Jul 2003
Ort: Zittau
636 Beiträge
 
#13

Re: Datei Icons herausfinden

  Alt 2. Nov 2007, 20:38
"Aber des bringt eher wenig da du des gleich machst wie ich ... "

Geht das an mich?

Ich hab mir die Komponente geschrieben, weil ich sie in vielen Projekten verwende und nicht immer den gleichen Code schreiben wollte. Und sie hat alles damit ich nur noch die Eigenschaften des ListView (z.B.) auf die Imagelisten meiner Kompo setzen muss.

Und wenns für dich schon zu spät war hilft sie vielleicht jemandem der nach dem selben Problem hier sucht
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz