Delphi 方法或过程中用的参数是动态数组的用法。

在编写过程中如果入到传入的参数是动态数组的话可以这么做

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