Einzelnen Beitrag anzeigen

Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Mehrere Markierungen in TImage setzen

  Alt 26. Mär 2007, 14:31
Willkommen in der Delphi-PRAXiS, Ronald!

Du könntest für die zu verschiebenden Punkte jeweils ein Delphi-Referenz durchsuchenTShape nehmen:

Delphi-Quellcode:
type
  TForm1 = class(TForm)
    [...]
  private
    FMarker : TShape;
    FAnchor : TPoint;
    FOrgPos : TPoint;
    FPanning : Boolean;
    function CreateMarker (aColor: TColor): TShape;
  end;

[...]

CONST
  SHAPESIZE = 15;

procedure TForm1.Button1Click(Sender: TObject);
begin
  FMarker := CreateMarker(clLime);
end;

function TForm1.CreateMarker(aColor: TColor): TShape;
begin
  Result := TShape.Create(Self);
  with Image1 do
    Result.SetBounds(Left + (Width - SHAPESIZE) div 2,
                     Top + (Height - SHAPESIZE) div 2, SHAPESIZE, SHAPESIZE);

  Result.Parent := Self;
  Result.Shape := stCircle;
  Result.Brush.Color := aColor;
  Result.OnMouseDown := ShapeMouseDown;
  Result.OnMouseMove := ShapeMouseMove;
  Result.OnMouseUp := ShapeMouseUp;
end;

procedure TForm1.ShapeMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  FAnchor := Mouse.CursorPos;
  FOrgPos := TShape(Sender).BoundsRect.TopLeft;
  FPanning := True;
end;

procedure TForm1.ShapeMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if FPanning then
    begin
      TShape(Sender).Top := FOrgPos.Y + (Mouse.CursorPos.Y - FAnchor.Y);
      TShape(Sender).Left := FOrgPos.X + (Mouse.CursorPos.X - FAnchor.X);
    end;
end;

procedure TForm1.ShapeMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  FPanning := False;
end;
Das ist natürlich nur ein Anfang. Die Verwaltung der Shapes (Speichern der Referenzen, Begrenzung der Anzahl, Einfärben beim Anklicken, Löschen) sowie eine eventuelle Einschränkung der Mausbewegung mußt du noch ergänzen.

Gruß Hawkeye
  Mit Zitat antworten Zitat