![]() |
FillRect mit weißer Farbe funktioniert nicht!
Hallo,
in einer eigenen Komponente (von TSpeedButton abgeleitet) möchte ich einen blauen Rahmen mit weißem Inhalt haben. Also habe ich im Paint der Komponente folgendes stehen:
Delphi-Quellcode:
aber der Hintergrund ist so grau wie das darunterliegende Panel mit einem GridPanelLayout, auf dem meine Buttons sitzen.
procedure TTerminButton.Paint;
var b, h: single; begin inherited; b := Width; h := Height; canvas.BeginScene; canvas.Fill.Kind := TBrushKind.Solid; canvas.Stroke.Kind := TBrushKind.Solid; canvas.ClearRect(RectF(0, 0, b, h), TAlphaColors.White); canvas.Fill.Color := TAlphaColors.Blue; canvas.Stroke.Color := TAlphaColors.Blue; canvas.FillRect(RectF(1, 1, b - 1, h - 1), 0, 0, AllCorners, 100); //innen canvas.Fill.Color := TAlphaColors.White; canvas.Stroke.Color := TAlphaColors.White; canvas.FillRect(RectF(2, 2, b - 2, h - 2), 0, 0, AllCorners, 100); canvas.EndScene; Nehme ich für innen eine andere Farbe (gelb, rot, etc.) funktioniert das korrekt! Warum zum teufel funktioniert weiß nicht? Ciao Stefan |
AW: FillRect mit weißer Farbe funktioniert nicht!
Zitat:
füll das Weiß mit Fillrect, oder nimm als Füllfarbe mal $FFFFFFFF statt TAlphaColors.White ... Gruß, Peter |
AW: FillRect mit weißer Farbe funktioniert nicht!
![]() |
AW: FillRect mit weißer Farbe funktioniert nicht!
Hallo Peter,
nein, hilft nicht! Was mir aber nun bei 'zig Versuchen aufgefallen ist: Schreibe ich eine OnPaint-Procedure in der FormMain und weise diese meiner Komponente zu, funktioniert es! Hier aber habe ich als Parameter vom Paint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF), in der Komponente nicht! Versuche ich diese Parameter in der Komponente zu verwenden, wird
Delphi-Quellcode:
E2037 Deklaration von 'Paint' unterscheidet sich von vorheriger Deklaration
protected
{ Protected-Deklarationen } procedure Paint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF); override; bemängelt! Hast Du eine Idee was da schiefläuft? Ciao Stefan |
AW: FillRect mit weißer Farbe funktioniert nicht!
Lösung:
Ich habe in der Komponente nun eine
Delphi-Quellcode:
MyPaint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF)
und diese im OnCreate der Komponente zugewiesen. Jetzt wird wie gewünscht gezeichnet, warum ein
Delphi-Quellcode:
Paint; overwrite;
nicht korrekt gezeichnet hat, bleibt ein Rätsel... Ciao Stefan |
AW: FillRect mit weißer Farbe funktioniert nicht!
Zitat:
Wenn eine Komponente nur durch ihren Stil gezeichnet wird, ruft sie intern Paint nicht auf, was sich mit einem breakpoint in Paint verifizieren lässt. |
AW: FillRect mit weißer Farbe funktioniert nicht!
Das dumme aber ist, dass das Paint gefeuert wurde, per Breakpoint überprüft!
Ciao Stefan |
AW: FillRect mit weißer Farbe funktioniert nicht!
Abgleitet von einem TSpeedButton funktioniert mein code in einer klasse:
Code:
Ich könnte mir aber vorstellen, dass ClearRect, wie in dem original code verwendet, manchmal anders funktioniert. Soweit ich verstanden habe ist dies eigentlich für bitmaps gedacht - ich habe es zumindest nie verwendet.
procedure TSpecButton.Paint;
var r : TRectF; begin inherited; r := ClipRect; canvas.BeginScene; canvas.Fill.Kind := TBrushKind.Solid; canvas.Stroke.Kind := TBrushKind.Solid; canvas.FillRect(r, 0,0, AllCorners, TAlphaColors.White); canvas.Stroke.Color := TAlphaColors.Blue; canvas.Fill.Kind := TBrushKind.None; InflateRect(r,-1, -1); canvas.DrawRect(r, 0, 0, AllCorners, 100); canvas.EndScene; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:16 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