Wie OLLI_T es sagte, würde auch ich in folgende Richtung marschieren:
Delphi-Quellcode:
TMyLineCoord = Record
Start : TPoint;
Ende : TPoint;
end;
TMyLine = class(TObject)
private
FCoord : TMyLineCoord;
protected
public
property Koordinaten : TMyLineCoord read FCoord write FCoord ;
procedure DrawAtCanvas(DerCanvas: TCanvas; DerPen : TPen);
function IstDasDeinPunkt(DerPunkt : TPoint):Boolean;
constructor CreateIt;
destructor Destroy; override;
published
end;
implementation
constructor TMyLine.CreateIt;
begin
inherited Create;
FCoord.Start.x := 0;
FCoord.Start.y := 0;
FCoord.Ende .x := 0;
FCoord.Ende .y := 0;
end;
destructor TMyLine.Destroy;
begin
inherited;
end;
procedure TMyLine.DrawAtCanvas(DerCanvas: TCanvas; DerPen : TPen);
var TempPen : TPen;
begin
TempPen := DerCanvas.Pen;
DerCanvas.Pen := DerPen;
DerCanvas.MoveTo(FCoord.Start.x,FCoord.Start.y);
DerCanvas.LineTo(FCoord.Ende.x,FCoord.Ende.y);
DerCanvas.Pen := TempPen;
end;
function TMyLine.IstDasDeinPunkt(DerPunkt: TPoint): Boolean;
begin
Result := DenkDirSelberAusWieDuPrüfstObDerPunktAufDerLinieLiegt;
end;
Du verwaltest eine TList mit TMyLine-Objekten. Immer wenn Eine neue Linie dazukommt, erweiterst Du die TList um ein solches Element.
In dem Onclickereignis Deiner Canvas-Componente gehst Du die Liste Durch und Chckst ob der Punkt draufliegt:
Delphi-Quellcode:
function GetLineUnderPoint(DerPunkt:TPoint):Integer;
var i : Integer;
begin
Result := -1;
for i := 0 to FMeineLinienListe.Count-1 do begin
if TMyLine(FMeineLinienListe[i]).IstDasDeinPunkt(DerPunkt) then begin
Result := i;
Break;
end;
end;
end;