Lazarus Programmierungsproblem

Hallo liebe wer-weiss-was Gemeinde, 

zu später Stunde komme ich mit einem mittelschweren Problem, was mich bereits den ganzen Tag nicht zur Ruhe kommen lässt :wink:

Es geht um eine Programmieraufgabe für Lazarus, die teilweise schon von mir gelöst wurde. Zumindest soweit ich kam.

Zur kurzen Aufgabenzusammenfassung:
 - es sind n Punkte durch kartesische Koordinaten gegeben   ERLEDIGT

  • diese werden zum Polygon verbunden (Punkt 1 zu Punkt 2, 2 zu 3 usw.) ERLEDIGT
  • das Polygon ist an einer Parallelen der y-Achse zu spiegeln
  • alle Punkte und damit die Koordinaten werden mit Mausklick festgelegt

Die ersten beiden Punkte habe ich schon erledigt. 

Konkrete Fragen:
Die Koordinaten werden mit Mausklick festgelegt. Das passiert auch bei meinem aktuellen Stand, also aus den Koordinaten, aus welchen dann das Polygon gezeichnet wird. (TImage --> Ereignis --> MouseDown).
Nun soll mit nächstem Mausklick die Achsenparallele zur y-Achse festgelegt werden. 

  1. Welches „Ereignis“ nehme ich beim TImage? Und wie versteht dann Lazarus, das dieser Klick kein neuer Punkt für das Polygon ist? 
  2. Wie zeichne ich eine Achsenparallele? Also i.d.F. eine Senkrechte (parallel zur y-Achse)
  3. Die Spiegelfunktion ist formeltechnisch klar, allerdings weiß ich nicht wie ich sie umsetzen kann.

Zum Besseren VErständnis der Quelltext. Ich bitte wirklich um Hilfe und danke schon mal im Voraus!

unit Unit1;

{$mode objfpc}{$H+}

interface

uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
StdCtrls;

type

{ TForm1 }

TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Image1: TImage;
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ private declarations }
public
{ public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }
var n,i: integer;
xp, yp: array [0…100] of integer;

//Beenden Button OnClick
procedure TForm1.Button4Click(Sender: TObject);
begin
close;
end;

//Koordinaten festlegen für Polygon
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if button=mbleft then
begin
n:=n+1;
xp[n]:=x;
yp[n]:=y;
image1.canvas.pen.color:=clblack;
image1.canvas.rectangle(x-3,y-3,x+3,y+3);
end;
end;

//Alles Löschen Button für neues Beispiel
procedure TForm1.Button3Click(Sender: TObject);
begin
image1.canvas.brush.color:=clwhite;
image1.Canvas.brush.style:=bssolid;
image1.Canvas.pen.color:=clwhite;
image1.canvas.rectangle(0,0,image1.width,image1.height);
image1.canvas.pen.color:=clblack;
n:=0;
end;

//Verbinden zu Polygon
procedure TForm1.Button1Click(Sender: TObject);
begin
for i:=1 to n-1 do
begin
image1.canvas.pen.color:=clblack;
image1.canvas.moveto(xp[i],yp[i]);
image1.canvas.Lineto(xp[i+1],yp[i+1]);
image1.canvas.line(xp[1],yp[1],xp[n],yp[n]);
end;
end;

end.