AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi GetFileIcon + Hintergrund Problem - Transparenz?
Thema durchsuchen
Ansicht
Themen-Optionen

GetFileIcon + Hintergrund Problem - Transparenz?

Ein Thema von Piro · begonnen am 13. Apr 2009 · letzter Beitrag vom 24. Apr 2009
Antwort Antwort
Benutzerbild von Piro
Piro

Registriert seit: 14. Jul 2003
Ort: Flintbek
810 Beiträge
 
Delphi XE2 Professional
 
#1

GetFileIcon + Hintergrund Problem - Transparenz?

  Alt 13. Apr 2009, 12:30
Guten Tag,

meine Anwendung speichert alle wichtigen Anwendungen, Dokumente und Ordner, die man so braucht unter Windows.

Ich ermitteln mit GetFileIcon das Icon (kleines Icon) und lade es in ein TImage. Funktioniert auch wunderbar und sieht gut aus.
Delphi-Quellcode:
function GetFileIcon(const FileName: string; const Icon: TIcon; const FileMustExist: Boolean): Boolean;
var
 FI: TSHFileInfo;
 Attributes: DWORD;
 Flags: Word;
begin
 if FileMustExist then
 begin
   Attributes := 0;
   //Flags := SHGFI_ICON or SHGFI_LARGEICON;
   Flags := SHGFI_ICON or SHGFI_SMALLICON;
 end
 else
 begin
   Attributes := FILE_ATTRIBUTE_NORMAL;
   //Flags := SHGFI_USEFILEATTRIBUTES or SHGFI_ICON or SHGFI_LARGEICON;
   Flags := SHGFI_USEFILEATTRIBUTES or SHGFI_ICON or SHGFI_SMALLICON;
 end;

 if SHGetFileInfo(PChar(FileName), Attributes, FI, SizeOf(FI), Flags) <> 0 then
 begin
   Icon.ReleaseHandle;
   Icon.Handle := FI.hIcon;
   Result := True;
 end
 else
   Result := False;
end;

...
 // Aufruf
icon := TIcon.Create;
if GetFileIcon(iconpath, icon, True) = True then
  img_icon.Picture.Icon := icon;
icon.Free;
...
Danach füge ich das Icon in eine ImageList und speichere sie.
Delphi-Quellcode:
frm_main.imgl_variable.AddIcon(img_icon.Picture.Icon);
// ImageList Variable speichern
WriteComponentResFile(frm_main.AppPath + 'icons.imgl', frm_main.imgl_variable);
Die Icons werden in einem ListView im vsIcon Modus angezeigt. Leider sieht das Icon dann nicht mehr so schön aus und der Hintergrund des Icons ist schwarz gezackt. Wenn ich z.B.: mit IconConverterr das Icon erstelle und als ICON abspeichere und dann in meinem Program verwende, sieht es wesentlich besser aus aber auch noch nicht perfekt. Siehe Anhang. Bild 5 ist mit einem IconConverter und Bild 6 ist mit meinem Programm erzeugt wurden. Im 3. roten Kreis sieht man das Icon in der TImage Komponente.

Weiß einer wie ich den Hintergrund besser hinbekomme, so dass das Icon wieder so aussieht wie in der TImage Komponete?
Miniaturansicht angehängter Grafiken
icons_988.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von Piro
Piro

Registriert seit: 14. Jul 2003
Ort: Flintbek
810 Beiträge
 
Delphi XE2 Professional
 
#2

Re: GetFileIcon + Hintergrund Problem - Transparenz?

  Alt 13. Apr 2009, 14:30
Ich habe etwas gefunden und es klappt auch schon ganz gut.

Vorweg, ich arbeite mit 3 ImageListen. Eine Fixe(enthält 5 Icons), eine Variable und Ein, die alles enthält. Desweiteren benutze ich 2 Forms, die diese ImageListen benutzen. Die 2. Form ist eine Art Icon Übersicht (auswählen, hinzufügen, löschen).

Delphi-Quellcode:
procedure Tfrm_main.FormCreate(Sender: TObject);
var
  SHFileInfo: TSHFileInfo;
  SysIcons: THandle;
begin
  try
    SysIcons := SHGetFileInfo(PChar(copy(ParamStr(0), 1, 3)), 0, SHFileInfo,
      SizeOf(SHFileInfo), SHGFI_SYSICONINDEX or SHGFI_SMALLICON or
      SHGFI_ICON);
  finally
    DestroyIcon(SHFileInfo.hIcon);
  end;
  imgl_all.Handle := SysIcons;
  imgl_all.Clear;
...
  // ImageList Variable laden
  if FileExists(AppPath + 'icons.imgl') then
    ReadComponentResFile(AppPath + 'icons.imgl', imgl_variable);
...
  // ImageList zusammensetzen
  imgl_all.Clear;
  imgl_all.AddImages(imgl_fix);
  imgl_all.AddImages(imgl_variable);
End;
Die Icons werden jetzt ohne scharzen Rand angezeigt. Aber wenn ich einen OpenDialog öffne werden einige System / Standard Icons falsch dargestellt. Öffne ich die 2. Form erneut und möchte ein Icon aus einer Datei mit Hilfe des OpenDialog ermitteln, sind die Standard Icons zum größten Teil weg. Sehr merkwürdig.

Wie muss ich das OnCreate Event anpassen?
  Mit Zitat antworten Zitat
Benutzerbild von Piro
Piro

Registriert seit: 14. Jul 2003
Ort: Flintbek
810 Beiträge
 
Delphi XE2 Professional
 
#3

Re: GetFileIcon + Hintergrund Problem - Transparenz?

  Alt 18. Apr 2009, 16:04
** PUSH **

Hat denn keiner ne Idee?
  Mit Zitat antworten Zitat
Benutzerbild von Piro
Piro

Registriert seit: 14. Jul 2003
Ort: Flintbek
810 Beiträge
 
Delphi XE2 Professional
 
#4

Re: GetFileIcon + Hintergrund Problem - Transparenz?

  Alt 24. Apr 2009, 10:29
Hat vielleicht doch einer ne Idee?
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#5

Re: GetFileIcon + Hintergrund Problem - Transparenz?

  Alt 24. Apr 2009, 10:37
Ich habe in einem meiner Programm ein Singleton, das für alle Forms etc. eine Liste mit den System Images enthält. Diese Imageliste weise ich dann den entsprechenden Komponenten zu.

Der Code ist eigentlich recht ähnlich zu Deinem, aber evtl. sind ja die zusätzlichen Attribute für die ImageListe interessant:
Delphi-Quellcode:
  FImageList := TImageList.Create(nil);
  FImageList.Masked := False;
  try
    SysIcons := SHGetFileInfo(PChar(Copy(ParamStr(0), 1, 3)), 0, SHFileInfo,
      SizeOf(SHFileInfo), SHGFI_SYSICONINDEX or SHGFI_SMALLICON or
      SHGFI_ICON);
  finally
    DestroyIcon(SHFileInfo.hIcon);
  end;
  FImageList.Handle := SysIcons;
  FImageList.ShareImages := True;
  FImageList.DrawingStyle := dsTransparent;
Viele Grüße
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  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 22:47 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