Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Anfängerfrage: Unterschiedliche Koordinaten von TForm und Canvas Objekt (https://www.delphipraxis.net/214407-anfaengerfrage-unterschiedliche-koordinaten-von-tform-und-canvas-objekt.html)

Bemi 6. Jan 2024 17:56

Anfängerfrage: Unterschiedliche Koordinaten von TForm und Canvas Objekt
 
Hallo, ich muss zugeben, dass ich mich wegen meiner Pille-Palle Fragen immer ein bisschen schäme...

Um ein paar Dinge zu lernen, habe ich einfach ein bisschen herumgespielt. Ich möchte an eine ganz bestimmte Stelle in einem Desktopfenster eine Grafik anzeigen.
Da ich die Koordinaten nicht weiß, habe ich an diese Stelle als Platzhalter ein Shape im Designer hinzugefügt und die Koordinaten aus dem Objektinspektor gezogen.

Nun zum Problem: ich habe eine Form1 (TForm) mit den Dimensionen 1000 x 800. Das sind mutmaßlich die Pixel x, y im erzeugten "Fenster".
In diesem Fenster habe ich ein Shape (TShape). Dieses habe ich laut Objektinspektor an der Pos. Height: 261, Left: 369, Top: 170 und Width: 261.

Damit mein Canvas.Rectangle das Shape fast ausfüllt, muss ich aber ganz andere Koordinaten angeben. Hier z.B. x1 := 446; y1 := 207; x2 := 751; y2 := 513;.


x1 := 446; y1 := 207; x2 := 751; y2 := 513;
R := Rect(x1, y1, x2, y2);
Canvas.Rectangle(R);

P.P.S......

Wenn ich die Positionsdaten des TShape nehme, ist das Rectangle aber ganz wo anders! Warum dass denn? Ist der Koordinatenursprung jedes Objektes in der TForm nicht immer oben links?

Ich musste händisch solange die Werte ändern, bis es zufällig passte und das Rectangle im TShape landete.


Danke für eure Geduld und Nachsicht...


Michael

hoika 6. Jan 2024 18:14

AW: Anfängerfrage: Unterschiedliche Koordinaten von TForm und Canvas Objekt
 
Hallo,
ScreenToClient, ClientToScreen ....

Einfach mal belesen ...

Bemi 6. Jan 2024 19:10

AW: Anfängerfrage: Unterschiedliche Koordinaten von TForm und Canvas Objekt
 
@hoika, danke.

Das löst mein Problem aber nicht direkt. Ich brauche die Koordinaten für meine Grafik (Canvas.Rectangle) zur Designzeit, nicht zur Laufzeit. Das Shape nehme ich nur, damit ich Anhaltspunkte habe, wo ich (x,y) im TForm bin und dann kommt es, wenn ich die Position habe wieder raus.

Aber die Daten des Shape aus dem Objektinspektor taugen nicht für das Rectangle. Diese stimmen absolut nicht mit der erwünschten Position des Rectangle überein.

jaenicke 6. Jan 2024 23:30

AW: Anfängerfrage: Unterschiedliche Koordinaten von TForm und Canvas Objekt
 
Da wäre es am einfachsten, wenn du dein Formular einmal zeigen könntest.

Eine Möglichkeit wäre, dass du nicht direkt auf dem Formular bist, sondern eine andere Komponente dazwischen ist, auf der du bist. Wie man das dann umrechnet, hat hoika ja schon geschrieben.

Du zeichnest auf das Canvas des Formulars? Das musst du dann im OnPaint machen. Ansonsten ist deine Zeichenausgabe beim nächsten Neuzeichnen weg.

Warum verwendest du nicht einfach eine TPaintBox oder ein TImage und packst die an die gewünschte Stelle?

Bemi 6. Jan 2024 23:45

AW: Anfängerfrage: Unterschiedliche Koordinaten von TForm und Canvas Objekt
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo nochmal,

stellt euch einfach ein Blatt Papier vor, auf das so ziemlich genau in die Mitte ein Bild hin kommen soll. Ich lege also irgendwas als Beispiel auf das Blatt Papier und schiebe es so lange hin und her, bis es optisch passt. Dann nehme ich ein Lineal und lese die cm und mm ab... Sowas geht ja nicht am PC.


Damit ich meine Koordinaten für z.B. ein Canvas.Rectangular(x1, y1, x2, y2) bekomme,
hatte ich im Designer auf ein TForm, ein TShape auf die (für mich) passende Stelle gelegt und im Objektinspektor die Positionsdaten gelesen.

Diese hatte ich dann als Grundlage für die Position meines Canvas Objektes genommen. Das Shape wird nur für die Position genommen und kommt sofort wieder weg!


Nur lag dieses Canvas Objekt an einer ganz anderen Stelle als das Shape!

Mir geht es nur um die Frage, warum die Position beim Canvas Objekt ganz wo anders ist. Die Koordinaten passen nicht. In ein und derselben TForm!


Der Code im angehängten Bild ist etwa so:

Canvas.Brush.Color := clYellow;
Canvas.Brush.Style := bsSolid;

// Set the border color
Canvas.Pen.Color := clBlue;
Canvas.Pen.Width := 3;
Canvas.Pen.Style := psSolid;
x1 := 369; y1 := 170; x2 := 630; y2 := 431; // x2 := left + width, y2 := top + height (shape vom Objektinspektor)

R := Rect(x1, y1, x2, y2);
Canvas.Rectangle(R);


// 2 Linien durchkreuzen das Rechteck/Quadrat

Canvas.MoveTo(x1, y1);
Canvas.LineTo(x2, y2);

Canvas.MoveTo(x1, y2);
Canvas.LineTo(x2, y1);

Im Anhang simd zwei Screenshots: der erste zeigt, wie es wird, wenn ich die Koordinaten vom Platzhalter "Shape" nehme.
Im zweiten, wenn ich es selber herausfinde, und mich mühsam annähere. Genauso sollte es ja nicht sein! Nix RAD. Das ist wie KC Basic vor 35 Jahren.

peterbelow 7. Jan 2024 12:23

AW: Anfängerfrage: Unterschiedliche Koordinaten von TForm und Canvas Objekt
 
Zitat:

Zitat von Bemi (Beitrag 1531573)
Hallo nochmal,

Nix RAD. Das ist wie KC Basic vor 35 Jahren.

Das liegt nur daran, dass Du die Sache völlig falsch angehst. Plaziere anstelle des TShapes eine TPaintbox auf das form und zeichne dann ausschließlich im Handler für den OnPaint-Event der Paintbox, auf den Canvas der Paintbox, nicht dem des Forms. Die Koordinaten sind dann relativ zur oberen linken Ecke der Paintbox, völlig unabhängig von der Position der Paintbox auf dem Form. Du brauchst also nicht irgendwelche Koordinaten aus dem Objektinspektor umzurechnen, da mußt Du nur die Paintbox wie gewünscht plazieren und die Größe anpassen wie nötig.

In der VCL ist die Position eines Controls (alle Abkömmlinge von TControl) relativ zur client area des Parents des Controls; d.h. der Punkt (0,0) für Left und Top des Controls ist die linke obere Ecke der client area des Parents und nicht Left und Top des Parents!

jaenicke 7. Jan 2024 12:38

AW: Anfängerfrage: Unterschiedliche Koordinaten von TForm und Canvas Objekt
 
Kann es sein, dass du die Bildschirmskalierung auf einem anderen Wert als 100% hast? Das kann dabei auch noch eine Rolle spielen. Aber peterbelow hat ja die Alternative TPaintBox noch einmal genauer erklärt. Das ist ohnehin sinnvoller.

Bemi 7. Jan 2024 12:41

AW: Anfängerfrage: Unterschiedliche Koordinaten von TForm und Canvas Objekt
 
Vielen Dank für die Hinweise. Ich muss es erstmal verinnerlichen. Und ausprobieren.

Danke. Thema kann geschlossen werden.



P.S. Danke jaenicke, das war's. Die Skalierung war auch auf 120% wegen meiner Augen. Das Alter...


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