![]() |
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??? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:43 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