Bonjour,

Je m'étonne que cette question ne soit pas pas plus souvent abordée, ce qui me laisse à penser que je suis peut-être passé à côté de quelque chose de très simple (mais je n'ai pas l'impression...)

J'écris une application qui doit malheureusement tourner sur des machines dotées d'écrans de résolutions assez différentes... Alors je sèche un peu sur les moyens d'adapter les forms à celles-ci. J'ai trouvé deux discussions mais qui finissent en queue de poisson... donc finalement je suis arrivé à bricoler ceci, qui marche pas mal:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
 
void __fastcall TIdentification::FormCreate(TObject *Sender)
{
//Caractéristiques de l'Ecran de référence avec lequel a été conçue la fiche
int EcranReferLargeur=1024;
int EcranReferHauteur=664;
 
//Récupération des caractéristiques de l'écran sur lequel tourne l'application
//Nota: en l'espèce, 1920x981
int EcranActuelLargeur=Screen->Width;
int EcranActuelHauteur=Screen->Height;
 
//Détermination des nouvelles caractéristiques Hauteur/Largeur de la Fiche
int NelleHauteur=Identification->Height*EcranActuelHauteur/EcranReferHauteur;
int NelleLargeur=Identification->Width*EcranActuelLargeur/EcranReferLargeur;
//290: Nombre magique empirique (valable uniquement pour 1920x981) sinon la largeur est trop grande !!!
NelleLargeur=NelleLargeur-290;
 
//Centrage Fiche
Identification->Left=(EcranActuelHauteur-NelleHauteur)/2;
Identification->Top=(EcranActuelLargeur-NelleLargeur)/2;
 
//Application des nouvelles caractéristiques Hauteur/Largeur de la Fiche
Identification->Width=NelleLargeur;
Identification->Height=NelleHauteur;
 
//Détermination du facteur d'agrandissement
int FacteurAgr=((EcranActuelLargeur*EcranActuelHauteur)-(EcranReferLargeur*EcranReferHauteur))*100/(EcranReferLargeur*EcranReferHauteur);
 
//29: Encore un nombre magique empirique... En l'espèce pour ramener FacteurAgr de 177 à 150 sinon l'intérieur du form est trop grand par rapport au Form !
int m=FacteurAgr-29;
int d=100;
Identification->ScaleBy(m,d);
Identification->Realign();
}
Le problème, c'est l'insertion de nombres magiques sortis de nulle part, que j'ai déterminés empiriquement et qui bien sûr ne fonctionneront que sur l'écran de test... Quelqu'un peut me dire pourquoi je m'y prends visiblement de travers ? Ou trouver la formule de calcul pour ces "nombres magiques" ? Merci d'avance !