AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Speedbutton Bitmap zur Laufzeit zuordnen

Ein Thema von Hobbycoder · begonnen am 25. Jun 2017 · letzter Beitrag vom 25. Jun 2017
Antwort Antwort
Hobbycoder

Registriert seit: 22. Feb 2017
955 Beiträge
 
#1

Speedbutton Bitmap zur Laufzeit zuordnen

  Alt 25. Jun 2017, 10:32
Hi,

ich möchte etwas ganz simples machen (10.1 Berlin):

Delphi-Quellcode:
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;
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?
Die Bitmap wird richtig erzeugt, das habe mal mittels SaveToFile kontrolliert.
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
SneakyBagels
(Gast)

n/a Beiträge
 
#2

AW: Speedbutton Bitmap zur Laufzeit zuordnen

  Alt 25. Jun 2017, 10:38
So sieht die Lösung aus

Delphi-Quellcode:
 // mit einer ImageList
 ImageList1.GetBitmap(XYZ, btn.Glyph);

 // mit einem bitmap vermutlich so
 btn.Glyph := bmp;
Das btn.Glyph:=nil; kannst du übrigens weglassen.
Und btn.Refresh; braucht man auch nicht.

Wenn es dann nicht funktioniert stimmt vermutlich irgendwas mit deinem Bitmap nicht.

Geändert von SneakyBagels (25. Jun 2017 um 10:41 Uhr)
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
955 Beiträge
 
#3

AW: Speedbutton Bitmap zur Laufzeit zuordnen

  Alt 25. Jun 2017, 10:46
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.
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
955 Beiträge
 
#4

AW: Speedbutton Bitmap zur Laufzeit zuordnen

  Alt 25. Jun 2017, 11:11
also glyph:=bmp functioniert auch nicht.

was sollte an der bmp nicht in Ordnung sein?
Delphi-Quellcode:
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;
wird ganz normal aus der VCL erzeugt. Wie gesagt, wenn ich sie per SaveToFile mal abspeichere, sieht sie ganz normal aus.
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
955 Beiträge
 
#5

AW: Speedbutton Bitmap zur Laufzeit zuordnen

  Alt 25. Jun 2017, 11:23
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:
    if color<>clFuchsia then bmp.TransparentColor:=clFuchsia else bmp.TransparentColor:=clMaroon; Somit unterscheidet sich die TransparentColor auf jeden Fall von meiner Color auf Pixel(0,0) und das Rechteck wird auch gezeichnet.

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
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:58 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