![]() |
Innerhalb eines Image eine "unsichtbare" Linie anz
Zwei Tage rumquelen ist zu viel,
deshalb folgende frage. Ich möchte auf einem Bild der sich in TImage befindet mit der linke Maustaste ein punkt makieren, wenn ich jetzt die Maus bewege soll eine Linie gezeichnet werden von der Anfang Position bis zur der Aktuelen Maus Position. Wenn ich Maustaste. Es soll dienen zur Winkelberechnug. Folgendes habe ich angefangen :
Delphi-Quellcode:
Das Ganze sieht richtig Schlecht aus.
procedure TForm18.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin xs := x; // Xs - Start ys := y; // Ys - Start md := True; // MausTaste Image1.Canvas.Pen.Style := psClear; Image1.Canvas.MoveTo( x,y ); end; procedure TForm18.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin If md = False Then Exit; Image1.canvas.Pen.Mode := pmnotxor; Image1.canvas.MoveTo( xs,ys ); Image1.Canvas.LineTo( xe,ye ); Image1.canvas.MoveTo( xs,ys ); Image1.Canvas.LineTo(x,y); xe := x; // Xe - Ende ye := y; // Ye - Ende end; procedure TForm18.Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin md := False; end; Gibt es eine "Schönere" wariante ? MfG S.Launer |
Re: Innerhalb eines Image eine "unsichtbare" Linie
Könntest du noch einmal genauer beschreiben, was du erreichen möchtest?
Ich verstehe deine Frage nicht ganz ... |
Re: Innerhalb eines Image eine "unsichtbare" Linie
Wenn ich auf Image1 mit linke Maustaste drücke ( und festhalte) wird die Anfang position ( xs,ys ) festgehalten.
Wenn ich jetzt die maus bewege soll eine linie gezeichnet werden mit dem koordinaten xs,ys bis aktuele maus position, wobei die linie darf nicht irgendwelche spuren hinterlassen. Es soll funktionieren wie ein " auswahrahmen in explorer ". Du drückst die maus taste und ab der position wird ein rechteck gezeichnet bis du die maustaste loslässt, und alles was innerhalb des boxes sich befindet wird mackiert. Ich möchte sowasänliches mit eine einfache Linie durchführen, allerding es wird nichts mackiert und ausgewählt. Letztentlich für das programm sind wichtig anfangs koordinaten und ende. Damit kann das programm ein winkelberechnen. Für den User ist es aber einfacher wenn er die Linie sieht. Ich hoffe jetzt kann mann den misst :) verstehen. gruss seba |
Re: Innerhalb eines Image eine "unsichtbare" Linie
Du könntest das z.B. so lösen:
Es ist ziemlich ähnlich zu deinem Code, nur werden zuerst gezeichnete Linien wieder "entfernt". Eben durch erneutes Zeichnen mittels Pen.Mode - pmNotXor. Hoffentlich hilft dir das weiter :) Lg Oli
Delphi-Quellcode:
var
StartPosition: TPoint; EndPosition: TPoint; DoNotRunFirstTime: Boolean; procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if (Button = mbLeft) then begin StartPosition := Point(X, Y); DoNotRunFirstTime := True; end; end; procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if (ssLeft in Shift) then with TImage(Sender).Picture.Bitmap.Canvas do begin Pen.Mode := pmNotXor; if (not DoNotRunFirstTime) then begin MoveTo(StartPosition.X, StartPosition.Y); LineTo(EndPosition.X, EndPosition.Y); end else DoNotRunFirstTime := False; EndPosition := Point(X, Y); MoveTo(StartPosition.X, StartPosition.Y); LineTo(EndPosition.X, EndPosition.Y); end; end; procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if (Button = mbLeft) then with TImage(Sender).Picture.Bitmap.Canvas do begin MoveTo(StartPosition.X, StartPosition.Y); LineTo(EndPosition.X, EndPosition.Y); end; end; |
Re: Innerhalb eines Image eine "unsichtbare" Linie
DANKE FÜR DEN CODE !!
Ich werde es sofort ausprobieren. Danke erstmal. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz