1

Canvas を介して TShape に描画しようとしていますが、何も表示されません。

procedure TController.DrawGrind;
begin
  ShowMessage('I try do draw something');

  with FView.Shape1 do
  begin
    Canvas.MoveTo(Left, Top);
    Canvas.Pen.Width:= 5;
    Canvas.Pen.Style := psSolid;
    Canvas.Pen.Color:= clRed;
    Canvas.Brush.Color:= clRed;
    Canvas.LineTo(Left, Width);
  end;

  FView.Shape1.Refresh;

end;        

読んでくれてありがとう

4

1 に答える 1

2

Refreshメソッドを呼び出しているからです。このメソッドは、すぐにコントロールの再描画を強制します。OnPaint代わりにイベント メソッドでペイントを描画し、それRefreshまたはInvalidateそのシェイプ オブジェクトを呼び出して、強制的にOnPaintイベントをトリガーします。

procedure TController.DrawGrind;
begin
  ShowMessage('I try do draw something');
  // if you use Refresh instead of Invalidate, the control will be forced
  // to repaint itself immediately
  FView.Shape1.Invalidate;
end;

procedure TForm1.Shape1Paint(Sender: TObject);
begin
  Shape1.Canvas.Pen.Width := 5;
  Shape1.Canvas.Pen.Color := clRed;
  Shape1.Canvas.Pen.Style := psSolid;
  Shape1.Canvas.MoveTo(0, 0);
  Shape1.Canvas.LineTo(Shape1.ClientWidth, Shape1.ClientHeight);
end;

元のコードでは、非常に奇妙な位置に描画しようとしていました。キャンバス座標は から始まり、[0; 0]に進み[Control.ClientWidth; Control.ClientHeight]ます。

于 2013-09-19T22:17:55.557 に答える