Moin Citybreaker,
ich hätte da ein simples Beispiel.
Dafür brauchst Du einen Button, ein Editfeld, ein Imagelist (Name muss auf ilFilter gestellt werden) und einen ListView (Name = lvFilter, SmallImages = ilFilter, ViewStyle = vsReport)
Ausserdem müssen die Units shlobj und shellapi eingebunden werden.
Das Editfeld dient hier nur der Eingabe einer Extension die dann, samt zugehörigem Icon, in den Listview eingetragen wird.
Die Extension muss dazu ohne Punkt eingegeben werden.
Delphi-Quellcode:
implementation
uses
shlobj,
// IShellFolder
shellapi;
// SHGetFileInfo
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var
icWork : TIcon;
sfWork : IShellFolder;
fiWork : TSHFileInfo;
begin
icWork := TIcon.Create;
try
lvFilter.Items.Add;
lvFilter.Items[lvFilter.Items.Count-1].Caption := Edit1.Text;
// Ermitteln des Icons
SHGetFileInfo(
PChar('
*.'+Edit1.Text),
// Die gewünschte Extension übergeben
0,
// Kein spezielles Dateiattribut angegeben (z.B. ReadOnly)
fiWork,
// Hier wird das Ergebnis abgelegt
SizeOf(fiWork),
// Grösse des Ergebnisses
SHGFI_ICON
// hIcon in fiWork füllen
or
SHGFI_SMALLICON
// das Handle des kleinen Icons ermitteln
or
SHGFI_USEFILEATTRIBUTES
// Der erste Parameter enthält i.d.R. den Pfad zu einer
// vorhandenen Datei.
// Mit diesem Flag wird das nicht geprüft, so dass die Angabe
// einer Extension ausreicht das Icon zu erhalten
// Enthält der Parameter einen gültigen Pfad, so kann dieses
// Flag auch weggelassen werden
);
// Handle des Icons an Iconobjekt übergeben
icWork.Handle := fiWork.hIcon;
// Damit es
// 1. der Imageliste hinzugefügt werden kann
// 2. der Eintrag im Listview dieses Icon bekommt
lvFilter.Items[lvFilter.Items.Count-1].ImageIndex := ilFilter.AddIcon(icWork);
finally
FreeAndNil(icWork);
end;
end;
procedure TForm1.FormDestroy(Sender: TObject);
var
icWork : TIcon;
begin
// Imageliste leeren und Icons aus der Systemimagelist
// wieder zerstören
icWork := TIcon.Create;
try
while ilFilter.Count > 0
do begin
ilFilter.GetIcon(ilFilter.Count-1,icWork);
ilFilter.Delete(ilFilter.Count-1);
DestroyIcon(icWork.Handle);
end;
finally
FreeAndNil(icWork);
end;
end;