Huhu und Guten Tag zusammen...
ich hab im Internet diese Funktion gefunden, die aus 2 Teilen besteht...
Delphi-Quellcode:
uses
ShellApi;
// Gibt Anzahl Icons aus EXE, DLL oder ICO.
function TotalNumberOfIcons(
const FileName:
String): Integer;
begin
if not FileExists(FileName)
then Result := -1
// else Result := ExtractIcon(HInstance, PChar(FileName), -1); Fehler korrigiert.
else Result := ExtractIcon(HInstance, PChar(FileName), $FFFFFFFF);
end;
{Popov}
Delphi-Quellcode:
uses
ShellApi;
// Gibt Icon zurück aus EXE, DLL oder ICO.
function GetIconFromFileA(
const FileName:
String;
Index: Word;
Icon: TIcon): Boolean;
begin
Result := False;
if (TotalNumberOfIcons(FileName) < 1)
or
((
Index + 1 ) > TotalNumberOfIcons(FileName))
then
Exit;
Icon.Handle := ExtractIcon(HInstance, PChar(FileName),
Index);
Result := True;
end;
{Popov}
wenn ich jetzt geticonfromfilea aus einem button aufrufe...
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
AIcon: TIcon;
begin
AIcon := TIcon.Create;
try
if GetIconFromFileA('c:\windows\explorer.exe', 0, AIcon) then
form1.canvas.Draw(0, 0, AIcon);
finally
AIcon.Free;
end;
end;
... dann zeigt er mir das icon in der oberen linken ecke meines forms an... supiklasse
verwende ich das ganze jetzt aber so:
Delphi-Quellcode:
procedure ExeSearch(ADirectory: String);
var
SS: TSearchRec;
AIcon: TIcon;
begin
if FindFirst(ADirectory + '\*.exe', faAnyFile, SS)=0 then
begin
repeat
with form1 do begin
AIcon := TIcon.Create;
try
if GetIconFromFileA('c:\windows\explorer.exe', 0, AIcon) then
canvas.Draw(0, 0, AIcon);
finally
AIcon.Free;
end;
Programmpfada[a] := ADirectory + '\' + SS.Name;
listbutton[y] := TXiButtonLeft.Create(form1.ScrollBox1);
ListButton[y].Caption:=(GetVersionInfo(ADirectory + '\' + SS.Name, 'FileDescription'));
listbutton[y].left:=0;
etc...
listbutton[y].Parent := form1.ScrollBox1;
ListButton[y].OnClick:= ListButton_Click;
ListButton[y].Name:='List' + inttostr(y);
a:=a+1;
x:=x+22;
y:=y+1;
end;
until FindNext(SS)<>0;
FindClose(SS);
end;
end;
dann wird mir kein icon oben links in der ecke angezeigt... warum?