Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Mit DrawIcon transparent zeichnen (https://www.delphipraxis.net/92350-mit-drawicon-transparent-zeichnen.html)

CalganX 18. Mai 2007 11:16


Mit DrawIcon transparent zeichnen
 
Hi,
da ich Probleme habe, über eine DLL eine TIcon-Referenz zu zeichnen, bin ich auf das entsprechende Handle vom Typ HICON umgestiegen. Um ein solches Icon zu zeichnen, gibt es die WinAPI-Funktion DrawIcon. Das Problem ist jedoch, dass das Icon dann zwar gezeichnet, aber der Hintergrund mit weiß aufgefüllt wird.
Delphi-Quellcode:
DrawIcon(Image1.Canvas.Handle, 15, 15, MeinIcon);
Ein Setzen von TImage.Transparent hat leider nicht geholfen. Gibt es da einen einfachereren Trick, als den Hintergrund nachträglich nochmal mit clBtnFace zu füllen?

Chris

DGL-luke 18. Mai 2007 11:38

Re: Mit DrawIcon transparent zeichnen
 
Hallo,

wahrscheinlich geht das mit DrawIconEx besser ;-)

Könnte aber auch schon reichen, ein entsprechendes Brush zu setzen.

CalganX 18. Mai 2007 12:40

Re: Mit DrawIcon transparent zeichnen
 
Hi,
nö, weder Brush noch DrawIconEx führen mich zum gewünschten Ergebnis. Sonst noch irgendwelche Vorschläge?

Chris

chaosben 18. Mai 2007 13:03

Re: Mit DrawIcon transparent zeichnen
 
Hi Chris!

Ich glaube dein Icon macht das Problem und weniger der DrawIcon-Aufruf.

Das...
Delphi-Quellcode:
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  Ico : HICON;
begin
  Ico:=Application.Icon.Handle;
  DrawIcon(Canvas.Handle, x, y, Ico);
end;
... funktioniert wunderbar. :)

CalganX 18. Mai 2007 13:09

Re: Mit DrawIcon transparent zeichnen
 
Hi,
dummerweise hat mein Icon die gleiche Herkunft wie bei dir. *g*

Naja, ich lasse es jetzt erstmal so:
Delphi-Quellcode:
        imgAppIcon.Canvas.Brush.Color := clBtnFace;
        DrawIconEx(imgAppIcon.Canvas.Handle, 15, 15, fApplicationInfo.AppIcon,
          0, 0, 0, imgAppIcon.Canvas.Brush.Handle, DI_NORMAL);
        imgAppIcon.Canvas.FloodFill(0, 0, clWhite, fsSurface);
Funktionieren tut's ja.

Chris


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