Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Canvas Bezugspunkt ändern (https://www.delphipraxis.net/88567-canvas-bezugspunkt-aendern.html)

Flo.Hoe 17. Mär 2007 10:17


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).

inherited 17. Mär 2007 10:20

Re: Canvas Bezugspunkt ändern
 
Was meinst du mit Bezugspunkt? :gruebel:

Flocke 17. Mär 2007 10:25

Re: Canvas Bezugspunkt ändern
 
Aus dem Kopf (also ungetestet):
Delphi-Quellcode:
SetWindowOrgEx(Canvas.Handle, x, y, nil);
Weiß aber nicht mehr genau, wie du bei X und Y die Vorzeichen setzen musst.

Flo.Hoe 17. Mär 2007 10:34

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:
Form1.canvas.rectangle(30,30,100,100)
Ich möchte jetzt den "Bezugspunkt" auf (30,30) verlagern , sodass die folgende Schreibweise genau das selbe Rechteck darstellt.
Delphi-Quellcode:
Form1.canvas.rectangle(0,0,70,70)
@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.

Reinhard Kern 17. Mär 2007 11:16

Re: Canvas Bezugspunkt ändern
 
Zitat:

Zitat von Flo.Hoe
Ich meine den Punkt,nach dem sich canvas beim Zeichnen richtet.
(die linke obere Ecke)
....
@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.

SetViewportOrgEx ist das entsprechende Gegenstück.

Gruss Reinhard

Flo.Hoe 17. Mär 2007 11:49

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".

herkulesamstart 17. Mär 2007 11:56

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)

Flo.Hoe 17. Mär 2007 12:08

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.

Flocke 17. Mär 2007 14:24

Re: Canvas Bezugspunkt ändern
 
Zitat:

Zitat von Flo.Hoe
@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.

Dann probiere die Varianten OffsetWindowOrgEx bzw. OffsetViewportOrgEx, die verschieben den Ursprung und setzen ihn nicht komplett neu. Außerdem solltest du diese Aktion später wieder rückgängig machen, also etwa so:
Delphi-Quellcode:
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;
Nachtrag: Siehe auch unter Coordinate Space and Transformation Functions, da finden sich alle API-Funktionen, die damit zu tun haben.

Cöster 17. Mär 2007 19:01

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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:48 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