![]() |
Canvas Bezugspunkt ändern
Ist es möglich bei Zeichnungen auf der Form mit Hilfe von canvas den Bezugspunkt(0,0)zu ändern?
Das würde mir die Arbeit an meinem Zeichenprogramm erheblich erleichtern(weniger Quelltext). |
Re: Canvas Bezugspunkt ändern
Was meinst du mit Bezugspunkt? :gruebel:
|
Re: Canvas Bezugspunkt ändern
Aus dem Kopf (also ungetestet):
Delphi-Quellcode:
Weiß aber nicht mehr genau, wie du bei X und Y die Vorzeichen setzen musst.
SetWindowOrgEx(Canvas.Handle, x, y, nil);
|
Re: Canvas Bezugspunkt ändern
Ich meine den Punkt,nach dem sich canvas beim Zeichnen richtet.
(die linke obere Ecke) zB beim Zeichnen eines Rechteckes
Delphi-Quellcode:
Ich möchte jetzt den "Bezugspunkt" auf (30,30) verlagern , sodass die folgende Schreibweise genau das selbe Rechteck darstellt.
Form1.canvas.rectangle(30,30,100,100)
Delphi-Quellcode:
@Flocke: Die Methode die du mir gegeben hast setzt den Bezugspunkt nicht auf die Form, sondern auf einen Festen Punkt auf dem "Monitor". So kommt es dazu, dass die Zeichnungen sich verschieben, wenn die Form verschoben wird.
Form1.canvas.rectangle(0,0,70,70)
|
Re: Canvas Bezugspunkt ändern
Zitat:
Gruss Reinhard |
Re: Canvas Bezugspunkt ändern
Es ist zwar das Gegenstück (die Vorzeichen sind entgegengesetzt), aber mein Problem ist noch nicht gelöst.
Alle Zeichnungen orientieren sich immer noch nicht an der Form, sondern an der Position am "Bildschirm". |
Re: Canvas Bezugspunkt ändern
Ist zwar nciht genau was du willst aber so gehts ja auch:
deklarier doch zwei konstanten...
Delphi-Quellcode:
CONST x=30 y=30 Form1.canvas.rectangle(0+x,0+y,70+x,70+y) |
Re: Canvas Bezugspunkt ändern
ja so hab ich es auch schon probiert , aber auf dauer ist mir das einfach zu viel code.
Bei komplexen Algorithmen wird das ganz schön unübersichtlich. |
Re: Canvas Bezugspunkt ändern
Zitat:
Delphi-Quellcode:
Nachtrag: Siehe auch unter
var
pt: TPoint; begin OffsetWindowOrgEx(Canvas.Handle, DeltaX, DeltaY, pt); try // Zeichnen auf Canvas finally SetWindowOrgEx(Canvas.Handle, pt.X, pt.Y, nil); end; end; ![]() |
Re: Canvas Bezugspunkt ändern
Sonst könntest du ja auch erst alles auf ein Offscreen-Bitmap zeichnen und das dann an die Position (30|30) auf das Canvas kopieren.
|
Re: Canvas Bezugspunkt ändern
Ja ich glaub auch. Das ist bestimmt sinnvoller. Dann komm ich wenigstens nicht so schnell bei mehreren Objekten durcheinander.
Aber wie ist das möglich? |
Re: Canvas Bezugspunkt ändern
Zitat:
|
Re: Canvas Bezugspunkt ändern
Zitat:
|
Re: Canvas Bezugspunkt ändern
Zitat:
|
Re: Canvas Bezugspunkt ändern
Ich merke gerade erst, dass dein Beispiel sowieso etwas verquer ist :gruebel: . Nehmen wir mal an, ich will eine Linie ((30|30);(80|80)) zeichnen, also die Diagonale des Images. Dann muss ich doch wohl ein 80x80-Bitmap erstellen und dessen Rect(30, 30, 80, 80)-Ausschnitt auf das Image ((0|0)) kopieren.
|
Re: Canvas Bezugspunkt ändern
Hallo,
da bietet sich doch eine Hilfsprozedur an:
Delphi-Quellcode:
procedure PosRectangle(aCanvas: TCanvas;Left,Top,Width,Height: Integer);
begin aCanvas.Rectangle(Left,Top,Left+Width,Top+Height); end; procedure TForm1.Button1Click(Sender: TObject); begin PosRectangle(PaintBox1.Canvas,30,30,70,70); end; |
Re: Canvas Bezugspunkt ändern
Zitat:
|
Re: Canvas Bezugspunkt ändern
Hi,
den Bezugspunkt kannst du ändern mit[Movewindoworg(canvas.handle, 35, 35, nil)] oder auch ohne nil. mfg soncer |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:16 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