![]() |
Canvas Rectangle mit MouseMove, MouseDown und MouseUp
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
ich zeichne ein Viereck wenn ich die Mouse drücke. Wenn ich die Mouse bewege, dann soll das Viereck erweitert werden. Wenn ich die Mouse zurück bewege, passiert ein Grafikfehler: die anderen Rectangles sind noch vorhanden. 1. wie kann ich das beheben ? 2. wie kann ich es Regeln, den Startwert von der MouseDown-Position aus (wie in einem Strategiespiel) festzulegen, damit das Viereck auch von dem gewünschten Punkt aus gezeichnet wird ? Der bisherige Code:
Delphi-Quellcode:
Wenn ich PaintBox1.Repaint verwende, dann flackert es.
private
{ Private-Deklarationen } mbdown : Boolean; { ... } procedure TForm1.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin mbdown := true; end; procedure TForm1.PaintBox1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin mbdown := false; PaintBox1.Repaint; end; procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if mbdown = True then begin PaintBox1.Canvas.Brush.Color := clBlack; PaintBox1.Canvas.Brush.Style := bsSolid; PaintBox1.Canvas.Pen.Color := clWhite; PaintBox1.Canvas.rectangle(Rect(0,0,x,y)); end; end; |
Re: Canvas Rectangle mit MouseMove, MouseDown und MouseUp
Zitat:
![]() Um Flimmern zu vermeiden, solltest du mit ![]() Zu 2.: Die Position im OnMouseDown speichern :gruebel: ? |
Re: Canvas Rectangle mit MouseMove, MouseDown und MouseUp
Verwende bei Zeichnen als penmode pmnotxor. Und schau mal in dein Demo-Verzeichnis, unter Demos/Doc findest du GraphEx, das wird das auch demonstriert.
Mfg Frank |
Re: Canvas Rectangle mit MouseMove, MouseDown und MouseUp
tada
Delphi-Quellcode:
Hat den Vorteil, dass du auch noch ruckzuck andere Sachen wie Dreiecke, Rauten, Striche etc einfügen kannst.
var
moused:TPoint; current:TPoint; procedure TForm1.PaintBoxMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin moused.x:=x; moused.y:=y; current.x:=x; current.y:=y; end; procedure TForm1.PaintBoxMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); // Alternativ ImageMouseMove o.ä. begin if SSLeft in Shift then imgpaint(pmnotxor,current.X,current.Y); current.x:=x; current.y:=y; if SSLeft in Shift then imgpaint(pmnotxor,current.x,current.y); end; procedure TForm1.imgpaint(mode:TPenMode;x,y:Integer); begin PaintBox.canvas.Pen.Mode:=mode; // Wieder Image.Canvas o.ä. PaintBox.Canvas.Rectangle(moused.x,moused.y,x,y); end; |
Re: Canvas Rectangle mit MouseMove, MouseDown und MouseUp
Und was macht ihr beiden, wenn Nils keinen einfarbigen Hintergund hat :wink: ?
|
Re: Canvas Rectangle mit MouseMove, MouseDown und MouseUp
Zitat:
|
Re: Canvas Rectangle mit MouseMove, MouseDown und MouseUp
Ja, Falschfarbenbilder sind was Schönes :wink: .
|
Re: Canvas Rectangle mit MouseMove, MouseDown und MouseUp
Das Viereck soll innen Transparent sein.
|
Re: Canvas Rectangle mit MouseMove, MouseDown und MouseUp
Zitat:
Man kann statt pmnotxor noch pmnot und unterschiedlichen Farben probieren. Aber wenns wirklich eine bestimmte Farbe sein soll, dann gehts nur mit Neuzeichnen. Zitat:
|
Re: Canvas Rectangle mit MouseMove, MouseDown und MouseUp
"Wir beiden" lassen das einfach so und machen dann nur noch mal beim OnMouseUp
Delphi-Quellcode:
Fertig ist die Wurst.
imgpaint(pmcopy,current.x,current.y);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:24 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