![]() |
SpeedButton: falsche Darstellung eines Bitmaps
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo,
ich hab einen Speedbutton in den ich ein Bitmap lade. Das Bitmap (cycle start.bmp) hat als Hintergrundfarbe grün. Wenn das Bild in den Speedbutton geladen wurde, dann sieht man nur ansatzweise das grün. Eigentlich sieht man den Hintergrund des Buttons. Wieso seh ich nicht das komplette Bitmap und wie kann ich das richtig anzeigen lassen? |
Re: SpeedButton: falsche Darstellung eines Bitmaps
Die Pixelfarbe unten links in der Ecke bestimmt die Farbe, die Transparent gezeichnet wird.
|
Re: SpeedButton: falsche Darstellung eines Bitmaps
Transparent = false hat nichts gebracht
|
Re: SpeedButton: falsche Darstellung eines Bitmaps
Ja, hab ich gemerkt (hab's heimlich wieder gelöscht)
Setze in das untere/linke Pixel mal ein rosa Punkt. Dann siehst Du wie es arbeitet. 3 Ideen habe ich jetzt dazu: 1. in jede Ecke ein rosa Pixel, dann ist es ein leicht abgerundeter Button 2. Bild in 17x16 zeichnen und links ein rosa Strich (Versatz mit Eigenschaft "Margin" ausgleichen) 3. Bild aus Imagelist, dann kann man wohl ein anderes Verhalten einstellen (kenne ich mich aber nicht mit aus) |
Re: SpeedButton: falsche Darstellung eines Bitmaps
Zitat:
Und muss ich jetzt meine ganzen Bitmaps, es sin ein paar viele, jetzt alle mit einem rosa Punkt ausstatten oder kann ich das beim Reinladen auch im Code machen? [Edit] Ich hab 50 SpeedButtons und für jeden Button wird ein auswählbares Bitmap geladen (steht in einer Ini-Datei) |
Re: SpeedButton: falsche Darstellung eines Bitmaps
Hab' meinen Post oben erweitert, glaube da müsstest Du Dich mal mit ImageList beschäftigen, vielleicht weis hier auch jemand wie das dann genau funktioniert.
Warum ist das so... hielt man beim Entwickler von Windows wohl für eine gute Idee, die Transparente Farbe eines Glyph zu definieren :stupid: Zieh mal eine ImageList auf Dein Formular... Doppelklick auf das Symbol un ein paar Bilder reinladen. Dann teste mal folgenden Code:
Delphi-Quellcode:
(Hoffe das ist so korrekt)
procedure TForm1.SpeedButton1Click(Sender: TObject);
var aBitmap:TBitmap; begin aBitmap := TBitmap.Create; ImageList1.GetBitmap(1 {<- hier ist der Index des zu ladenden Bildes}, aBitmap); SpeedButton1.glyph.Assign(aBitmap); end; |
Re: SpeedButton: falsche Darstellung eines Bitmaps
Ich habs jetzt mal mit einer Imagelist probiert.
Ich lade das bild in ein Bitmap - übergib das der Imagelist, wähl dann das erste Bild aus (ist ja nur eines drin) und lass mir dann dieses Bild wieder auf Bitmap ausgeben. Nur leider kommt das gleiche raus... (Hab die ImageList zur Laufzeit erzeugen lassen) |
Re: SpeedButton: falsche Darstellung eines Bitmaps
Habs jetzt so gelöst:
Delphi-Quellcode:
Damit wird einfach das linke untere Pixel auf die Farbe clFuchsia umgeschrieben
//Bitmap erzeugen
Bitmap := TBitmap.Create; try Bitmap.LoadFromFile(S); Bitmap.Canvas.Pixels[0, Pred(Bitmap.Height)] := clFuchsia; Dummy.Glyph.Assign(Bitmap); finally //Bitmap löschen und freigeben FreeAndNil(Bitmap); end; und schon funktionierts. |
Re: SpeedButton: falsche Darstellung eines Bitmaps
Zitat:
Delphi-Quellcode:
Ist ThemeServices.ThemesEnabled wird die Eigenschaft Transparent nicht ausgewertet.
procedure TButtonGlyph.DrawButtonGlyph(Canvas: TCanvas; const GlyphPos: TPoint;
State: TButtonState; Transparent: Boolean); var Index: Integer; Details: TThemedElementDetails; R: TRect; Button: TThemedButton; begin if FOriginal = nil then Exit; if (FOriginal.Width = 0) or (FOriginal.Height = 0) then Exit; Index := CreateButtonGlyph(State); with GlyphPos do begin if ThemeServices.ThemesEnabled then begin R.TopLeft := GlyphPos; R.Right := R.Left + FOriginal.Width div FNumGlyphs; R.Bottom := R.Top + FOriginal.Height; case State of bsDisabled: Button := tbPushButtonDisabled; bsDown, bsExclusive: Button := tbPushButtonPressed; else // bsUp Button := tbPushButtonNormal; end; Details := ThemeServices.GetElementDetails(Button); ThemeServices.DrawIcon(Canvas.Handle, Details, R, FGlyphList.Handle, Index); end else if Transparent or (State = bsExclusive) then begin ImageList_DrawEx(FGlyphList.Handle, Index, Canvas.Handle, X, Y, 0, 0, clNone, clNone, ILD_Transparent) end else ImageList_DrawEx(FGlyphList.Handle, Index, Canvas.Handle, X, Y, 0, 0, ColorToRGB(clBtnFace), clNone, ILD_Normal); end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:02 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