![]() |
GetFileIcon + Hintergrund Problem - Transparenz?
Liste der Anhänge anzeigen (Anzahl: 1)
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:
Danach füge ich das Icon in eine ImageList und speichere sie.
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; ...
Delphi-Quellcode:
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.
frm_main.imgl_variable.AddIcon(img_icon.Picture.Icon);
// ImageList Variable speichern WriteComponentResFile(frm_main.AppPath + 'icons.imgl', frm_main.imgl_variable); Weiß einer wie ich den Hintergrund besser hinbekomme, so dass das Icon wieder so aussieht wie in der TImage Komponete? |
Re: GetFileIcon + Hintergrund Problem - Transparenz?
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:
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.
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; Wie muss ich das OnCreate Event anpassen? |
Re: GetFileIcon + Hintergrund Problem - Transparenz?
** PUSH **
Hat denn keiner ne Idee? |
Re: GetFileIcon + Hintergrund Problem - Transparenz?
Hat vielleicht doch einer ne Idee?
|
Re: GetFileIcon + Hintergrund Problem - Transparenz?
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:
Viele Grüße
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:59 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