Delphi10SeattleFMXCanvas画线问题
procedure TForm1.Button1Click(Sender: TObject);
begin
Panel1.Canvas.BeginScene;
Panel1.Canvas.Stroke.Color := TAlphaColorRec.Red;
Panel1.Canvas.DrawLine(PointF(0, 0), PointF(Panel1.Width, Panel1.Height), 1);
Panel1.Canvas.EndScene;
end;
procedure TForm1.Panel1Paint(Sender: TObject; Canvas: TCanvas;
const ARect: TRectF);
begin
Panel1.Canvas.BeginScene;
Panel1.Canvas.Stroke.Color := TAlphaColorRec.Blue;
Panel1.Canvas.DrawLine(PointF(0, 0), PointF(Panel1.Width, Panel1.Height), 1);
Panel1.Canvas.EndScene;
end;
我的代码中有什么问题以两种方式绘制线并且不一样。代码的结果
红线和蓝线不一样。
回答
你为什么要从它的OnPaint事件之外绘制面板?不要那样做!在主动绘制操作之外,控件的Canvas还没有准备好进行绘制,因此在这种情况下,您最终会在窗体上而不是在面板上进行绘制,如屏幕截图所示。
如果您需要从其OnPaint事件外部绘制面板,则根据需要将相关细节保存到侧面的某个位置,触发面板重新绘制自身,并OnPaint根据需要在事件内部应用细节。到那时,面板Canvas将被正确设置以在面板上绘图。