Visual basic 6.0

Lauranvanoers Messages postés 8 Date d'inscription mardi 22 mars 2005 Statut Membre Dernière intervention 3 mars 2012 - 25 mai 2009 à 22:16
Lauranvanoers Messages postés 8 Date d'inscription mardi 22 mars 2005 Statut Membre Dernière intervention 3 mars 2012 - 9 juin 2009 à 10:04
Chèrs experts,

J'ai developpé une programme éducative (WisSter) et j'use ca à l'école (professeur mathématique). Un petit problème existe avec ce logiciel (installé au Citrix-server de l'école):

Werkvenster.vraagtkst.Font.Size = Val(vraagtkstOr(2))   donne une erreur de temps en temps, seulement si j'use le programme à l'école; jamais à la maison. 

Dans cette partie de code, "Werkvenster" est un form, "vraagtkst" est un label et vraagtkstOr(2) est une "variant variable".
Si je donne Werkvenster.vraagtkst.Font.Size 10, ca change automatiquement en <gras>Werkvenster.vraagtkst.Font.Size 9,75  </gras>J'ai l'idée que c'est un probléme de "." ou "," avec le Citrix.
Après un "restart" le programme marche toujours sans faute!

Pouvez vous m'aider? Excusez s'il vous plait mon horrible "Francais-de-vacances".

Merci d'avance,

Lauran van Oers (Les Pays Bas)
[mailto:Lvanoers@hotmail.com Lvanoers@hotmail.com]

 

11 réponses

jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
25 mai 2009 à 22:37
Bonjour,

"Le citrix" n'a rien à voir ...

Un projet tout neuf composé d'uin Form et d'un Label
  Label1.FontSize = 10
  MsgBox Label1.FontSize ' affichera 9.75, car la taille 10 n'est qu'une indication et n'existe en réalité pas exactement
0
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
25 mai 2009 à 23:00
Et on comprend bien pourquoi !

La plus petite unité d'affichage est le pixel, d'accord ?

Regardons donc :
  Dim toto As Integer '(car on ne peut avoir des fractions de pixels, hein...)
  toto = ((10 * 20) / 15) ' je calcule ici en pixels (en divisant par 15, qui est probablement le twipsperPixel de ta machine)
  MsgBox (toto * 15) / 20 ' on recalcule en points

cette différence n'arrivera pas avec une taille de 12. Pourquoi ? parce que tout simplement (12 * 20)/15 est un entier (16) alors que ce n'est pas le cas de ((10 * 20) / 15)
Preuve :
Dim toto As Integer '(car on ne peut avoir des fractions de pixels, hein...)
  toto = ((10 * 20) / 15) ' je calcule ici en pixels (en divisant par 15, qui est probablement le twipsperPixel de ta machine)
  MsgBox (toto * 15) / 20 ' ' on recalcule en points
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
25 mai 2009 à 23:01
salut,


Font.Size
attend un CURRENCY, tandis que
FontSize
attend un SINGLE

rencontres-tu également cette erreur avec la propriété
FontSize
?

tu peux mettre ton code dans une gestion d'erreur pour savoir ce qui bloque exactement, un "10" ne génèrera pas d'erreur, c'est la font qui l'ajustera en "9,75" ou "9.75" selon les paramètres régionaux du poste


Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp 
0
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
25 mai 2009 à 23:09
Bonjour, PCPT,

