如何在矩形的画布上绘画

阿诺德

我需要一个可点击的控件,可以根据需要进行调整。从Delphi文档中,我收集到了TRectangle可以做到的。我需要以编程方式创建我的TRectangles,所以我创建了一个窗体,一个面板和一个按钮(请参见下面的代码)。由于TRectangle是通过TShape从TControl派生而来的,因此我测试了是否可以使用PaintTo和自己的画布在TRectangle Canvas上绘制。我构造的TRectF是在假设绘画相对于TRectangle的Canvas的假设下创建的,因此需要偏移(0,0)。但是,将矩形绘制在表格的位置(0,0)!不注意我所做的“填充”和“描边”属性的更改。

接下来,我尝试了FillRect并再次尝试了相同的结果,尽管使用了正确的Fill。尽管调用来自Trectangle变量.Canvas.FillRect,但始终相对于树中的最高父级,而绕过TRectangle和TPanel。我一直认为绘画相对于Canvas所属的TControl的坐标。

这是错误的还是TRectangle有什么特别之处?有没有更好的绘画方式在矩形上?

unit rect_test_main;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
  FMX.Objects;

type
   TForm1 = class(TForm)
    Panel1: TPanel;
    Button1: TButton;

    procedure Button1Click (Sender: TObject);
    procedure FormCreate (Sender: TObject);

   protected
      FR: TRectangle;

   public
      procedure draw_paintto (rect: TRectangle);
      procedure draw_rect (rect: TRectangle);
      procedure draw_fill (rect: TRectangle);
      procedure draw (surface: TControl);
   end;

var
  Form1: TForm1;

implementation

{$R *.fmx}

procedure TForm1.FormCreate (Sender: TObject);
begin
   FR := Trectangle.Create (Panel1);
   FR.Parent := Panel1;
   FR.Canvas.BeginScene;
   FR.Canvas.Fill.Color := TAlphaColors.Black;
   FR.Canvas.Stroke.Color := TAlphaColors.Green;
   FR.SetBounds (200, 200, 50, 300);
   FR.OnClick := Button1Click;
   FR.Canvas.EndScene;
end; // FormCreate //

procedure TForm1.Button1Click (Sender: TObject);
begin
   draw_fill (FR);
end;

procedure TForm1.draw_paintto (rect: TRectangle);
var
   r: TRectF;
begin
   FR.Canvas.BeginScene;
   FR.Canvas.Fill.Color := TAlphaColors.Black;
   FR.Canvas.Stroke.Color := TAlphaColors.Green;
   FR.Canvas.Stroke.Thickness := 10;
   r := rect.ShapeRect;
//   r := TRectF.Create (TPointF.Create (FR.Position.X - 10, FR.Position.Y - 10), FR.Width, FR.Height);
   FR.PaintTo (FR.Canvas, r, FR.Parent);
   FR.Canvas.EndScene;
end; // draw_paintto //

procedure TForm1.draw_fill (rect: TRectangle);
var
   r: TRectF;
begin
   FR.Canvas.BeginScene;
   FR.Canvas.Fill.Color := TAlphaColors.Black;
   FR.Canvas.Stroke.Color := TAlphaColors.Green;
   FR.Canvas.Stroke.Thickness := 10;
   r := TRectF.Create (TPointF.Create (FR.Position.X, FR.Position.Y), FR.Width, FR.Height);
   FR.Canvas.FillRect (r, 0, 0, AllCorners, 1);
   FR.Canvas.EndScene;
end; // draw_fill //
阿诺德

在TRectangle上绘制时,应该在TRectangle级别而不是在Canvas上使用画笔和笔触更改在这种情况下,所有工作均按预期进行,绘制了“矩形”画布。

Key: TRectangle;
...
Key.Fill.Color := TAlphaColors.White;
Key.Fill.Kind := TBrushKind.bkSolid; // and not Key.Canvas.Fill ...
Key.Stroke.Thickness := 1;
Key.Stroke.Color := TAlphaColors.Darkgray;
Key.Paint;

为什么TRectangle在其Canvas上绘制时在其Parent.Parent的画布上绘制(在本例中)会打败我。也许它本身没有Canvas和TRectangle.Canvas只是对其Parent.Canvas的引用?

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在画布上的图像上“绘画”?

来自分类Dev

如何在背景画布上绘画

来自分类Dev

颤抖的画布,如何在子小部件上绘画?

来自分类Dev

pygame的“绘画”程序-在画布上绘制空矩形

来自分类Dev

如何在可拖动的画布上制作矩形?

来自分类Dev

如何在Android画布上绘制局部圆角矩形?

来自分类Dev

如何在画布上绘制多个半透明矩形?

来自分类Dev

如何在画布上绘制带边框的矩形?

来自分类Dev

如何在画布上突出显示特定的矩形

来自分类Dev

如何在Android画布上绘制局部圆角矩形?

来自分类Dev

在wpf中修改任何矩形的高度后,如何在画布上重新排列矩形?

来自分类Dev

如何在窗口调整大小时重绘画布

来自分类Dev

如何在图像上绘画并保存

来自分类Dev

HTML5 Canvas-如何在画布上的图像上绘制矩形

来自分类Dev

如何在矩形画布内着色

来自分类Dev

如何在JavaScript中的画布上绘制圆角矩形的下半部分

来自分类Dev

如何在旋转的画布上准确绘制橡皮筋选择矩形?

来自分类Dev

用绘画/描边/绘画在画布上显示图像

来自分类Dev

如何识别对画布上绘制的矩形的单击

来自分类Dev

如何在带有矩形或弧形的画布中模拟重力?

来自分类Dev

在画布背景或矩形上打孔

来自分类Dev

如何在画布上的图像上换行

来自分类Dev

如何在JavaScript画布中使矩形位于所有其他矩形之上?

来自分类Dev

如何在矩形的边界上绘制点?

来自分类Dev

如何在 CameraX TextureView 上绘制矩形

来自分类Dev

为什么我不能在图像的画布上绘画?

来自分类Dev

在画布上绘画并自动删除(HTML5)

来自分类Dev

Android:在画布中的背景图片上绘画

来自分类Dev

如何在每个画布上添加图像?

Related 相关文章

热门标签

归档