![]() |
Re: Icon pixelfrei
Zitat:
Ist das sowas wie der türkische Vorarbeiter aufm Bau? (Hab nix gegen Imigranten, fands nur spaßig - um evtl. Missverständnissen gleich vorzubeugen!) |
Re: Icon pixelfrei
:lol: :lol:
Ist mir gar nicht aufgefallen. Zum Thema: Hat noch jemand irgendwelche Ideen ? |
Re: Icon pixelfrei
Liste der Anhänge anzeigen (Anzahl: 1)
Moin!
Also ich hab mir echt Mühe gegeben, aber mir ist der Effekt mit den weißen Randpixeln gar nicht gelungen :mrgreen: Beim Zeichnen von Icons mach ich generell einen Bogen um VCL, aber ich habs mal mit versucht^^ Das Ergebnis meiner Spielerei, hoffe es is was brauchbares bei. MFG Sun
Delphi-Quellcode:
function IconToBitmap(const Icon:HIcon; const Color:TColor; BMP:TBitmap):Boolean;
var II:TIconInfo; begin Result:=False; If BMP=nil then Exit; If not GetIconInfo(Icon, II) then Exit; try BMP.Handle:=II.hbmColor; BMP.Canvas.Brush.Color:=Color; BMP.PixelFormat:=pf24bit; Result:=DrawIconEx(BMP.Canvas.Handle, 0, 0, Icon, BMP.Width, BMP.Height, 0, BMP.Canvas.Brush.Handle, DI_NORMAL); except end; end; procedure TForm1.FormPaint(Sender: TObject); var MyIconH:HIcon; MyIcon:TIcon; MyBMP:TBitmap; begin MyIconH:=ExtractIcon(0, 'F:\Programme\Mozilla Firefox\Firefox.exe', 0); If MyIconH<=1 then Exit; DrawIconEx(Canvas.Handle, 10, 10, MyIconH, 32, 32, 0, Brush.Handle, DI_NORMAL); MyIcon:=TIcon.Create; MyIcon.Handle:=MyIconH; Canvas.Draw(42, 10, MyIcon); MyBMP:=TBitmap.Create; IconToBitmap(MyIconH, Self.Color, MyBMP); Canvas.Draw(74, 10, MyBMP); MyIcon.Free; MyBMP.Free; end; procedure TForm1.FormCreate(Sender: TObject); begin Randomize; Color:=Random(16777216); end; |
Re: Icon pixelfrei
In OnPaint funktioniert es, aber kann man das nicht auch in eine Funktion verpacken ?
Habe es probiert, ich sehe kein Icon:
Delphi-Quellcode:
GetIcon(Pfade[Akt], 0, Bmp);
Img.Picture.Bitmap := Bmp; Bmp.Free; procedure GetIcon(filename : String; IconIndex: Integer; var Result : TBitmap); var MyIconH : HIcon; MyIcon : TIcon; MyBMP : TBitmap; begin MyIconH := ExtractIcon(0, PChar(Filename), 0); if MyIconH <= 1 then Exit; Result := TBitmap.Create; DrawIconEx(Result.Handle, 10, 10, MyIconH, 32, 32, 0, Result.Canvas.Brush.Handle, DI_NORMAL); MyIcon := TIcon.Create; MyIcon.Handle := MyIconH; Result.Canvas.Draw(42, 10, MyIcon); MyBMP := TBitmap.Create; IconToBitmap(MyIconH, clGreen, MyBMP); Result.Canvas.Draw(74, 10, MyBMP); MyIcon.Free; MyBMP.Free; end; |
Re: Icon pixelfrei
Das Du das Icon nicht siehst liegt daran, das in GetIcon mit MyIcon.Free; (auch MyIconH) freigegeben wird.
Es scheint so, als hättest Du meinen QT nicht richtig interpretiert, denn das sind 3 Möglichkeiten, von der jede einzelne funktionieren würde. Wenn Du nur vor hast die Icons irgendwo drauf zu malen, dann würd' ich mir einfach das IconHandle wo sichern um es mit DrawIconEx zu zeichnen. Somit kann man auch ganz lässig die Hintergrundfarbe ändern :mrgreen:
Delphi-Quellcode:
...
private { Private-Deklarationen } Icons:Array[0..255] of HIcon; public { Public-Deklarationen } procedure FreeIcons; procedure LoadIcons; ... procedure TForm1.FormCreate(Sender: TObject); begin Randomize; Color:=Random(16777216); LoadIcons; end; procedure TForm1.FormDestroy(Sender: TObject); begin FreeIcons; end; procedure TForm1.FormPaint(Sender: TObject); var i:Byte; begin // Icons zeichnen For i:=0 to High(Icons) do if Icons[i]>1 then DrawIconEx(Canvas.Handle, 10+(i * 32), 10, Icons[i], 32, 32, 0, Brush.Handle, DI_NORMAL); end; procedure TForm1.FormClick(Sender: TObject); begin Color:=Random(16777216); end; procedure TForm1.FreeIcons; var i:Byte; begin // Icons freigeben For i:=0 to High(Icons) do if Icons[i]>1 then DeleteObject(Icons[i]); ZeroMemory(@Icons, SizeOf(Icons)); end; procedure TForm1.LoadIcons; var i:Byte; begin FreeIcons; // Icons laden For i:=0 to High(Icons) do begin Icons[i]:=ExtractIcon(0, '%WinDir%\Explorer.exe', i); If Icons[i]<=1 then Break; end; end; |
Re: Icon pixelfrei
Ah danke. Hatte dich vorhin missverstanden. Danke! :)
Hab eine Schnapszahl (2222 Beiträge) :mrgreen: |
Re: Icon pixelfrei
( ot: tja, da muss er nu einen usgebe. :mrgreen: )
|
Re: Icon pixelfrei
Hallo,
ich habe es jetzt endlich auch geschafft ein Icon in ein Image32 zu malen :D dafür benutze ich diesen code:
Code:
Jetzt habe ich aber das Problem das ich damit nichts machen kann.
DrawIconEx(image321.Canvas.Handle, 10+(1 * 32), 10, Icons[0], 32, 32, 0, Brush.Handle, DI_NORMAL);
Wenn ich das Bild speichern möchte kommt ein 0 kB Bild heraus, wenn ich die Form verschiebe ist das Bild auch weg. kann mir jemand helfen?? |
Re: Icon pixelfrei
Zitat:
Du hast tatsächlich nur auf den Bereich des Bildschirms gemalt, der für die Darstellung dieses Steuerelements vorgesehen ist. Sobald das Steuerelement von Windows die Nachricht bekommt sich neu zu zeichnen, wird es deine Darstellung übermalen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:35 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