2013-07-26 4 views
2

Il y a quelques semaines, un utilisateur a signalé que l'interface graphique de mon programme était rétrécie. Aujourd'hui j'ai démarré mon portable en mode multi-moniteur et j'ai pu reproduire le problème: au démarrage de Windows, la taille du formulaire principal était de 325x243 pixels au lieu de 648x700.Forme shrink au démarrage

Je n'ai pas une seule ligne de code qui contrôle la largeur/hauteur du formulaire. La position est définie comme ceci: MainForm.Position:= poDefault. L'utilisateur ne peut pas redimensionner le formulaire (BorderStyle:= bsSingle).

Qu'est-ce qui pourrait causer une telle bizarrerie? C'est la deuxième fois que je démarre mon ordinateur portable avec des moniteurs supplémentaires attachés. La première fois tout allait bien. Cela pourrait-il être lié à cette configuration à plusieurs moniteurs?

Si le compilateur ne génère aucun code lié à la taille de la forme, alors il est comme un code injecté par programme externe dans mon programme pour changer sa taille. C'est plausible. Il existe des programmes qui permettent de contrôler la répartition des fenêtres sur plusieurs moniteurs. J'en ai installé un mais il ne fonctionne pas au démarrage de Windows.

+1

... et ce programme est appelé sous Windows. Lorsque vous avez ouvert la liste des valeurs 'MainForm.Position', vous avez vu trois valeurs par défaut différentes: la taille par défaut, la position par défaut et la taille et la position par défaut. Je ne peux que m'étonner de voir que tu n'as pas été curieux de savoir quelle est la différence entre eux. –

Répondre

3

La position est définie comme ceci: MainForm.Position: = poDefault

Et qui est la réponse.

http://docwiki.embarcadero.com/Libraries/XE4/en/Vcl.Forms.TForm.Position

La forme apparaît dans une position sur l'écran et avec une hauteur et une largeur déterminée par le système d'exploitation.

Cependant, il existe d'autres options comme

poDefaultPosOnly: Le formulaire affiche avec la taille vous l'avez créé au moment de la conception, mais le système d'exploitation choisit sa position sur l'écran

poScreenCenter: Le formulaire reste la taille que vous avez laissé au moment de la conception, mais est positionné au centre de l'écran.

Et beaucoup d'autres.

De plus, vous pouvez éviter de fixer le problème et ajouter une solution de contournement à la place: il suffit de définir la taille de forme fixe en utilisant http://docwiki.embarcadero.com/Libraries/XE4/en/Vcl.Forms.TForm.Constraints

+0

J'écrivais juste le code pour Constraints :) – Ampere

+0

Le programme a fonctionné pendant des années !!! Comme ça. Je ne comprends pas pourquoi l'OS a décidé de changer la largeur/hauteur de mon formulaire. – Ampere

+0

Pourquoi écrivez-vous le code, alors que vous pouvez simplement le définir dans DFM via Objects Inspector à la place? –