Thema: Delphi Canvas als Objekt?

Einzelnen Beitrag anzeigen

Benutzerbild von Leuselator
Leuselator

Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
 
Delphi 8 Architect
 
#3

Re: Canvas als Objekt?

  Alt 17. Okt 2003, 15:30
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;
Tim Leuschner
  Mit Zitat antworten Zitat