![]() |
Icon aus Exe funktioniert nur auf Button?
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:
wenn ich jetzt geticonfromfilea aus einem button aufrufe...
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}
Delphi-Quellcode:
... dann zeigt er mir das icon in der oberen linken ecke meines forms an... supiklasse :)
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; verwende ich das ganze jetzt aber so:
Delphi-Quellcode:
dann wird mir kein icon oben links in der ecke angezeigt... warum?
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; |
Re: Icon aus Exe funktioniert nur auf Button?
Das ExeSearch keine Methode deines Formulares ist wird für Canvas irgendeine globale Variable genommen und dort die Draw-Methode aufgerufen anstatt des Canvas deines Formulares.
|
Re: Icon aus Exe funktioniert nur auf Button?
Auf welchen Canvas willst Du denn da zeichnen?
[edit] Roter Kasten :?: [/edit] |
Re: Icon aus Exe funktioniert nur auf Button?
procedure TForm1.Button1Click ist eine Methode, du hast also Zugriff auf dein Formular. procedure ExeSearch ist eine "stinknormale" Prozedur ohne Zugriff auf deine Form-Klasse daran wird's wohl liegen.
// edit : Roter Kasten? Welcher rote Kasten? |
Re: Icon aus Exe funktioniert nur auf Button?
Zitat:
|
Re: Icon aus Exe funktioniert nur auf Button?
Mach doch einfach mal 'ne Methode draus...
|
Re: Icon aus Exe funktioniert nur auf Button?
Zitat:
Zitat:
|
Re: Icon aus Exe funktioniert nur auf Button?
Oben im interface-Teil im private-Abschnitt des Formulars:
Delphi-Quellcode:
Und im implementation-Teil dann
procedure ExeSearch(ADirectory: String);
Delphi-Quellcode:
procedure TForm1.ExeSearch(ADirectory: String);
|
Re: Icon aus Exe funktioniert nur auf Button?
[ot]
Zitat:
[/ot] ´tschuldigung ;) Wie die anderen schon geschrieben haben, deine Funktion/Proedur hat nichts mit der Form zu tun. Deine Form ist "zufällig" in deiner Prozedur bekannt, weil sich diese Prozedur wahrscheinlich in der Form unit befindet und die Form global dort deklariert ist. |
Re: Icon aus Exe funktioniert nur auf Button?
Zitat:
Das ist der übel von vielen Problemen und bei deiner obigen Formatierung sehr leicht zu übersehen. Bist du dir auch sicher das form1 auch die Instanz deines Formulares was du gerade siehst? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz