在编写过程中如果入到传入的参数是动态数组的话可以这么做
type
TPoints = array of TPoint;
Points: TPoints;
SetLength(Points, 3);
Points[0].X := 150;
Points[0].Y := 150;
Points[1].X := 240;
Points[1].Y := 50;
Points[2].X := 320;
Points[2].Y := 200;
源码如下:
unit UForm_Image8;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, Math;
type
TPoints = array of TPoint;
TForm_Image8 = class(TForm)
Button1: TButton;
Button2: TButton;
ScrollBox1: TScrollBox;
PaintBox1: TPaintBox;
procedure FormCreate(Sender: TObject);
procedure PaintBox1Paint(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
Points: TPoints;
R: TRect;
LeftPoint, RightBottomPoint: TPoint;
OffsetX, OffsetY: Integer;
{ Private declarations }
procedure GetCanvasRect(ACanvas: TCanvas; var ARect: TRect);
function getLeftPoint(APoints: TPoints): TPoint;
function getRightBottomPoint(APoints: TPoints): TPoint;
procedure setX(APoints: TPoints; AIncreaseNum: Integer);
procedure setY(APoints: TPoints; AIncreaseNum: Integer);
procedure ClearPintBox;
public
{ Public declarations }
end;
var
Form_Image8: TForm_Image8;
implementation
{$R *.dfm}
procedure TForm_Image8.FormCreate(Sender: TObject);
begin
OffsetX := 0 ;
OffsetY := 0 ;
Randomize;
PaintBox1.Canvas.Brush.Color := Random($FFFFFF);
SetLength(Points, 3);
Points[0].X := 150;
Points[0].Y := 150;
Points[1].X := 240;
Points[1].Y := 50;
Points[2].X := 320;
Points[2].Y := 200;
LeftPoint := getLeftPoint(Points);
RightBottomPoint := getRightBottomPoint(Points);
R := Rect(LeftPoint, RightBottomPoint);
PaintBox1.Canvas.Polygon(Points);
end;
//取左边最小的坐标
function TForm_Image8.getLeftPoint(APoints: TPoints): TPoint;
var
I, MinX, MinY: Integer;
begin
MinX := APoints[Low(APoints)].X;
for I := Low(APoints) to High(APoints) do
begin
MinX := min(MinX, APoints[I].X);
end;
MinY := APoints[Low(APoints)].Y;
for I := Low(APoints) to High(APoints) do
begin
MinY := min(MinY, APoints[I].Y);
end;
Result := Point(MinX, MinY);
end;
//取右边最大的坐标
function TForm_Image8.getRightBottomPoint(APoints: TPoints): TPoint;
var
I, MaxX, MaxY: Integer;
begin
MaxX := APoints[Low(APoints)].X;
for I := Low(APoints) to High(APoints) do
begin
MaxX := max(MaxX, APoints[I].X);
end;
MaxY := APoints[Low(APoints)].Y;
for I := Low(APoints) to High(APoints) do
begin
MaxY := max(MaxY, APoints[I].Y);
end;
Result := Point(MaxX, MaxY);
end;
procedure TForm_Image8.PaintBox1Paint(Sender: TObject);
begin
PaintBox1.Canvas.Polygon(Points);
end;
procedure TForm_Image8.setX(APoints: TPoints; AIncreaseNum: Integer);
var
I: Integer;
begin
for I := Low(APoints) to High(APoints) do
begin
APoints[I].X := APoints[I].X + AIncreaseNum;
end;
end;
procedure TForm_Image8.setY(APoints: TPoints; AIncreaseNum: Integer);
var
I: Integer;
begin
for I := Low(APoints) to High(APoints) do
begin
APoints[I].Y := APoints[I].Y + AIncreaseNum;
end;
end;
procedure TForm_Image8.ClearPintBox;
begin
PaintBox1.Canvas.Brush.Color := PaintBox1.Parent.Brush.Color ;//clBtnFace;
PaintBox1.Canvas.FillRect(PaintBox1.ClientRect);
end;
procedure TForm_Image8.Button1Click(Sender: TObject);
begin
OffsetY := OffsetY + 2;
setY(Points, OffsetY);
PaintBox1.Canvas.Brush.Style := bsClear;
ClearPintBox;
PaintBox1.Canvas.Polygon(Points);
end;
procedure TForm_Image8.GetCanvasRect(ACanvas: TCanvas; var ARect: TRect);
begin
with ACanvas do begin
ARect.TopLeft := Point(0, 0);
ARect.BottomRight := Point(Width, Height);
end;
end;
end.
——————————————————————————————————————
——————————————————————————————————————
object Form_Image8: TForm_Image8
Left = 192
Top = 114
Width = 979
Height = 563
Caption = '图形处理_矢量图移动'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13
object Button1: TButton
Left = 808
Top = 112
Width = 75
Height = 25
Caption = '上移'
TabOrder = 0
OnClick = Button1Click
end
object Button2: TButton
Left = 808
Top = 160
Width = 75
Height = 25
Caption = '下移'
TabOrder = 1
end
object ScrollBox1: TScrollBox
Left = 0
Top = 16
Width = 633
Height = 337
HorzScrollBar.Style = ssFlat
HorzScrollBar.Tracking = True
BevelInner = bvNone
BevelOuter = bvNone
BorderStyle = bsNone
TabOrder = 2
object PaintBox1: TPaintBox
Left = 0
Top = 0
Width = 633
Height = 337
Align = alClient
OnPaint = PaintBox1Paint
end
end
end