![]() |
Speedbutton Bitmap zur Laufzeit zuordnen
Hi,
ich möchte etwas ganz simples machen (10.1 Berlin):
Delphi-Quellcode:
Sollte doch mal locker funktionieren. Speedbuttons Zeigen aber alle keine Bitmap an. Irgendwie steh ich so ein bischen auf dem Schlauch. Mache ich hier einen Fehler?
procedure Tfrm_textformattoolbox.FillBtnWithColor(color: TColor;
btn: TSpeedButton); var bmp: TBitmap; begin bmp:=TBitmap.Create; try bmp.PixelFormat:= pf32Bit; bmp.SetSize(14, 14); bmp.Canvas.Brush.Color:=color; bmp.Canvas.Pen.Color:=color; bmp.Canvas.FillRect(Rect(0,0,bmp.Width+1,bmp.Height+1)); btn.Glyph:=nil; btn.Glyph.Assign(bmp); btn.Refresh; finally bmp.Free; end; end; Die Bitmap wird richtig erzeugt, das habe mal mittels SaveToFile kontrolliert. |
AW: Speedbutton Bitmap zur Laufzeit zuordnen
So sieht die Lösung aus
Delphi-Quellcode:
Das
// mit einer ImageList
ImageList1.GetBitmap(XYZ, btn.Glyph); // mit einem bitmap vermutlich so btn.Glyph := bmp;
Delphi-Quellcode:
kannst du übrigens weglassen.
btn.Glyph:=nil;
Und
Delphi-Quellcode:
braucht man auch nicht.
btn.Refresh;
Wenn es dann nicht funktioniert stimmt vermutlich irgendwas mit deinem Bitmap nicht. |
AW: Speedbutton Bitmap zur Laufzeit zuordnen
das Glyph:=Nil und glyph.refresh hatte ich zu Testen gemacht.
Wenn ich glyph:=bmp verwende, dann kann ich aber bmp danach nicht freigeben. In dem Fall müsste ich ja des alte glyph vorweg freigeben, damit mir keine Memoryleaks entstehen. Was hat glyph.assign denn sonst für eine Funktion? Denn laut Hilfe ist Glyph ja ein TBitmap. |
AW: Speedbutton Bitmap zur Laufzeit zuordnen
also glyph:=bmp functioniert auch nicht.
was sollte an der bmp nicht in Ordnung sein?
Delphi-Quellcode:
wird ganz normal aus der VCL erzeugt. Wie gesagt, wenn ich sie per SaveToFile mal abspeichere, sieht sie ganz normal aus.
var
bmp: TBitmap; begin bmp:=TBitmap.Create; try bmp.SetSize(14, 14); bmp.Canvas.Brush.Color:=color; bmp.Canvas.Pen.Color:=color; bmp.Canvas.FillRect(Rect(0,0,bmp.Width+1,bmp.Height+1)); btn.Glyph.Assign(bmp); finally bmp.Free; end; |
AW: Speedbutton Bitmap zur Laufzeit zuordnen
Fehler selbst gefunden.
Es lag an der bmp.TransparentColor. Da ich im Bmp auch den Pixel(0,0) mit der Farbe fülle, nimmt der SpeedButten die Farbe des Pixel(0,0) als TransparentColor und zeichnet eben alles andere in dieser Farbe nicht mit. Und der der Rest die gleiche Farbe hat.... ;-) Als Lösung habe ich halt folgendes gemacht:
Delphi-Quellcode:
Somit unterscheidet sich die TransparentColor auf jeden Fall von meiner Color auf Pixel(0,0) und das Rechteck wird auch gezeichnet.
if color<>clFuchsia then bmp.TransparentColor:=clFuchsia else bmp.TransparentColor:=clMaroon;
Man hatte auch einfach einen andersfarbigen Rahmen Drumherum setzen können. Danke dir aber für deine Zeit. Hattest also doch irgendwie recht, am ende lag es an der Bitmap ;-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:09 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