Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Abgeschnitten Formulare (https://www.delphipraxis.net/210178-abgeschnitten-formulare.html)

creehawk 14. Mär 2022 10:28

Abgeschnitten Formulare
 
Moin Moin.

Ich weiß nicht so recht ob ich mit der Frage in der richtigen Abteilung bin, Multimedia vielleicht....


VCL Anwendung, in der FormCreate

Delphi-Quellcode:
 
  MainForm.Width := 1680;
  MainForm.Height := 855;
  MainForm.Left := (ABS(Screen.Width - MainForm.Width) div 2);
  MainForm.top := (ABS(Screen.Height - MainForm.Height) div 2);
Es wird die Formulargröße definiert und dient dann der Positionierung auf dem Monitor. Die Property des Formulars Position steht auf poDefault, BorderStyle is bsSingle. Klappt anstandslos.

Aber auf einigen wenigen unerer Monitore (alle zumindest Full-HD 1920*1024) werden so um die 20 Pixel unten abgschnitten, wobei die Form hübsch mittig sitzt.

Was kann das sein? Die Treiber sind aktuell bei den fraglichen Geräten.

creehawk

Gehe ich über ClientHeight/Width ist das Problem auch da....

Delphi.Narium 14. Mär 2022 10:38

AW: Abgeschnitten Formulare
 
Welchen Wert hat in diesen Fällen denn Screen.Height?

Der schöne Günther 14. Mär 2022 10:42

AW: Abgeschnitten Formulare
 
Ich kann mich an nichts genaues mehr erinnern, aber ich habe solche Sachen aus dem
Delphi-Quellcode:
OnFormCreate
-Event üblicherweise so verschoben dass sie beim ersten Aufruf von
Delphi-Quellcode:
OnActivate
ausgeführt werden.

Vielleicht hilft es ja...

Uwe Raabe 14. Mär 2022 11:07

AW: Abgeschnitten Formulare
 
Wäre ein
Delphi-Quellcode:
Position = psScreenCenter
nicht zielführender?

KodeZwerg 14. Mär 2022 11:58

AW: Abgeschnitten Formulare
 
Zitat:

Zitat von creehawk (Beitrag 1503265)
Moin Moin.

Ich weiß nicht so recht ob ich mit der Frage in der richtigen Abteilung bin, Multimedia vielleicht....


VCL Anwendung, in der FormCreate

Delphi-Quellcode:
 
  MainForm.Width := 1680;
  MainForm.Height := 855;
  MainForm.Left := (ABS(Screen.Width - MainForm.Width) div 2);
  MainForm.top := (ABS(Screen.Height - MainForm.Height) div 2);
Es wird die Formulargröße definiert und dient dann der Positionierung auf dem Monitor. Die Property des Formulars Position steht auf poDefault, BorderStyle is bsSingle. Klappt anstandslos.

Aber auf einigen wenigen unerer Monitore (alle zumindest Full-HD 1920*1024) werden so um die 20 Pixel unten abgschnitten, wobei die Form hübsch mittig sitzt.

Was kann das sein? Die Treiber sind aktuell bei den fraglichen Geräten.

creehawk

Gehe ich über ClientHeight/Width ist das Problem auch da....

Lass Dir doch mal zur Laufzeit die Größe ausgeben. Ich vermute vielleicht ein kleines Skaling Problem.

creehawk 14. Mär 2022 14:04

AW: Abgeschnitten Formulare
 
Vielen Dank für die Vorschläge!

Der erste Preis geht an @Der schöne Günther : den obigen Codeschnipsel in OnActivate verschoben. Das war's.:lol:

Die Ausgabe der Formluarabmessungen zu verschiedenen Zeitpunkten gab übrigens immer das zurück was erwartet wurde.

Besten Dank an alle!

creehawk

haentschman 14. Mär 2022 15:45

AW: Abgeschnitten Formulare
 
Zitat:

den obigen Codeschnipsel in OnActivate verschoben. Das war's
...nicht ganz. OnActivate wird jedesmal aufgerufen, wenn das Formular den Focus erhällt. :wink: Wenn das nicht gewünscht ist, dann OnShow. :zwinker:

Delphi.Narium 14. Mär 2022 16:08

AW: Abgeschnitten Formulare
 
Zitat:

Zitat von haentschman (Beitrag 1503285)
Zitat:

den obigen Codeschnipsel in OnActivate verschoben. Das war's
...nicht ganz. OnActivate wird jedesmal aufgerufen, wenn das Formular den Focus erhällt. :wink: Wenn das nicht gewünscht ist, dann OnShow. :zwinker:

Dazu schrieb
Zitat:

Zitat von Der schöne Günther
Ich kann mich an nichts genaues mehr erinnern, aber ich habe solche Sachen aus dem OnFormCreate -Event üblicherweise so verschoben dass sie beim ersten Aufruf von OnActivate ausgeführt werden.

Man beachte dazu des kleine Wort ersten vor dem Aufruf.
Da braucht man dann 'nen Schalter, der beim ersten Aufruf entsprechend gesetzt wird, so dass die Routine nachher nicht mehr aufgerufen wird. Dabei ist es dann egal, ob sie nach dem ersten Aufruf beim OnActivate oder beim OnShow nicht mehr aufgerufen wird ;-)
Und das hat den Vorteil, dass das Fenster nach dem ersten Aufruf nicht mehr an dieser Stelle neu positioniert wird, wenn es zur Progammlaufzeit mal an 'ne andere Stelle verschoben wurde.

Enthält das Ereignis OnActivate nur die Logik zur Positionierung, kann man statt 'nen Schalter zu benutzen auch einfach die Ereigniszuweisung entfernen
Delphi-Quellcode:
OnActivate := Nil;
;-)


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