n muss man nicht auf 0 setzen, da es eine globale Variable ist. die wird automatisch beim Programmstart auf 0 gesetzt.
Hast du die Version mit Polyline oder mit Polygon benutzt? Ich habe das nochmal im Edit umgestellt gehabt.
Delphi-Quellcode:
implementation
{$R *.dfm}
var
N: integer;
Points: array of TPoint;
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if button = mbleft then
begin
Image1.Canvas.Brush.Color := clBlack;
Image1.Canvas.FrameRect(Rect(x-7, y-7, x+7, y+7));
n := n+1;
SetLength(Points, n);
Points[n-1].X := X;
Points[n-1].Y := Y;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
I: Integer;
begin
Image1.Canvas.Brush.Color := clWhite;
Image1.Canvas.FillRect(Rect(0, 0, Image1.Width, Image1.Height));
Image1.Canvas.Pen.Color := clBlue;
Image1.Canvas.Brush.Color := clGreen;
Image1.Canvas.Polygon(Points);
Image1.Canvas.Brush.Color := clBlack;
for I := 0 to Length(Points) - 1 do
Image1.Canvas.FrameRect(Rect(Points[I].x-7,Points[I].y-7,Points[I].x+7,Points[I].y+7));
end;
end.
Hier mal die getestete Version mit Polygon.
Verbesserungen: Farbe setzen, damit man sieht was bei einem Polygon innen und aussen ist. Trennung in Punkte setzen und Polygon malen. Beim Malen des Polygons wird das Image geloescht und die Punkte nach dem Polygon nochmals gemalt, damit sie vor dem Polygon erscheinen. Die Punkte werden nur als Umriss gemalt, damit man die Ecken des polygons nicht ueberdeckt.