![]() |
Icons ohne Schwarzen Rand
Liste der Anhänge anzeigen (Anzahl: 1)
Hat irgentwer schon herausbekommen wie man die Windows-Icons ohne diesen Schwarzen schatten zeichnet?
|
Re: Icons ohne Schwarzen Rand
Hi. Das sind glaube ich Schatten, oder? Öffne die Icons mit Photoshop oder einem Icon Editor und lösche das schwarze raus. sollte funktionieren. :gruebel:
Man liest sich, Stanlay :hi: |
Re: Icons ohne Schwarzen Rand
Ich hol mir aber die Icons per
ExtractFileIcon da kann man leider nur schlecht drinnerrum löschen. |
Re: Icons ohne Schwarzen Rand
Erkenntnis:
DrawIconEx stellt das Symbol ohne Probleme dar. Nur mit ImageList_Draw habert es noch! Weis jemand was? |
Re: Icons ohne Schwarzen Rand
Zitat:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var IconCount: Integer; IconIndex: Integer; LargeIcon: HICON; IconObject: TIcon; ListItem: TListItem; begin ListView1.Clear(); ImageList1.Clear(); ImageList1.BkColor := ListView1.Color; // <- wichtig :) IconCount := ExtractIconEx(shell32, -1, HICON(nil^), HICON(nil^), 0); if IconCount > 0 then begin ImageList1.Width := GetSystemMetrics(SM_CXICON); ImageList1.Height := GetSystemMetrics(SM_CYICON); for IconIndex := 0 to IconCount - 1 do begin LargeIcon := 0; if (ExtractIconEx(shell32, IconIndex, LargeIcon, HICON(nil^), 1) > 0) and (LargeIcon <> 0) then try IconObject := TIcon.Create(); try IconObject.Handle := LargeIcon; ImageList1.AddIcon(IconObject); ListItem := ListView1.Items.Add(); ListItem.Caption := '#' + IntToStr(IconIndex); ListItem.ImageIndex := IconIndex; finally IconObject.Free(); end; finally DestroyIcon(LargeIcon); end; end; end; end; |
Re: Icons ohne Schwarzen Rand
Danke!
BkColor -> Daraus schließe ich das in der ImageList_Draw nur die Bitmaps gezeichnet werden. Und die ImageList eigentlich gar nicht mit Icons umgehen kann. |
Re: Icons ohne Schwarzen Rand
Da ich auch einmal auf einen "mehrfarbigen" Hintergrund zeichnet...
Delphi-Quellcode:
***
var hIco : Cardinal;
ptImage : TPoint; ... hIco := ImageList_GetIcon(fLinks.fImgs.Handle, iIndex, ILD_NORMAL); DrawIconEx(hDC, ptImage.x, ptImage.y, hIco, 16, 16, 0, 0, DI_NORMAL); DestroyIcon(hIco); Suchbegriff zum Finden: Using 32-Bit Anti-Aliased Icons |
Re: Icons ohne Schwarzen Rand
Zitat:
[edit]Ein Hack für die VCL-ImageList könnte so aussehen
Delphi-Quellcode:
[/edit]
with ImageList1 do
begin Clear(); ImageList := ImageList_Create(Width, Height, ILC_COLOR32 or ILC_MASK, 0, AllocBy); if ImageList <> 0 then begin ImageList_SetBkColor(ImageList, BkColor); Masked := True; Handle := ImageList; end; end; |
Re: Icons ohne Schwarzen Rand
Zitat:
|
Re: Icons ohne Schwarzen Rand
@Thunderchild:
Das ist mir klar! Und das was bis jetzt an Code geliefert wurde läuft auch ohne weiteres unter Win2k. @NicoDE: Ich meinte mit diesem Satz eigentlich nur, das intern in der ImageList von Windows alles auf zwei Bitmaps zurückgeführt wird (Maske und Image). Daher meine Vermutung das ImageList_Draw die zwei Bilder nur kombiniert, aber den Alpha-Kanel (Byte 4) völlig außer acht lässt. Wird eine Hintergrundfarbe gesetzt (ich habe es getestet), ist dies nur eine Grücke. Da das Icon bei ImageList_AddIcon in die Maske und Image reingezeichnet wird (via DrawIcon o.ä.). Hat das Image nun die Hintergrundfarbe z.B. weiß, so wird das Symbol bei ImageList_Draw später korrekt dargestellt, falls ein Weißer Hintergrund darunter liegt. Da ich aber bei Selection einen Farbverlauf von Blau zu weiß dem Symbol unterlege, würde es statt einem Schwarzen einen Weißen rand geben. -> Daher verwende ich in diesem Fall DrawIcon o.ä. Grund: Wird ein Icon erstellt zu wird die Maske mit dem Image wieder als Icon zurückgegeben. Da vorher ILC_COLOR32 eingestellt wurde, wird der Aplha-Kanal korrekt mit kopiert. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:25 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