如何使用 TSelectionPoint class 中现有的 class 函数在两个形状之间重新绘制一条线?
How to use existing class functions from TSelectionPoint class to redraw a line between two shapes?
所以目前我正在覆盖 TSelectionPoint
class 中的绘制程序来绘制一个三角形而不是它创建的原始小点。
type
Ttriangle_selection = class(TSelectionPoint)
procedure Paint; override;
function FOnChangeTrack:TOnChangeTracking;
private
{ Private declerations }
public
{ Public declerations }
end;
如您所见,我也在尝试按照文档中的建议通过 FOnChangeTrack
方法访问 属性 OnTrack
。
对于上下文,这里是我的表单代码:
Ttriangle_selection_form = class(TForm)
Panel1: TPanel;
Rectangle1: TRectangle;
Image1: TImage;
procedure FormCreate(Sender: TObject);
procedure Rectangle1Paint(Sender: TObject; Canvas: TCanvas;
const ARect: TRectF);
private
{ Private declarations }
public
{ Public declarations }
end;
下面是我在整个程序中使用的一些变量:
var
triangle_selection_form: Ttriangle_selection_form;
new_triangle : Integer; //for paint function
triangle_x: Ttriangle_selection; //triangles to be created
triangle_y: Ttriangle_selection; //triangles to be created
point_1, point_2:TPointF; //Points to connect line
implementation
{$R *.fmx}
我在这里使用 TSelectionPoint
绘制程序为绘制三角形的点创建路径:
procedure Ttriangle_selection.Paint;
var
path_data: TPathData;
triangle_points: TPolygon;
triangle_object: Tpath;
triangle_size, triangle_location: Integer;
category_label:TLabel;
type_label:TLabel;
begin
begin
path_data := TPathData.Create();
triangle_size := 30;
SetLength(triangle_points, 3);
triangle_points[0].X := 0;
triangle_points[0].Y := 0;
triangle_points[1].X := 3;
triangle_points[1].Y := 0;
triangle_points[2].X := 3;
triangle_points[2].Y := -4;
With path_data do
begin
MoveTo(triangle_points[0]);
LineTo(triangle_points[1]);
LineTo(triangle_points[2]);
ClosePath;
end;
triangle_object := Tpath.Create(self);
with triangle_object do
begin
Width := triangle_size * 3;
Height := triangle_size * 4;
Data := path_data;
// Parent:=Rectangle1
Position.X := 20 + new_triangle;
Position.Y := 20;
end;
GripSize := 40;
Scale.X := 10;
Scale.Y := 10;
new_triangle := new_triangle + 100;
Canvas.DrawPath(triangle_object.Data, 2);
path_data.Destroy;
end;
end;
然后我使用表单的 OnCreate
方法在我的矩形上绘制三角形:
procedure Ttriangle_selection_form.FormCreate(Sender: TObject);
var
triangle_1:TPointF;
begin
triangle_x := Ttriangle_selection.Create(Rectangle1);
triangle_x.Position.X := 20;
triangle_x.Position.Y := 20;
triangle_x.parent:= Rectangle1;
triangle_x.GripSize := 50;
triangle_y := Ttriangle_selection.create(Rectangle1);
triangle_y.Position.X := 20;
triangle_y.Position.Y := 350;
triangle_y.parent:= Rectangle1;
triangle_y.GripSize := 50;
point_1 := triangle_x.Position.Point;
point_2 := triangle_y.Position.Point;
end;
然后我使用矩形的 OnPaint
事件在两个三角形之间画一条线:
procedure Ttriangle_selection_form.Rectangle1Paint(Sender: TObject;
Canvas: TCanvas; const ARect: TRectF);
begin
Canvas.DrawLine(point_1, point_2, 2);
end;
我的主要 objective 是能够在正方形中四处移动我的三角形,并让它们始终由一条线连接。在另一个项目中,我创建了两个 TSelectionPoints
,然后在每次移动其中一个点时使用其中一个点的 OnTrack
事件重新绘制 Image1
。我希望能够通过覆盖 TSelectionPoint
中的原始点来对我制作的三角形执行相同的操作。
因为我不知道如何访问 TSelectionPoint 的 OnTrack 事件,所以我在我的表单上创建了一个 TSelectionPoint。然后我对那个 TSelectionPoint 的 OnTrack 事件做了 triangle_x =。
procedure Ttriangle_selection_form.Rectangle1Paint(Sender: TObject;
Canvas: TCanvas; const ARect: TRectF);
begin
point_1 := triangle_x.Position.Point;
point_2 := triangle_y.Position.Point;
Canvas.DrawLine(point_1, point_2, 2);
triangle_x.OnTrack := SelectionPoint1Track;
end;
现在我可以使用 TSelectionPoint1Track 事件,就好像它是 triangle_x
的 属性
procedure Ttriangle_selection_form.SelectionPoint1Track(Sender: TObject; var X,
Y: Single);
begin
Rectangle1.Repaint;
end;
现在我可以围绕我的表格移动我的三角形,它会自动重新绘制。
所以目前我正在覆盖 TSelectionPoint
class 中的绘制程序来绘制一个三角形而不是它创建的原始小点。
type
Ttriangle_selection = class(TSelectionPoint)
procedure Paint; override;
function FOnChangeTrack:TOnChangeTracking;
private
{ Private declerations }
public
{ Public declerations }
end;
如您所见,我也在尝试按照文档中的建议通过 FOnChangeTrack
方法访问 属性 OnTrack
。
对于上下文,这里是我的表单代码:
Ttriangle_selection_form = class(TForm)
Panel1: TPanel;
Rectangle1: TRectangle;
Image1: TImage;
procedure FormCreate(Sender: TObject);
procedure Rectangle1Paint(Sender: TObject; Canvas: TCanvas;
const ARect: TRectF);
private
{ Private declarations }
public
{ Public declarations }
end;
下面是我在整个程序中使用的一些变量:
var
triangle_selection_form: Ttriangle_selection_form;
new_triangle : Integer; //for paint function
triangle_x: Ttriangle_selection; //triangles to be created
triangle_y: Ttriangle_selection; //triangles to be created
point_1, point_2:TPointF; //Points to connect line
implementation
{$R *.fmx}
我在这里使用 TSelectionPoint
绘制程序为绘制三角形的点创建路径:
procedure Ttriangle_selection.Paint;
var
path_data: TPathData;
triangle_points: TPolygon;
triangle_object: Tpath;
triangle_size, triangle_location: Integer;
category_label:TLabel;
type_label:TLabel;
begin
begin
path_data := TPathData.Create();
triangle_size := 30;
SetLength(triangle_points, 3);
triangle_points[0].X := 0;
triangle_points[0].Y := 0;
triangle_points[1].X := 3;
triangle_points[1].Y := 0;
triangle_points[2].X := 3;
triangle_points[2].Y := -4;
With path_data do
begin
MoveTo(triangle_points[0]);
LineTo(triangle_points[1]);
LineTo(triangle_points[2]);
ClosePath;
end;
triangle_object := Tpath.Create(self);
with triangle_object do
begin
Width := triangle_size * 3;
Height := triangle_size * 4;
Data := path_data;
// Parent:=Rectangle1
Position.X := 20 + new_triangle;
Position.Y := 20;
end;
GripSize := 40;
Scale.X := 10;
Scale.Y := 10;
new_triangle := new_triangle + 100;
Canvas.DrawPath(triangle_object.Data, 2);
path_data.Destroy;
end;
end;
然后我使用表单的 OnCreate
方法在我的矩形上绘制三角形:
procedure Ttriangle_selection_form.FormCreate(Sender: TObject);
var
triangle_1:TPointF;
begin
triangle_x := Ttriangle_selection.Create(Rectangle1);
triangle_x.Position.X := 20;
triangle_x.Position.Y := 20;
triangle_x.parent:= Rectangle1;
triangle_x.GripSize := 50;
triangle_y := Ttriangle_selection.create(Rectangle1);
triangle_y.Position.X := 20;
triangle_y.Position.Y := 350;
triangle_y.parent:= Rectangle1;
triangle_y.GripSize := 50;
point_1 := triangle_x.Position.Point;
point_2 := triangle_y.Position.Point;
end;
然后我使用矩形的 OnPaint
事件在两个三角形之间画一条线:
procedure Ttriangle_selection_form.Rectangle1Paint(Sender: TObject;
Canvas: TCanvas; const ARect: TRectF);
begin
Canvas.DrawLine(point_1, point_2, 2);
end;
我的主要 objective 是能够在正方形中四处移动我的三角形,并让它们始终由一条线连接。在另一个项目中,我创建了两个 TSelectionPoints
,然后在每次移动其中一个点时使用其中一个点的 OnTrack
事件重新绘制 Image1
。我希望能够通过覆盖 TSelectionPoint
中的原始点来对我制作的三角形执行相同的操作。
因为我不知道如何访问 TSelectionPoint 的 OnTrack 事件,所以我在我的表单上创建了一个 TSelectionPoint。然后我对那个 TSelectionPoint 的 OnTrack 事件做了 triangle_x =。
procedure Ttriangle_selection_form.Rectangle1Paint(Sender: TObject;
Canvas: TCanvas; const ARect: TRectF);
begin
point_1 := triangle_x.Position.Point;
point_2 := triangle_y.Position.Point;
Canvas.DrawLine(point_1, point_2, 2);
triangle_x.OnTrack := SelectionPoint1Track;
end;
现在我可以使用 TSelectionPoint1Track 事件,就好像它是 triangle_x
的 属性procedure Ttriangle_selection_form.SelectionPoint1Track(Sender: TObject; var X,
Y: Single);
begin
Rectangle1.Repaint;
end;
现在我可以围绕我的表格移动我的三角形,它会自动重新绘制。