Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 2019
-
9 avril 2008 à 17:31
Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 2019
-
24 avril 2008 à 17:16
Bonjour
Alors voila j'ai beau cherché un peut partout je n'arrive pas à trouvé quelque chose qui me conviens (en même temps c'est vrais que je suis un peut chiant parfois).
Je modifie actuellement une application à fin de internationalisée.
Pour cela :
Je stock l'ensemble des chaine de caractères affichable de mon appli (en utilisant une classe faite maison) dans une table d'une base de données (base utilisé pour le moment : PostgreSQL ; forcément en UTF-8, les fonctions appelant des API que j'utilise pour convertir l'Ascii en UTF-8 sont en fin de post, je les est trouvées quelque part sur VB-France, je crois).
Dans une autre table je stock les traductions de ces chaines de caractères. A fin de traduire je fait le lient (grâce à une simple requête de la forme "SELECT langue_toto.Phrase FROM langue_reference,langue_toto WHERE langue_reference.Reference langue_toto.Reference AND langue_reference.Phrase 'La phrase à traduire'". Et paf j'ai la traduction (en faite je fessais comme sa il n'y à pas longtemps, mais je n'étais pas contant de la vitesse d'exécution, vue la quantité de requête que cette méthode utilise ce n'est pas étonnant, donc je fait tout en mémoire, par contre sa serais un peut long à expliqué et sans intérêt pour mon problème actuel
)
Je voudrais maintenant affiché l'ensemble de ces données dans un objet (ressemblant à un datagridview), et que tout les carac soit visible (aussi bien que les caractères cyrillique caractères chinois).
Je ne sait vraiment pas comment faire. Existe t'il des objets affichant directement de l'UTF-8 (sa serais l'idéale en faite) ou quelqu'un aurais une autre méthode pour faire sa ?
Si je ne peut affiché que le jeux de caractére configuré dans les paramètres régionaux de Windows se serais moins bien mais suffisant
Les fonction de conversion Ascii -> UTF-8 et UTF-8 -> Ascii que j'utilise :
8<--------------------------------------------------------------------
Private Declare Function MultiByteToWideChar Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpMultiByteStr As Long, ByVal cchMultiByte As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long) As Long
Private Declare Function WideCharToMultiByte Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long, ByVal lpMultiByteStr As Long, ByVal cchMultiByte As Long, ByVal lpDefaultChar As Long, ByVal lpUsedDefaultChar As Long) As Long
Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 20191 11 avril 2008 à 09:53
Merci pour ce lient. ( désol de ne passé que maintenant j'étais TRÈS occupé hier )
Je regarde ce tuto tout de suite (par contre hélasse je n'aurais pas énormément de temps à accordé à ce sujet aujourd'hui mais dé le début de semaine prochaine je posterais ma solution détaillé , si jamais j'oubliais n'hésitez pas à posté ici pour me le rappelé )
Merci encore Renfield (j'ai le sentiment que c'est souvent toi qui apporte des solutions à mes problèmes, MERCI)
Amicalement
Pensez "Réponse acceptée"
Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 20191 15 avril 2008 à 16:43
Bonjour (enfin un peut de temps libre pour répondre)
Je n'es pas terminer de tester l'ensemble des objets disponible sur le lien que tu m'a transit Renfield mais j'ai déjà une idée plus ou moins précise de ce que je vais faire.
-> Les textbox et label vont être remplacé par les textbox et label disponible dans le composant "Microsoft Forms 2.0 Object Library" qui affiche correctement des caractère unicode (donc utf-8)
-> Les toolstiptext de mes objets vont être remplacé par des objets "clsToolTip" (dans le projet "UniTooltip" disponible sur le lient que Renfield à posté, GÉNIAL comme truc beau en plus)
-> Il n'y à que les TabScript que je ne sait pas encore par quoi remplacé mais j'ai bonne espoir de trouvé rapidement
MERCI Renfield pour ce lien qui m'a permit de trouvé un point de départ solide pour résoudre mon problème.
Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 20191 22 avril 2008 à 17:59
Ma sution n'est pas encore terminer mais en bonne voie.
Alors en final j'applique une solution par problèmes (logique, en même temps mais j'aurais préférer tout faire d'un seul coup)
Je posterais au fur et à mesure des solutions trouvées
Unicode/UTF-8 dans le titre d'une form : Attention la plus complexe je pense :
-> Dans le disigne mettre la propriété BorderStyle à 0 (n'a pas effet si fait dans le code cher moi ????)
Dans un module aillant une collection en private je crée une procédure qui :
-> Crée un nouvelle objet basé sur une form un peut particulière (voir "La form conteneur")
-> Crée un objet basé sur une classe perso (voir "La classe") recevant une référence à la form (surtout utilisé pour les resize, fait grace à l'API "SetWindowPos")
-> Sauvegarde du derniers objet dans une collection (problème de durée de vie de variable dans le cas contraire, enfin je crois )
-> Utilisation d'un SetParent pour mettre la form à modifier dans le nouveau cadre (dans le piturebox voir "La form conteneur")
La form conteneur :
Contiens un frame trouvé ici (utilisé pour dessiné le contour et affiché le titre de la form)
Ce frame contiens une picture box classique
Sur resize du form faire le resize de la frame et du picture box
La classe :
Garde dans une variable withevents le form conteneur et dans une varable classique le form contenu (ou juste son handle sa peut être suffisant)
Sur l'évènement resize du form conteneur resize de la form contenu en utilisant l'API "SetWindowPos" (pas d'obligation à ce niveau je pense)
Sur l'évènement queryunload de la form conteneur fermer le form contenu, supprimer la référence à l'objet dans la collection du module (grâce à une procédure crée au niveau du module pour sa)
Voila la méthode que j'emploie pour les form (je ne sait pas si je suis claire par contre)
Si non pour ce qui concerne les textbox, listbox, label, chekbox, optionbox, combobox, commandbuttom, frame, je remplace les anciens objet par les objets d'MsForm2 (j'essaie de faire un code qui modifi directement ces objets dans le code des forms mais c'est pas si simple en final )
Par contre je n'es pas encore trouvé de substitue au objet MsChart, TabPage, ToolBar, et TreeView, si quelqu'un sait sa m'arrangerais. Si je trouve je posterais
Je posterais le code de tout sa une fois terminer et tester (peut être même dans les codes, dans ce cas je mettrais un lient )
Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 20191 24 avril 2008 à 17:16
Juste pour me défoulé (dzl mais j'en es vraiment besoin là) :
LES OBJETS MS.FORMS2 C'EST VRAIMENT DE LA MER__ !!!
Alors que les objets (textbox par exemple) VB "classique" sont relativement bien construit et claire (au niveau du code programme générer) les objet Forms2 sont totalement ILLISIBLE.
Je m'explique avec un exemple simple :
un textbox classique est codé comme sa :
8<---------------
Begin VB.TextBox Text1
Enabled = 0 'False
Height = 855
Left = 960
Locked = -1 'True
TabIndex = 4
Text = "Text1"
Top = 1800
Width = 2535
End
--------------->8
Si une propriété n'apparais pas c'est que la valeur par défaut est défini.
Un textbox Forms2 est (avec les même propriété) :
8<---------------
Begin MSForms.TextBox TextBox2
Height = 615
Left = 4440
TabIndex = 5
Top = 4080
Width = 2295
VariousPropertyBits= 746604573
Size = "4048;1085"
Value = "Text1"
FontEffects = 1073750016
FontHeight = 165
FontCharSet = 0
FontPitchAndFamily= 2
End
--------------->8
Et non vous ne rêvez pas les propriété Enable et Locked (pour ne citer que celle si) n'apparaisse plus au niveau des objets Forms2... En faite ils sont codé dans la valeur du "VariousPropertBits"... Une nouvelle propriété : "Size" (pour ne citer que celle si), est apparut Son utilité m'es encore inconnu (sachant que si je passe la valeur à "0;0" un plantage survient à l'ouverture du form, mais si cette même valeur est mise à "1;1" aucun changement dans la form n'est visible... Pas plus de commentaire je serais injurieux)...
Microbof à encore fait sont boulot complètement, proprement, et cherche comme toujours, à arrangé aussi bien les développeurs que les utilisateurs...
P.S. (affolant) :
Microbof à reconnu (par l'intermédiaire de M.David Cross chef de projet de l'UAC (User Account Control)) que l'UAC (justement) à été fait pour... faire chier son monde !!!!
Je cite :
M.David Cross : « La raison pour laquelle nous avons intégré l’UAC
au sein de la plateforme était pour énerver les utilisateurs. Je suis sérieux !
».
M. Cross explique que le but était de décourager les utilisateurs de creuser
trop profondément dans le système d’exploitation en modifiant des paramètres
importants, incitant aussi les développeurs à concevoir des programmes qui
n’aillent pas trop loin dans les sous-systèmes... Pourquoi ne pas verrouiller toutes les API temps qu'il s'y sont cette bande de ..... Houla je vais trop loin là.
Encore une fois merci Microbof