![]() |
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 |
AW: Anfängerfrage: Unterschiedliche Koordinaten von TForm und Canvas Objekt
Hallo,
ScreenToClient, ClientToScreen .... Einfach mal belesen ... |
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. |
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? |
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. |
AW: Anfängerfrage: Unterschiedliche Koordinaten von TForm und Canvas Objekt
Zitat:
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! |
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.
|
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