Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Form Left/Top Problem (https://www.delphipraxis.net/208140-form-left-top-problem.html)

lxo 17. Jun 2021 10:03

Form Left/Top Problem
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

kann mir einer erklären warum ein Form bei mir nicht an der richtigen Position geöffnet wird?
Wenn ich Left von 0 bis 1594 setze kein Problem.
Setze ich aber Left auf 1595 oder höher, landet das Form auf einmal ganz nach links und aus dem Screen heraus.

Delphi-Quellcode:
  var lForm: TForm65;
  Application.CreateForm( TForm65, lForm);
  lForm.Position := poDesigned;
  lForm.Left := StrToInt( Edit1.Text); // 0-1594 ok | ab 1595 falsch
  lForm.Top := StrToInt( Edit2.Text);
  lForm.Show;
Im Anhang ist ein Beispielprojekt + Video auf dem man das Problem nochmal genau sieht.

Mein Bildschirm hat die Auflösung
1920x1200

haentschman 17. Jun 2021 10:11

AW: Form Left/Top Problem
 
Moin...:P
Wie groß ist denn lForm.Width?
Was sagt der Debugger nach dem Setzen?

hoika 17. Jun 2021 10:45

AW: Form Left/Top Problem
 
Hallo,
was soll das poDesigned?

himitsu 17. Jun 2021 11:49

AW: Form Left/Top Problem
 
Zitat:

Zitat von hoika (Beitrag 1491183)
was soll das poDesigned?

Delphi lädt einen Teil der Auto-Pos im Create, aber einen Teil auch erst im OnShow ... und falls es z.B. beim Show ein poDefault wäre, dann würde Top/Left von Delphi überschrieben. roll:

Natürlich ist Delphi zu dämlich, um selbstständig bei Zuweisungen an Top/Left entsprechende das Position anzupassen. :angle2:

samso 17. Jun 2021 11:54

AW: Form Left/Top Problem
 
Probiere mal lForm.DefaultMonitor := dmDesktop;

lxo 17. Jun 2021 11:57

AW: Form Left/Top Problem
 
Wenn ich etwas anderes außer poDesigned nehme, macht Delphi erst Recht was es will damit :-D
Zitat:

poDesigned
Das Formular wird mit der während des Entwurfs festgelegten Größe und Position angezeigt.

pdDefault
Größe und Position des Formulars werden vom Betriebssystem festgelegt. Bei jedem Start der Anwendung wird das Formular ein wenig nach unten und nach rechts verschoben. Unabhängig von der aktuellen Bildschirmauflösung wird sein rechter Rand immer in der Nähe des rechten Bildschirmrandes und sein unterer Rand in der Nähe des unteren Bildschirmrandes angezeigt.

Das Betriebssystem unterstützt dies nur für überlappende Fenster. Für ein Popup- oder untergeordnetes Fenster (z. B. mit BorderStyle gleich bsDialog oder bsNone) wird das Fenster in der oberen linken Bildschirmecke positioniert.

poDefaultPosOnly
Das Formular wird mit der während des Entwurfs festgelegten Größe angezeigt, jedoch wird seine Position vom Betriebssystem bestimmt. Bei jedem Start der Anwendung wird das Formular ein wenig nach unten und nach rechts verschoben. Kann das Formular ohne Größenänderung nicht weiter verschoben werden, wird es am linken oberen Bildschirmrand platziert.

Das Betriebssystem unterstützt dies nur für überlappende Fenster. Für ein Popup- oder untergeordnetes Fenster (z. B. mit BorderStyle gleich bsDialog oder bsNone) wird das Fenster in der oberen linken Bildschirmecke positioniert.

poDefaultSizeOnly
Das Formular wird an der während des Entwurfs festgelegten Position angezeigt, jedoch wird seine Größe vom Betriebssystem bestimmt. Unabhängig von der aktuellen Bildschirmauflösung wird sein rechter Rand immer in der Nähe des rechten Bildschirmrandes und sein unterer Rand in der Nähe des unteren Bildschirmrandes angezeigt.

poScreenCenter
Das Formular behält die Größe bei, die es während des Entwurfs hatte, wird aber in der Mitte des Bildschirms angezeigt. In Anwendungen mit mehreren Monitoren kann das Formular von dieser Position komplett auf einen (in der Eigenschaft DefaultMonitor festgelegten) Monitor verschoben werden.

poDesktopCenter
Das Formular behält die Größe bei, die es während des Entwurfs hatte, wird aber in der Mitte des Bildschirms angezeigt. In Anwendungen mit mehreren Monitoren werden keine Anpassungen durchgeführt.

poMainFormCenter
Das Formular behält die Größe bei, die es während des Entwurfs hatte, wird aber in der Mitte des Hauptformulars der Anwendung angezeigt. In Anwendungen mit mehreren Monitoren werden keine Anpassungen durchgeführt. Diese Positionierung sollte nur für Sekundärformulare angewandt werden. Bei einem Hauptformular wird dasselbe Verhalten wie von poScreenCenter erzielt.

poOwnerFormCenter
Das Formular behält die Größe bei, die es während des Entwurfs hatte, wird aber in der Mitte des in der Eigenschaft Owner angegebenen Formulars angezeigt. Legt die Eigenschaft Owner kein Formular fest, wird mit dieser Positionierung dasselbe Verhalten wie von poMainFormCenter erzielt.


lxo 17. Jun 2021 11:59

AW: Form Left/Top Problem
 
Zitat:

Zitat von samso (Beitrag 1491188)
Probiere mal lForm.DefaultMonitor := dmDesktop;

:thumb: Das klappt, danke.


Zitat:

dmDesktop
Es wird nicht versucht, das Formular auf einem bestimmten Monitor anzuzeigen.

dmPrimary
Das Formular wird auf dem Monitor angezeigt, der in der Eigenschaft Monitors des globalen Bildschirmobjekts als erster Monitor aufgeführt ist.

dmMainForm
Das Formular wird auf demselben Monitor wie das Hauptformular der Anwendung angezeigt.

dmActiveForm
Das Formular wird auf demselben Monitor wie das aktive Formular angezeigt.


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