Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Firemonkey TIcon (https://www.delphipraxis.net/167047-firemonkey-ticon.html)

Jonas Shinaniganz 11. Mär 2012 00:54

Firemonkey TIcon
 
Weiß jemand ob es möglich ist ein TIcon in Firemonkey zu benutzen? TIcon ist Bestandteil des VLC aber es muss doch etwas vergleichbares geben?

Vielen Dank.

Jonas Shinaniganz 11. Mär 2012 01:17

AW: Firemonkey TIcon
 
Mein eigentliches Problem ist, dass Ich folgenden Code nicht ausführen kann weil TIcon nicht verfügbar ist und Ich nicht weiß wie Ich nun vorgehen soll.
Mein Etappen-Ziel ist es das Icon einer Datei auszulesen. Das ganze soll nicht nur bei Exe Dateien klappen sondern auch bei Files das entsprechende Icon ausgeben.

Delphi-Quellcode:
var
  MyIcon:TIcon;
  icoHandle: HIcon;
begin
  MyIcon:=TIcon.Create;
  try
   icoHandle := ExtractIcon(application.handle,'c:\windows\explorer.exe', 0) ;
   MyIcon.Handle:=icoHandle;
   Image1.Picture.Icon:=MyIcon;
  finally
   MyIcon.free;
  end;
end;
Das hier liefert mir bei Exe Files ein Handle zurück (Jedenfalls nicht 0):

Delphi-Quellcode:
procedure TBarButton.GetIcon;
var
  icoHandle : HIcon;
begin
  icoHandle := ExtractIcon(HInstance, PChar(FShortCut), 0);
end;
In der Hilfe habe ich noch etwas vielversprechenderes gelesen:
Zitat:

SHGFI_ICONLOCATION
Retrieve the name of the file that contains the icon representing the file specified by pszPath, as returned by the IExtractIcon::GetIconLocation method of the file's icon handler. Also retrieve the icon index within that file. The name of the file containing the icon is copied to the szDisplayName member of the structure specified by psfi. The icon's index is copied to that structure's iIcon member.
Das ist Teil von der SHGetFileInfo Function.

Jetzt weiß Ich leider nicht so wirklich weiter... hat jemand einen Ansatz?

himitsu 11. Mär 2012 01:30

AW: Firemonkey TIcon
 
Zitat:

Zitat von Jonas Shinaniganz (Beitrag 1155910)
Mein eigentliches Problem ist, dass Ich folgenden Code nicht ausführen kann weil TIcon nicht verfügbar ist

Na dann binde die nötige Unit ein?
Solange diese VCL-Komponente nicht auf der FM-Form liegt, sollte es kaum keine Probleme geben.

Funktioniert dieser Code in einem VCL-Programm?

Laß mal das Icon.Free weg. (falls es geht, kümmern wir uns um das Speicherleck)

Jonas Shinaniganz 11. Mär 2012 11:06

AW: Firemonkey TIcon
 
Ach Danke himitsu! Ich habe wirklich gedacht, dass das VLC in FM tabu ist :D

Ja der Code funktioniert jetzt leicht abgewandelt bei mir, vielleicht wars gestern einfach zu spät!

Jonas Shinaniganz 11. Mär 2012 12:34

AW: Firemonkey TIcon
 
Hiermit lässt sich ein Icon auslesen und in ein TImage speichern:

Delphi-Quellcode:
// momentane uses
uses
  FMX.Controls, System.Classes, Winapi.ShellApi, WinApi.Windows, Vcl.ExtCtrls;


procedure TBarButton.GetIcon;
var
  InfoData : SHFILEINFO;
begin
  SHGetFileInfo(PChar(FShortCut), 0, InfoData, SizeOf(InfoData), SHGFI_ICON);

  Img := TImage.Create(Self);
  Img.Picture.Icon.Handle := InfoData.hIcon;
end;
:) Zur Laufzeit bekomme Ich dann folgenden recht netten Fehler:

Zitat:

TImage kann nicht zu TImage zugewiesen werden.

Das lässt sich einfach ergründen:

Image auf der Form ist (Weil FM-HD APP) = FMX.Objects.TImage.

Image aus der anderen Unit aber Vcl.ExtCtrls.

Leider muss ich das TImage aus Vcl.ExtCtrls nehmen weil

das FMX Image keine
Zitat:

.Picture.Icon.Handle
implementation hat....





Idealer wäre jetzt das Vcl.ExtCtrls.TImage so zu Konvertieren, das ein Bitmap oder sonstwas entsteht welches Ich FMX.Objects.TImage zuweise.

Speicherlöcher habe Ich keine momentan, programmiere auch immer mit ReportMemoryLeaksOnShutdown; damit Ichs schnell merke.

Hat jemand eine Idee wie Ich mein Bild elegant übergebe? Ich habe schon einiges versucht...

mkinzler 11. Mär 2012 12:36

AW: Firemonkey TIcon
 
Das Problem ist nur, dass dieser Code nicht mehr auf andere Plattformen portierbar ist.

Jonas Shinaniganz 11. Mär 2012 12:37

AW: Firemonkey TIcon
 
Ja, Multiplatform, das habe Ich mir schon lange abgeschminkt, hier gehts nurnoch um die Animationen.

Jonas Shinaniganz 11. Mär 2012 12:53

AW: Firemonkey TIcon
 
Ich speichere das Bild auf der Festplatte und lade es dann von dort wieder. Wenn Ich mit dem Programm fertig bin werde Ich es auch hier veröffentlichen damit andere sich das anschauen können.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:55 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