Fontsize conduira à la même différence (voir l'essai plus haut).
Non...
C'est vraiment une affaire de pixels (voir l'expérience que j'ai invité à faire)... Un pixel étant la plus petite unité d'affichage, les décimales résultant d'une division "sautent" et le résultat est entier. En retransformant en points ce résultat, on n'a la même valeur qu'au départ que lorsque la division conduit à un entier.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
25 mai 2009 à 23:11
J'ajoute que c'est même là la principale difficulté rencontrée (réajustement des tailles de police) en matière de redimensionnements pour faire face à des résolutions différentes.
0
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
25 mai 2009 à 23:28
Mais voilà comment le dire autrement et plus clairement, peut-être :



 Dim nbtwips As Integer, nbpixels As Double, nbpixelsreels As Integer
 'dison qu'on par de 10 points.
 'combien de twips ?
 nbtwips = 10 * 20 ' donc 200
 'combien de pixels ?
 nbpixels = nbtwips / Screen.TwipsPerPixelY
 MsgBox nbpixels ' affichera 13.3333 sur une machine où twipsperpixely = 15 (la plupart des machines)
 'or 0.3333 pixels ne veulent rien dire et donc on ne retiendra que :
 nbpixelsreels = nbpixels
 MsgBox nbpixelsreels ' qui n'affice, lui, que 13
 'or, la correspondance en points de nbpixelsreels est :
 MsgBox ScaleY(nbpixelsreels, vbPixels, vbPoints) ' qui affichera 9.75


et voilà pourquoi la taille de 10 points ne peut rien vouiloir dire de réel en matière d'affichage (forcément en pixels)




 
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
25 mai 2009 à 23:34
salut jmf0,

la question n'est pas trop de savoir si à 10 attribué on a 9.75
je n'ai pas remis ton explication en cause, et qui saurait, à l'oeil, voir une différence de 0.25...

la question porte sur une erreur aléatoirement soulevée, pas sur l'ecart "normal" constaté
si c'est un problème de type, çà peut déjà donner une piste (autre propriété)
et un on error avec msgbox pour avoir le coeur net


Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp 
0
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
25 mai 2009 à 23:48
Re...

Je ne comprends pas ce que tu veux dire....
La taille de 10 ne pourra jamais correspondre à une occupation en pixels et est logiquement "réajustée" .... c'est tout ...
Je regrette d'avoir fait tout mon baratin (je devais être fatigué...) alors que vb le démontre en 2 coups de cuillère à pot :

  Const taille As Integer = 10
  MsgBox ScaleY(Int(ScaleY(taille, vbPoints, vbPixels)), vbPixels, vbPoints) ' affichera forcément 9.75

et aucune différence avec une taille de 12, par contre (pour ce que j'ai exposé plus haut)

  Const taille As Integer = 12
  MsgBox ScaleY(Int(ScaleY(taille, vbPoints, vbPixels)), vbPixels, vbPoints) ' et la, pas de différence ===>> 12 affiché

Il ne s'agit pas, à mon sens d'erreurs, mais de réajustements nécessaires.en pixels entiers

Comme je l'ai signalé plus haut, c'est là toute la difficulté quand on veut faire des "Resizers" en appliquant un coefficient k (pas valable en ce qui concerne les polices !). Les "Resizers" performants n'utilisent pas de redimensionnement, mais autre chose (et... ils se payent donc...)
0
Lauranvanoers Messages postés 8 Date d'inscription mardi 22 mars 2005 Statut Membre Dernière intervention 3 mars 2012
26 mai 2009 à 22:03
Bonsoir jmf0 et PCPT,



Merci beaucoup pour tous les bons conseils. L'explication des pixels etait très clair. Malheureusement, je n'ai pas installé Visual Basic 6.0 au système a l'école. Alors, le seul possibilité pour moi est d'experimenter à la maison, installer un nouveau .exe de mon programme à l'école et attendre le résultat dans la classe.
Aujourd'hui, à l'école, il y a eu deux fois une erreur: le numero 380: invalid property value. En effet (dans mon opinion) une question de tailles de police, probablement des pixels.
Ou est t'il possible que le sytème à l'école fait "7500" de "7,5"? Le Chef d'ICT m'a dit que le décimale du système (Windows 2000) chez nous c'est le "." et "," est un separateur de milles. C'est impossible de changer.


 


Encore merci et bonne nuit,
Lauran van Oers
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
26 mai 2009 à 22:21
çà n'entre pas en compte

[../auteur/LAURANVANOERS/475125.aspx Lauranvanoers]

, la FONT prend en compte les param régionaux
au pire c'est ton debugging qui faussera la lecture (chez toi donc) par rapport à ce que tu crois avoir sur le serveur

autrement dit, dans la gestion d'erreur, ne fait pas juste :
msgbox err.number & err.description
mais :
msgbox err.number & " : " & err.description & vbcrlf & "la valeur attribuée était de " & cstr(val(
vraagtkstOr(2)
)) & ", celle conservée est de " & cstr(
Werkvenster.vraagtkst.Font.Size
)

ps : AS-TU ESSAYé AVEC LA PROPRIéTé FONTSIZE ??


Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp 
0
Lauranvanoers Messages postés 8 Date d'inscription mardi 22 mars 2005 Statut Membre Dernière intervention 3 mars 2012
9 juin 2009 à 10:04
Un grand merci à PCPT et jmf0,

J'ai changé tous les "Font.Size", "Font.Underline", etc. en "FontSize", "FontUnderline" etc. à 123 places dans mon programme et tous les problèmes sont disparu. Maintenant une semaine sans iterruptions dans la classe!

J'ai pensée que par exemple "Font.Size" et "FontSize" sont pareil et que "FontSize" est implementé en VB 6.0 pour accorder avec VB 5 etc.



Sincères salutations et merci encore

Lauran van Oers
0
Rejoignez-nous