AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Firemonkey TIcon

Ein Thema von Jonas Shinaniganz · begonnen am 11. Mär 2012 · letzter Beitrag vom 11. Mär 2012
Antwort Antwort
Benutzerbild von Jonas Shinaniganz
Jonas Shinaniganz

Registriert seit: 30. Aug 2011
249 Beiträge
 
Delphi XE5 Ultimate
 
#1

Firemonkey TIcon

  Alt 11. Mär 2012, 01:54
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.
  Mit Zitat antworten Zitat
Benutzerbild von Jonas Shinaniganz
Jonas Shinaniganz

Registriert seit: 30. Aug 2011
249 Beiträge
 
Delphi XE5 Ultimate
 
#2

AW: Firemonkey TIcon

  Alt 11. Mär 2012, 02:17
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?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.062 Beiträge
 
Delphi 12 Athens
 
#3

AW: Firemonkey TIcon

  Alt 11. Mär 2012, 02:30
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)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (11. Mär 2012 um 02:33 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Jonas Shinaniganz
Jonas Shinaniganz

Registriert seit: 30. Aug 2011
249 Beiträge
 
Delphi XE5 Ultimate
 
#4

AW: Firemonkey TIcon

  Alt 11. Mär 2012, 12:06
Ach Danke himitsu! Ich habe wirklich gedacht, dass das VLC in FM tabu ist

Ja der Code funktioniert jetzt leicht abgewandelt bei mir, vielleicht wars gestern einfach zu spät!
  Mit Zitat antworten Zitat
Benutzerbild von Jonas Shinaniganz
Jonas Shinaniganz

Registriert seit: 30. Aug 2011
249 Beiträge
 
Delphi XE5 Ultimate
 
#5

AW: Firemonkey TIcon

  Alt 11. Mär 2012, 13:34
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...

Geändert von Jonas Shinaniganz (11. Mär 2012 um 13:36 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Firemonkey TIcon

  Alt 11. Mär 2012, 13:36
Das Problem ist nur, dass dieser Code nicht mehr auf andere Plattformen portierbar ist.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Jonas Shinaniganz
Jonas Shinaniganz

Registriert seit: 30. Aug 2011
249 Beiträge
 
Delphi XE5 Ultimate
 
#7

AW: Firemonkey TIcon

  Alt 11. Mär 2012, 13:37
Ja, Multiplatform, das habe Ich mir schon lange abgeschminkt, hier gehts nurnoch um die Animationen.
  Mit Zitat antworten Zitat
Benutzerbild von Jonas Shinaniganz
Jonas Shinaniganz

Registriert seit: 30. Aug 2011
249 Beiträge
 
Delphi XE5 Ultimate
 
#8

AW: Firemonkey TIcon

  Alt 11. Mär 2012, 13:53
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:38 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