Registriert seit: 28. Okt 2013
299 Beiträge
|
AW: Pfeil auf einem Image platzieren
17. Okt 2023, 16:28
Hm, Ich finde Blumen besser als Kanonen. Bekommt man auch Spatzen und Ameisen darunter versteckt. Trotzdem war ich jetzt zu Faul eine zu malen. Selbst für einen Pfeil war ich jetzt zu Faul.
Aber man sieht trotzdem dass es geht. Siehe Anhang!
Okay, ich habe mich mal an einem Pfeil versucht das Ergebnis passt für meine Zwecke. Danke für die Hilfe. Ich muss auch die Möglichkeit haben, Änderungen an dem Bild wieder rückgängig zu machen, das kann ich ja nur, wenn ich ein eigenes Overlay mache, wie Himitsu das z.B. schon angemerkt hat, richtig?
Hier der Code für den Pfeil:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
CancelDraw := not CancelDraw;
end;
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single);
begin
LfX := X;
LfY := Y;
Down := true;
end;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Single);
procedure DrawArrow(Canvas: TCanvas; X1, Y1, X2, Y2: Single; LineSize: Integer);
var
Angle: Double;
X, Y: Single;
lBrush: TStrokeBrush;
begin
lBrush := TStrokeBrush.Create(TBrushKind.Solid, TAlphaColors.Blue);
try
lBrush.Thickness := LineSize;
lBrush.Cap := TStrokeCap.Round;
Canvas.DrawLine(TPointF.Create(X1, Y1), TPointF.Create(X2, Y2), 100, lBrush);
Angle := ArcTan2(Y2 - Y1, X2 - X1);
X := X2 - (20 * Cos(Angle - Pi / 6));
Y := Y2 - (20 * Sin(Angle - Pi / 6));
Canvas.DrawLine(TPointF.Create(X2, Y2), TPointF.Create(X, Y), 100, lBrush);
X := X2 - (20 * Cos(Angle + Pi / 6));
Y := Y2 - (20 * Sin(Angle + Pi / 6));
Canvas.DrawLine(TPointF.Create(X2, Y2), TPointF.Create(X, Y), 100, lBrush);
finally
lBrush.Free;
end;
end;
begin
if Down then
begin
Self.Canvas.BeginScene;
if CancelDraw then
Self.Canvas.Clear(TAlphaColorRec.Darkgrey);
DrawArrow(Self.Canvas, LfX, LfY, X, Y, 5);
Self.Canvas.EndScene;
end;
end;
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single);
begin
Down := false;
end;
Geändert von fisipjm (17. Okt 2023 um 16:34 Uhr)
|
|
Zitat
|