2016-05-13 9 views
1

Ich kann einfach nicht herausfinden, was ich falsch mache, wenn ich versuche, ein Steuerelement zu malen.Firemonkey-Steuerelemente zeichnen nicht

Ich habe versucht, mit TCanvas.BeginScene()/TCanvas.EndScene(), versuchte Malerei in anderen Methoden (zum Beispiel Hauptform OnPaint()).
Ich habe TControl.InvalidateRect() versucht.
Ich bekomme nichts.

Hier ist, was ich in meinem Test-App haben:

type 
    TTestControl = class(TControl) 
    protected 
    procedure Paint; override; 
    end; 

    TForm1 = class(TForm) 
    procedure FormCreate(Sender: TObject); 
    private 
    fTestControl: TTestControl; 
    end; 

procedure TTestControl.Paint; 
begin 
    Canvas.Fill.Color := TColorRec.Blueviolet; 
    Canvas.FillEllipse(ClipRect, AbsoluteOpacity); 
end; 

procedure TForm1.FormCreate(Sender: TObject); 
begin 
    fTestControl := TTestControl.Create(Self); 
    fTestControl.Parent := Self; 
    fTestControl.Align := TAlignLayout.Client; 
end; 

Es sollte genug sein, je nachdem, was ist online.
Irgendwelche Vorschläge?

Antwort

2

Die Canvas.Fill.Color ist eine TAlphaColor.

Ändern Sie die Zeile

Canvas.Fill.Color := TColorRec.Blueviolet; 

zu

Canvas.Fill.Color := TAlphaColors.Blueviolet; 
+0

Vielen Dank !!! Das hat es getan. =) –

0

Ihre Farbe Methoden sollte wie folgt sein:

procedure TTestControl.Paint; 
begin 
    inherited; 
    Canvas.BeginScene; 
    Canvas.Fill.Color := claBlueviolet; 
    Canvas.FillEllipse(ClipRect, AbsoluteOpacity); 
    Canvas.EndScene; 
end; 

ich auch, denke, Sie sollten die DoPaint Methode von TControl außer Kraft setzen und nicht die Farbe.

+0

Eigentlich sollte es einen 'try' /' finally' Block dazu haben. Aber das würde dieses Problem nicht beheben. –

+0

Ich glaube, dass sie in TControl.Paint überflüssig sind, weil sie bereits anderswo im FMX-Code gemacht wurden. –