![]() |
bewegliches Polygon
Hallo, ich bin neu im Forum.
Ich habe auf eine Form vier kleine Image liegen die mit der Maus beweglich sind. Nur wenn ich eine der Bilder bewege,soll zwischen allen bildern ein Polygon gezeichnet werden, daß wieder verschwindet wenn die Maus losgelassen wird. Mein Quelltext.
Delphi-Quellcode:
procedure TForm2.ImageMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); begin if Button = mbLeft then begin FDragging := True; FLastPos := Point(X, Y); TControlAccess(Sender).MouseCapture := True; end; end; procedure TForm2.ImageMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if FDragging then begin TControlAccess(Sender).Left := TControlAccess(Sender).Left + X - FLastPos.X; TControlAccess(Sender).Top := TControlAccess(Sender).Top + Y - FLastPos.X; form2.Canvas.Pen.Color:=clRed; form2.Canvas.Pen.Mode:=pmNotXor; form2.Canvas.Pen.Style:=psDot; form2.Canvas.MoveTo(image2.Left+9,image2.top+9); form2.Canvas.Polygon([(point(image2.Left+9,image2.Top+9)),point(image3.Left+9,image3.Top+9), (point(image5.Left+9,image5.Top+9)),(point(image4.left+9,image4.Top+9))]); end; end; procedure TForm2.ImageMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Button = mbLeft then begin FDragging := False; end; end; |
Re: bewegliches Polygon
Auf dem Canvas sollte man nur in der Paint Methode zeichen, weil dann beim Repaint diese Änderungen wieder übermalt werden.
Man könnte auch ein TShape verwenden. Innerhalb einer Methode niemals auf Instanzbezeichnungen zugreifen( form2) |
Re: bewegliches Polygon
Ich muss vieleicht noch dazusagen,daß unter den vier kleinen Images eine große Imagekomponente liegt,
in der ein Bild zur Laufzeit geladen wird.Die Imagekomponente steht auf Stretch,deshalb wollte ich nicht direkt auf das Image malen. |
Re: bewegliches Polygon
Trotzdem sollte man nur in der Paint-Methode zeichnen, weil sonst bei jedem Redraw die Änderungen überschrieben werden.
|
Re: bewegliches Polygon
Das mit der Paint-Methode verstehe ich nicht. Was muß ich am Quelltext ändern?
|
Re: bewegliches Polygon
Den Code der Zeichnet in die Paint-Methode aufnehmen
|
Re: bewegliches Polygon
Ich habe den Zeichencode in ONPAINT des Formulars kopiert,die mit dem Polygon funktioniert jetzt,
blos die Linien liegen jetzt hinter dem großen Image und sind dauernd sichtbar. |
Re: bewegliches Polygon
Hi!
Willkommen in der DP. Könntest du bitte deinen Quelltext noch in Tags setzen, damit er auch schön formatiert wird? Danke! Ciao, Frederic |
Re: bewegliches Polygon
Die TImage-Instanzen liegen ja vor der Form. Vielleicht wäre in deinem fall eine PaintBox auf der du die Images und die Linien malst besser
|
Re: bewegliches Polygon
Also,habe jetzt Paintbox auf großes Image gelegt und die vier kleinen obendrauf.
Im ONPAINT der Paintbox folgenter Code:
Delphi-Quellcode:
Im Mousevove der kleinen Images Paintbox1.refresh.
procedure TForm2.PaintBox1Paint(Sender: TObject);
begin Canvas.Pen.Color:=clRed; canvas.Pen.Mode:=pmNotXor; Canvas.Pen.Style:=psDot; Canvas.MoveTo(image2.Left+9,image2.top+9); Canvas.Polygon([(point(image2.Left+9,image2.Top+9)),point(image3.Left+9,image3.Top+9), (point(image5.Left+9,image5.Top+9)),(point(image4.left+9,image4.Top+9))]); end; Wenn ich jetzt ein kleines Image bewege,habe ich nur ein flackerndes Polygon??? |
Re: bewegliches Polygon
Ich meinte dass du alles auf dem Canvas der Imagebox malen sollst ( keine einzelnen TImage). DoubleBufferings sollte gegen das Flackern helfen
|
Re: bewegliches Polygon
Das Problem, das Bild was in das große Image eingefügt wird,wird an den Bildschirm angepasst, ist
als vergrössert oder verkleinert.Die kleinen Images dienen als Messpunkte.Das Polygon ist dann in falscher größe und stelle. |
Re: bewegliches Polygon
Du kannst es dann doch auch skalieren. Warum verwendest du keine TChart?
|
Re: bewegliches Polygon
@Verkouter: könntest du bitte wie von Frederic (fkerber) bereits erwähnt die Delphi-Tags setzen?
Dazu kannst du deine bisherigen Beiträge per http://www.delphipraxis.net/template.../icon_edit.gif über den entsprechenden Beiträge nachträglich ändern. Ohne diese Delphitags machst du das lesen des Quelltextes unnötig schwer etc. Ich bitte dich diesen Beitrag nicht auch noch zu ignorieren damit wir nicht gezwungen sind gegebenfalls deine Beiträge zu ignorieren :) |
Re: bewegliches Polygon
Ich schreibe heute zum ersten Mal in diesem Forum und hatte nicht gesehen wie das mit den Tags
funktioniert. Dafür entschuldige ich mich hiermit, finde es aber schon merkwürdigm, daß gerade diejenigen, die sich über die Formatierung beschweren, nicht zum Thema äußern. |
Re: bewegliches Polygon
Jens macht das, weil dies seine Aufgabe als Moderator ist.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:58 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