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将被正确设置以在面板上绘图。


以上是Delphi10SeattleFMXCanvas画线问题的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>