Так что в настоящее время я переопределяю процедуру рисования из класса TSelectionPoint
, чтобы нарисовать треугольник вместо исходной маленькой точки, которую он создает.
type
Ttriangle_selection = class(TSelectionPoint)
procedure Paint; override;
function FOnChangeTrack:TOnChangeTracking;
private
{ Private declerations }
public
{ Public declerations }
end;
Как видите, я также пытаюсь получить доступ к свойствуOnTrack
с помощью метода FOnChangeTrack
, как предлагается в документации.
Для контекста здесь приведен мой код того, что находится в моей форме:
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;
MyГлавная цель - иметь возможность перемещать мои треугольники на площади и постоянно соединять их линией.В другом проекте я создаю два TSelectionPoints
и затем использую одно из событий OnTrack
точки, чтобы перекрашивать Image1
каждый раз, когда я перемещаю одну из точек.Я хочу быть в состоянии сделать то же самое с треугольниками, которые я сделал, переопределяя исходные точки из TSelectionPoint
.