Einzelnen Beitrag anzeigen

Flodding

Registriert seit: 26. Dez 2007
Ort: Kiel
121 Beiträge
 
Turbo Delphi für Win32
 
#1

Icon aus Exe funktioniert nur auf Button?

  Alt 5. Mär 2009, 13:00
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?
Flo
  Mit Zitat antworten Zitat