jekifvb6
Messages postés156Date d'inscriptionlundi 13 novembre 2000StatutMembreDernière intervention18 septembre 2006
-
4 mai 2005 à 16:32
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 2015
-
5 mai 2005 à 02:45
Bonjour.
Merci à tous ceux qui postent des sources ou répondent sur le forum.
Je viens de développer une application en VB6 qui comporte, entre autre, :
- une form principale
Height = 9090
Width = 11940
Scalewidth = 11820
scaleheight = 8100
startup position = manual
window state = maximized
-une picture box dans cette form, plutôt ves le bas à droite avec les paramétres
Height = 12000
Width = 8000
scalewidth = 7935
scaleheight = 11940
left = 9480
top = 12000
Tous les scalemode sont en twip.
Voilà pour l'appli.
Je la fait tourner sur winXP, écran 17 pouces, résolution 1280*1024.
A ce stade l'ensemble était graphiquement homogéne.
Je transporte mon executable sur un autre poste: win 98 édition 2,
écran 15 pouces, résolution maximum 1024*768. Là, ma picturebox sort de
l'écran. Normal. La résolution n'est pas assez grande, je pense. Je met
l'écran 17 pouce sur cette machine, je pousse la résolutin à 1280*1024.
Et bien ma picturebox est encore coupée, elle dépasse, l'appli est
inutilisable. En changeant la taille en point par pouce (ppp) à 80% au
lieu de 100% j'arrive à recuperer mon application entière. Mais ce
n'est pas une solution envisageable à posteriori.
Je sens que je me gourre quelque part entre les notions de scalemode, à
savoir quelle est la meilleure unité à utiliser(twip, pixel, user) et
pourquoi mon appli n'est pas transportable.
Si quelqu'un peut m'éclairer sur ces notions ou bien ayant déjà résolu ce genre de pb.
Je ne pense pas être le seul à nécessiter de transporter mon applicatin
sur une autre machine à config légérement différente (autre os, autre
résolution, autre écran). Quelqu'un pouurrait-il me fournir une source
d'information pour ceux qui souhaitent que leur programme puisse
tourner à tous les coups.
Merci beaucoup, et d'avance.
A voir également:
Transport d'une application vers une config différente.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 5 mai 2005 à 02:45
Regarde aussi la fonction .ScaleX (et Y) qui permettent de calculer des valeurs entre deux systèmes de coordonnées (valable pour Form, PictureBox ou Printer)
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 5 mai 2005 à 02:16
Salut
(Je ne suis pas un expert en graphisme, alors n'hésitez pas à corriger si erreur)Forme principale : A quoi te sert de donner une largeur et hauteur à ta forme puisque en dernier, tu lui dit d'épouser la taille de l'écran avec le WindowState vbMaximized ? pas d'intérêt, Width et Height ne servent qu'en WindowState vbNormal
Les ScaleWidth et ScaleHeight représentent les tailles de la zone interne de l'objet.
Si tu définis des valeurs personelles, le ScaleMode repasse en Owner (défini par l'utilisateur) : c'est une bonne méthode pour personaliser son espace de travail.
Si tu passes en mode Twips, il te renverra la taille dispo dans la forme en twips. Avec Screen.TwipsPerPixelX (et Y), qui vaut 15 en général, tu connaitras la zone de travail interne de ta forme en pixel.
Les positions (Left, Top, Width et Height) des objets à l'intérieur d'une forme sont relative au bord haut-gauche de l'espace interne de cette forme (pas de l'écran), cette fameuse zone dont on retrouve les dimensions avec ScaleWidth et ScaleHeight (quand on n'y touche pas)
Quand tu charges une image dans une PictureBox, ce ScaleMode n'a pas d'influence sur l'aspect de l'image : il te permettra seulement de définir une matrice de coordination :
Fais l'essai : Charge une image dans une PictureBox et dans Picture1_MouseDown, tu mets : Debug.Print X, Y
Lance et clique sur un endroit précis de ton image : Il t'affichera l'emplacement en Twips
Si dans le Form_Load tu ajoutes Picture1.ScaleHeight = 700 (valeur au pif), que tu relances et reclique au même endroit, la valeur de Y aura changée. En fait, c'est la même, mais à ton échelle.
Sur un écran, ce qui compte, c'est la résolution de l'écran pour déterminer la zone d'affichage maximale que tu pourras utiliser : Dispo dans Screen.Width et .Height (en Twips) - à approfondir pour en exclure la barre des taches - voir multiples sources à ce sujet ici
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)