2016-05-13 56 views
1

我試圖繪製控件時根本無法弄清楚我做錯了什麼。我試過使用TCanvas.BeginScene()/ TCanvas.EndScene(),試圖在其他方法(例如主窗體OnPaint())中繪畫。
我試過TControl.InvalidateRect()。
我什麼也沒得到。Firemonkey控件不繪製

下面是我在我的測試程序:

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; 

這應該是足夠的,根據什麼是在線。
有什麼建議嗎?

回答

2

Canvas.Fill.ColorTAlphaColor

更改線路

Canvas.Fill.Color := TColorRec.Blueviolet; 

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

謝謝!那樣做了。 =) –

0

您的油漆的方法應該是這樣的:

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

我,也覺得你應該覆蓋的TControl的DoPaint方法而不是油漆。

+0

實際上,它應該有一個'try' /'finally'塊。但是這不能解決這個問題。 –

+0

我相信他們在TControl.Paint中是多餘的,因爲他們已經在FMX代碼的其他地方完成了。 –