Problem bei Rechteck zeichnen (mit PaintBox)
Hallo,
ich bin Neuling in diesem Forum und Schüler und Anfänger in Sachen Delphi... Wir müssen für die Schule ein Programm schreiben! Meine Idee war, ein Rechteck zu zeichnen, wenn ich auf den Button2 klicke! Das Problem: Wenn ich das Rechteck vergrößere, ist alles normal! Verkleinere ich es mit gedrückter Mausdaste, dann sieht man die ganzen anderen Rechtecke, welche durch MouseMove gezeichnet werden!!! Ist es möglich, das ich das Rechteck vergrößern und verkleinern kann (mit linke maustaste gedrückt) und dass es ein Rechteck bleibt und nicht hunderte übereinander... Hier mal der Code:
Code:
Würde mich über eure Hilfe freuen! Als Anfänger komme ich mit diesem Problem nich mehr klar!
var
Form1: TForm1; Bild: TBitmap; Zeichenfarbe: TColor; X1, Y1, AMax, AMin: Integer; S, R, b: Boolean; implementation {$R *.dfm} procedure TForm1.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if S then begin if ssLeft in Shift then PaintBox1.Canvas.MoveTo(X,Y); if ssLeft in Shift then PaintBox1.Canvas.LineTo(X,Y); end; if R then begin if ssLeft in Shift then PaintBox1.Canvas.MoveTo(X,Y); b := true; X1 := X; Y1 := Y; end; end; procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if S then begin if ssLeft in Shift then PaintBox1.Canvas.LineTo(X,Y); end; if R then begin if b then begin if ssLeft in Shift then PaintBox1.Canvas.MoveTo(X,Y); PaintBox1.Canvas.Rectangle(X1,Y1,X,Y); end; end; end; procedure TForm1.Button7Click(Sender: TObject); begin S := true; R := false; end; procedure TForm1.Button2Click(Sender: TObject); begin R := true; S := false; end; procedure TForm1.PaintBox1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if R then begin if ssLeft in Shift then PaintBox1.Canvas.MoveTo(X,Y); PaintBox1.Canvas.Rectangle(X1,Y1,X,Y); b := false; end; end; end. Mfg Approxinately007 |
AW: Problem bei Rechteck zeichnen (mit PaintBox)
Hallo,
Du musst Dir die Eckpunkte des größsten Rechtecks merken und das Rechteck löschen bevor du das kleine Rechteck zeichnest. Grüße Klaus |
AW: Problem bei Rechteck zeichnen (mit PaintBox)
ok, erst mal danke für deine schnelle Antwort!
...klinkt logisch! Wie lösche ich am besten Rechtecke? mfg |
AW: Problem bei Rechteck zeichnen (mit PaintBox)
Zitat:
mit der Hintergrundfarbe übermalen. Grüße Klaus |
AW: Problem bei Rechteck zeichnen (mit PaintBox)
Irgendwie läuft die Benutzung der Paintbox in der letzten Zeit etwas aus dem Ruder.....
Die Paintbox soll im OnPaint gemalt werden, ansonsten ist das Ergebnis z.B. nach dem in den Vordergrund bringen eine anderen Fensters völlig undefiniert. Auch ein Repaint schadet bei der Paintbox mehr als es nützt, hier ist ein Invalidate angesagt, dann gibt es auch nichts zu löschen, es wird genau das gemalt was gemalt werden soll. |
AW: Problem bei Rechteck zeichnen (mit PaintBox)
Zitat:
Tut mir leid, aber ich versteh generell nich ganz wie ich das hinbekommen soll! Könntest du mir vielleicht den Code vorschreiben, damit ich einen Anhaltspunkt bekomme... Gruß approxinately |
AW: Problem bei Rechteck zeichnen (mit PaintBox)
Hallo,
wie Thomas bereits geschrieben hatte, ist es besser in der Paint Methode (onPaint Ereignis) zu malen und mit invalidate den Paintbox Inhalt zu löschen. Es wird dann automatisch ein Neuzeichnen angestossen.
Delphi-Quellcode:
Grüße
type
TForm1 = class(TForm) PaintBox1: TPaintBox; procedure PaintBox1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure PaintBox1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure PaintBox1Paint(Sender: TObject); private startX, startY, endX, endY: Integer; { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin startX := x; startY := y; end; procedure TForm1.PaintBox1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin endX := x; endY := y; invalidate; end; procedure TForm1.PaintBox1Paint(Sender: TObject); begin with (sender as TPaintbox) do begin Canvas.MoveTo(startx,startY); Canvas.Rectangle(endX,endY,startX,startY); end; end; Klaus |
AW: Problem bei Rechteck zeichnen (mit PaintBox)
alles klar Dankeschön!
Ich dachte eig. ich könnte dass schaffen, mit mousemove, dass man sieht, wie man das rechteck zeichnet, bevor man die maustaste loslässt! aber das ist mir jetz auch zu viel und zu kompliziert!!! trotzdem danke für eure hilfe... n guden rutsch an alle ... |
AW: Problem bei Rechteck zeichnen (mit PaintBox)
.. ist nicht kompliziert:
Delphi-Quellcode:
Grüße und auch einen guten Rutsch
procedure TForm1.PaintBox1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); begin endX := x; endY := y; invalidate; end; Klaus |
AW: Problem bei Rechteck zeichnen (mit PaintBox)
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:06 Uhr. |
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