![]() |
Rechteck zeichnen
Hi,
mit folgendem Code kann man auf einer Form ein Quadrat zeichnen:
Delphi-Quellcode:
Meine Frage ist jetzt wie ich ein Rechteck zeichnen kann, bzw. was ich im Code umändern muss damit die gezeichnete Form nicht immer quadratisch ist?
procedure TForm1.FormCreate(Sender: TObject);
begin canvas.Pen.mode :=pmNotXor; canvas.pen.style:= psDot; //Gepunktete Linien canvas.pen.color:=clRed; end; procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin canvas.brush.style :=bsClear; //Für transparentes Quadrat if shift = [ssleft] then //Zeichnen mit linker Maustaste begin x1 := x; y1 := y; x2 := x; y2 := y; canvas.rectangle (x1,y1,x2,y2); end; if shift =[ssright] then //Quadrat löschen mit rechter Maustaste canvas.rectangle(x1,y1,x2,y2); end; procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if shift = [ssleft] then begin canvas.rectangle (x1,y1,x2,y2); x2 := x; y2 := y1+x-x1; //Quadrat durch X-Verschiebung der Maus canvas.rectangle (x1,y1,x2,y2); end end; Es soll so sein wie wenn man in Paint ein Rechteck zieht. MFG Lars Wiltfang |
Re: Rechteck zeichnen
Sollte gehen, setz vielleicht mal x2 und y2 anders als x1 und y1.
|
Re: Rechteck zeichnen
Zitat:
|
Re: Rechteck zeichnen
Zitat:
lösen z.b. so:
Delphi-Quellcode:
HTH Frank
x2 := x+50; y2 := y+50;
|
Re: Rechteck zeichnen
Kann mir nicht mal jemand sagen, wie ich den Code verändern muss damit das richtig klappt? Was soll das bringen 50 zu addieren?
|
Re: Rechteck zeichnen
Soche mal im Open Source Bereich nach "Mandelbrot". Da gibt's Anschaumaterial wie
man das macht. |
Re: Rechteck zeichnen
Zitat:
probiers doch einfach mal aus dann wirst du ja sehen was es bringt. |
Re: Rechteck zeichnen
Delphi-Quellcode:
Was glaubst du, was dieser Code macht? Wie wär's mal mit Hirn einschalten? :wall:
x2 := x; y2 := y1+x-x1; //Quadrat durch X-Verschiebung der Maus
|
Re: Rechteck zeichnen
Habs jetzt hinbekommen aber ich habe nochmal ne Frage: Ich habe bsps. das Recheckt: Rec:Trect deklariert, wie kann ich jetzt dieses Rechteck benutzen um zu zeichnen um später damit weiter zuporgrammieren?
Kann ich einfach sagen Image1.Canvas.Rec(p1, p2, p3, p4) oder wie macht man das? |
Re: Rechteck zeichnen
Du legst grad echt ein TD / Taktaky-Verhalten an den Tag :warn:
Schau Dir doch mal die Onlinehilfe zu TCanvas, TRect etc. an. Und wenn das nicht hilft und Du Google anschmeisst wirst Du sogar den einen oder anderen Thread hier in der DP zu diesen Schlagwörtern findern :roll: |
Re: Rechteck zeichnen
Ok, jetzt bin ich schon mal wieder ein Stück weiter aber es klappt nicht. Mein Code jetzt ist:
Delphi-Quellcode:
procedure TForm16.FormCreate(Sender: TObject);
begin image1.canvas.Pen.mode :=pmNotXor; image1.canvas.pen.style:= psDot; //Gepunktete Linien image1.canvas.pen.color:=clRed; end; procedure TForm16.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Image1.canvas.brush.style :=bsClear; //Für transparentes Quadrat if shift = [ssleft] then //Zeichnen mit linker Maustaste begin x1 := x; y1 := y; rec := Rect(x1, y1, x2, y2); Image1.Canvas.DrawFocusRect(Rec); end; if shift =[ssright] then //Quadrat löschen mit rechter Maustaste image1.canvas.rectangle(x1,y1,x2,y2); end; procedure TForm16.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if shift = [ssleft] then begin Image1.Canvas.DrawFocusRect(Rec); x2 := x; y2 := y; //Quadrat durch X-Verschiebung der Maus rec := Rect(x1, y1, x2, y2); Image1.Canvas.DrawFocusRect(Rec); end; end; Wenn ich jetzt aber ein Rechteck zeichnen will dann sehe ich nur Steifen im Bilder mehr nicht. |
Re: Rechteck zeichnen
Debug durch und schau Dir mal die Werte an, die gezeichnet werden.
|
Re: Rechteck zeichnen
vielleicht hilft dir diese Klasse von mir weiter...dort wird ein Rechteck "gezogen":
![]() HTH Frank |
Re: Rechteck zeichnen
HI,
was macht denn bitte DrawFocusRect?? Delphi-Hilfe Die Methode DrawFocusRect zeichnet ein Rechteck, wie es normalerweise fokussierte Objekte umgibt. Um ein Rechteck zu zeichnen, würde ich den Aufruf von .Rectangle(Rect) verwenden. !Achtung! .Rechtangle ist eine überladene Funktion, die 1. mit 4 Integern aufgerufen werden kann und 2. mit einem Rechteck aufgerufen werden kann. Da Windows nur mit 4 Integer-Punkten arbeiten kann, wird intern die .Rectangle (1) aufgerufen. Zu deinem Problem: Zitat:
Rect.Bottom, Rect.Left und Rect.Right gibts da. Dies kann man dann in der richtigen Reihenfolge eingeben. Bernhard |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:15 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