Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   FillRect zeichnet keinen Hintergrund (https://www.delphipraxis.net/216883-fillrect-zeichnet-keinen-hintergrund.html)

BRobby 17. Mär 2025 15:09

FillRect zeichnet keinen Hintergrund
 
Hallo zusammen,

ich möchte für eine von TPanel abgeleitete Komponente den Hintergrund zeichnen. Siehe angefügten Quelltext. Die Ränder werden wie erwartet richtig gezeichnet, der Hintergrund bleibt weiß.
Habe alles mögliche versucht, der Hintergrund wird nicht farbig. Kann da jemand helfen?

Delphi-Quellcode:

TFarbQuadrat = class(TPanel)
  private
    FColor: TAlphaColor;

  protected
    procedure SetColor(aColor: TAlphaColor);
    procedure Paint; override;
    procedure Click; override;

  public
    constructor Create(aOwner : TComponent); override;
    destructor Destroy; override;

    property Color: TAlphaColor read FColor write SetColor;
  end;


procedure TFarbQuadrat.Paint;
begin
  inherited;
  Canvas.BeginScene;
  // Hintergrund malen
  Canvas.Fill.Kind := TBrushKind.Solid;
  Canvas.Fill.Color := Color;
  Canvas.FillRect(LocalRect, 1);
  Canvas.EndScene;

  Canvas.BeginScene;
  // Rahmen malen
  Canvas.Stroke.Kind := TBrushKind.Solid;
  Canvas.Stroke.Color := claBlack;
  if IsFocused
    then begin Canvas.Stroke.Thickness:=3; end
    else begin Canvas.Stroke.Thickness:=1; end;
  Canvas.DrawRect(LocalRect, 1);

  Canvas.EndScene;
end;

AuronTLG 17. Mär 2025 15:12

AW: FillRect zeichnet keinen Hintergrund
 
Gibt es einen VCL-Style, der reinpfuschen könnte? (In dem Fall müsste man seClient aus TPanel.StyleElements rausnehmen)

BRobby 17. Mär 2025 15:17

AW: FillRect zeichnet keinen Hintergrund
 
???
Verstehe ich nicht.
Es handelt sich um ein FMX-Programm.

Den Constructor (Testversion) habe ich hier:

Delphi-Quellcode:
constructor TFarbQuadrat.Create(aOwner : TComponent);
begin
  inherited Create(aOwner);
  Color:= TAlphaColorRec.DarkGray;
  CanFocus:=True;
  Size.Width:=20+20; Size.Height:=20+20;
  StyleLookup:='';
  Opacity:=1;
  Visible:=True;
  Enabled:=True;
end;

AuronTLG 17. Mär 2025 15:47

AW: FillRect zeichnet keinen Hintergrund
 
Hm, auf FMX ist das Komponentenfarben ändern ohne die Verwendung von Stylebooks etwas problematisch.
Ich kann dir nicht garantieren, dass es nicht auch noch andere Möglichkeiten gibt und ich kenne den genauen Anwendungsfall nicht, aber die einfachste Variante zum Setzen von Hintergrundfarben ohne Stylebooks ist das TRectangle.

Das TRectangle verhält sich mehr oder weniger wie ein Panel, man kann dem Teil aber direkt die Hintergrundfarbe über TRectangle.Fill.Color einstellen.
Die Namensgebung deiner Klasse "TFarbQuadrat" impliziert zumindest, dass das TRectangle evtl genau das sein könnte, was haben willst.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:31 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