AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Anfängerfrage: Unterschiedliche Koordinaten von TForm und Canvas Objekt
Thema durchsuchen
Ansicht
Themen-Optionen

Anfängerfrage: Unterschiedliche Koordinaten von TForm und Canvas Objekt

Ein Thema von Bemi · begonnen am 6. Jan 2024 · letzter Beitrag vom 7. Jan 2024
Antwort Antwort
Bemi

Registriert seit: 17. Dez 2022
Ort: Eckental
13 Beiträge
 
Delphi 11 Alexandria
 
#1

Anfängerfrage: Unterschiedliche Koordinaten von TForm und Canvas Objekt

  Alt 6. Jan 2024, 17:56
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
Michael

Geändert von Bemi ( 6. Jan 2024 um 23:53 Uhr) Grund: unerklärbar
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#2

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

  Alt 6. Jan 2024, 18:14
Hallo,
ScreenToClient, ClientToScreen ....

Einfach mal belesen ...
Heiko
  Mit Zitat antworten Zitat
Bemi

Registriert seit: 17. Dez 2022
Ort: Eckental
13 Beiträge
 
Delphi 11 Alexandria
 
#3

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

  Alt 6. Jan 2024, 19:10
@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.
Michael
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.646 Beiträge
 
Delphi 11 Alexandria
 
#4

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

  Alt 6. Jan 2024, 23:30
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?
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Bemi

Registriert seit: 17. Dez 2022
Ort: Eckental
13 Beiträge
 
Delphi 11 Alexandria
 
#5

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

  Alt 6. Jan 2024, 23:45
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.
Miniaturansicht angehängter Grafiken
das-gelbe-ist-das-rectangle.jpg   so-soll-es-werden.jpg  
Michael

Geändert von Bemi ( 7. Jan 2024 um 09:22 Uhr) Grund: unerklärlich
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
704 Beiträge
 
Delphi 12 Athens
 
#6

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

  Alt 7. Jan 2024, 12:23
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!
Peter Below
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.646 Beiträge
 
Delphi 11 Alexandria
 
#7

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

  Alt 7. Jan 2024, 12:38
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.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Bemi

Registriert seit: 17. Dez 2022
Ort: Eckental
13 Beiträge
 
Delphi 11 Alexandria
 
#8

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

  Alt 7. Jan 2024, 12:41
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...
Michael

Geändert von Bemi ( 7. Jan 2024 um 13:14 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:19 Uhr.
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