Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi bewegliches Polygon (https://www.delphipraxis.net/126887-bewegliches-polygon.html)

verkouter 4. Jan 2009 10:31


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;

mkinzler 4. Jan 2009 10:35

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)

verkouter 4. Jan 2009 10:40

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.

mkinzler 4. Jan 2009 10:44

Re: bewegliches Polygon
 
Trotzdem sollte man nur in der Paint-Methode zeichnen, weil sonst bei jedem Redraw die Änderungen überschrieben werden.

verkouter 4. Jan 2009 10:56

Re: bewegliches Polygon
 
Das mit der Paint-Methode verstehe ich nicht. Was muß ich am Quelltext ändern?

mkinzler 4. Jan 2009 10:57

Re: bewegliches Polygon
 
Den Code der Zeichnet in die Paint-Methode aufnehmen

verkouter 4. Jan 2009 12:24

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.

fkerber 4. Jan 2009 12:26

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

mkinzler 4. Jan 2009 12:26

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

verkouter 4. Jan 2009 14:02

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:
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;
Im Mousevove der kleinen Images Paintbox1.refresh.
Wenn ich jetzt ein kleines Image bewege,habe ich nur ein flackerndes Polygon???


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:10 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz