Bonjour
Quel est le meilleur moyen qui permet d’adapter les tailles de toutes les fiche par rapport à l’écran
C’est à dire le logiciel prend la même taille qu’un écran 13*pouce ou 21
Bonjour
Quel est le meilleur moyen qui permet d’adapter les tailles de toutes les fiche par rapport à l’écran
C’est à dire le logiciel prend la même taille qu’un écran 13*pouce ou 21
En fait, tu parles de concevoir une application qui est indépendante du DPI
Que l'écran 13" ou 21" ce n'est qu'un aspect, il manque la notion de résolution et le nombre de pixel, les deux écrans peuvent être à 72 DPI, ton application aura ainsi la même taille sur le deux, puisque physiquement les pixels sont de la même taille.
Ce qui est change c'est que selon l'écran, tu auras une résolution différente, entre 72 et 96 DPI la plupart du temps, sauf sur les écrans 4K qui seraient plutôt en 240 DPI
Tu as plusieurs méthodes, laisser l'OS gérer pour toi le HIGH DPI et le Zoom de 100 à 150% voire 200% pour un Windows récent.
Utiliser la méthode ScaleBy pour zoomer l'application, cela ne modifie que la taille des composants mais pas les images, en VCL en tout cas.
Maitrisez-vous Anchors, Align ou la propriété Scaled ?
En FMX, profiter du dessin vectoriel pour agrandir aussi bien composants que image, cela demande un certain travail.
Avez-vous fait une recherche Google "Delphi Taille des fiches par rapport à l’écran site:developpez.net" ?
Vous auriez déjà eu très vite :
- l'affichage de mes fenetre par rapport à la résolution de l'ecran
- Ajustement des composants d'une forme selon la résolution de l'écran
...
Tellement de fois répété !
Le support du High DPI est l'une des nouveautés de l'IDE Delphi 11 que l'IDE soit lui même non pas zoom par Windows pour compenser la résolution mais gérer par l'application pour aspect visuel plus fin.
Sur un Delphi sans support High DPI
Il vous faut donc développer et concevoir votre application pour quelle puisse tenir dans la résolution et le dpi de l'écran 13" où un pixel logique = pixel physique, car sinon cela sera peu utilisable.
C'est sur l'écran 21" avec un pixel logique = plusieurs pixel physique, et plusieurs mécanisme entre le Scaled\ScaleBy, votre application sera dilaté en terme de pixel pour occuper à l'écran la même surface (soit 13" pouce au maximum, donc n'oubliez pas aussi de gérer le plein écran aussi)
Sur un Delphi avec support High DPI, lisez la documentation High-DPI on Windows 10 avec une gestion des vos images via TImageCollection dont on a parlé récemment sur le forum.
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !![]()
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !
L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs
après recherche et suivi des liens partagé par vous j'ai trouvé ici ce code:
hélas, je ne sais pas ou le placer ! quelqu'un pourra me guider et surtout m'illustrer par un exemple ?
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 procedure ScaleForm (F: TForm; ScreenWidth, ScreenHeight: LongInt) ; begin F.Scaled := True; F.AutoScroll := False; F.Position := poScreenCenter; // F.Font.Name := 'Arial'; if (Screen.Width <> ScreenWidth) then begin F.Height := LongInt(F.Height) * LongInt(Screen.Height) div ScreenHeight; F.Width := LongInt(F.Width) * LongInt(Screen.Width) div ScreenWidth; F.ScaleBy(Screen.Width,ScreenWidth) ; end; end;
dois je mettre le code dans un évènement OnShow par exemple ? sachant que ça génère une exception
Bonjour,
dans le OnCreate de la forme
Cordialement,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 procedure TForm3.FormCreate(Sender: TObject); begin ScaleForm(Form3, 800, 600); end;
@+
Merci pour votre réponse
Toutefois pour quoi avez vous utilisé les valeurs 800 et 600 ?
Si j’ai un écran 13*pouces et un autre 21 pouces, comment dois-je gérer ça ?
j'ai choisi ces valeurs arbitrairement pour illustrer l'utilisation de la procedure
mais je n'ai pas testé le code et je ne suis pas certain qu'il réponde à tes attentes !
je te renvois sur le message de ShaiLeTroll qui explique bien ce qu'il faut prendre en compte:
Cordialement,
@+
la réponse de ShaiLeTroll n'est toujours pas claire !
je veux un exemple illustratif, genre la procédure doit prendre en paramètre :
au lieu de 600 et 800
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 ScreenWidth := Fprinc.Width; ScreenHeight := Fprinc.Height;
normalement ça devrait marché ainsi !
C'est le besoin qui ne l'est pas vraiment. Qu'est-ce qui ne va pas à laisser l'application se dimensionner automatiquement en fonction du DPI ?
La fonction que tu proposes, c'est la comparaison entre le moniteur de l'utilisateur et celui utilisé pour le développement. Forcément qu'il faudra stocker en dur la résolution de ton écran.
Bon,
pour adapter un simple changement de résolution, taille écran avec les mêmes dpi
j'opterai pour quelque chose comme ça:
Hypothèse:"Dison que j'ai créé un programme sur mon PC avec une résolution d'écran de 1280 en largeur
et je veux l'exécuter sur un PC avec un écran en 800 de largeur."
et pour revenir
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 procedure ScaleFormEx(F: TForm; CurrentWidth, NewWidth: Integer) ; var R: Real; begin F.Scaled := False; F.AutoScroll := True; R := NewWidth / CurrentWidth; F.ScaleBy(NewWidth, CurrentWidth); F.Width := Round(R * F.Width); F.Height := Round(R * F.Height); F.Position := poScreenCenter; F.Scaled := True; F.AutoScroll := False; end; procedure TForm3.FormCreate(Sender: TObject); begin ScaleFormEx(Form3, 1280, 800); end;pour le reste (dpi) je ne suis pas en mesure de faire des testes par manque de matériel adapté
Code : Sélectionner tout - Visualiser dans une fenêtre à part ScaleFormEx(Form3, 800, 1280);
et comme mes dev sont perso je n'ai pas encore été confronté à ceci.
j'espère que ça t'aidera quand même un peu.
Cordialement,
@+
étant donné que le PC du client est de même résolution que le mien l'affichage dans ce cas l'affichage doit rester le même 'grand pour une meilleure visibilité par rapport à l'écran) n'est ce pas ?
il doit y avoir une condition de test, genre si cet écran est petit donc exécuter la procédure sur l'évènement OnCreate ou OnShow
Partager