1

J'ai une application VCL Borland C++ Builder (donc je ne travaille pas encore avec Unicode), Je veux fournir une traduction simple du texte de la légende des contrôles au russe à runtime.Paramètres de police de formulaire VCL et de contrôle sous la version russe de MS Windows

Je peux facilement utiliser EnumChildWindows pour obtenir la légende en anglais, puis rechercher la traduction et remplacer le texte de la légende en utilisant SetWindowText. Cela fonctionne bien pour mes traductions en Europe occidentale où je n'ai pas à m'inquiéter de la police. Mais je ne suis pas sûr de savoir comment la version russe de Windows, puis VCL gère les jeux de caractères cyrilliques 8 bits.

Actuellement, tous les contrôles VCL ont les paramètres de police:

Charset=DEFAULT_CHARSET 
name=MS Sans Serif 

Ai-je raison de supposer que lorsque mon programme est exécuté sous une version russe de Windows le jeu de caractères sera cyrillique avec le DEFAULT_CHARSET réglage donc je n'aurai pas besoin de changer les paramètres de police dans tous mes contrôles?

Si je dois changer la police (au moment de l'exécution), si la fonction API Windows SendMessage (hwnd, WM_SETFONT, (WPARAM) HFONT, TRUE) travail avec des contrôles VCL? J'ai essayé d'utiliser CreateFont() et SendMessage (.. WM_SETFONT ..) avec RUSSIAN_CHARSET et une police cyrillique. Cela ne semble pas avoir d'effet, il conserve la police qui a été définie pour le contrôle dans le formulaire au moment du design (même ANSI_CHARSET et un visage de police installé par Windows standard n'affecte pas la police des contrôles) donc je recherche de confirmation que je n'aurai pas à changer la police des contrôles, ou alors me dire une méthode VCL pour définir tous les paramètres de police des contrôles à l'exécution.

Répondre

1

Il n'est pas nécessaire de réinventer la bicyclette. Pourquoi n'utilisez-vous pas les outils d'intégration de l'environnement de traduction fournis avec Borland C++ Builder? Il y a un assistant qui vous aidera avec les traductions et créera un fichier de ressources spécial qui contiendra la traduction de toutes les chaînes de texte de votre application. Ensuite, le programme vérifiera la langue du système et les fichiers de ressources linguistiques disponibles au démarrage et utilisera automatiquement la langue appropriée. Consultez le système d'aide C++ Builder avec l'index - "Integrated Translation Environment (ITE)" pour une description plus détaillée du processus.

+0

Oui, je suis au courant de ITE (je n'aime pas la mise en œuvre): mes programmes ont été écrits il y a des années et sont antérieurs à l'ITE et utilisent des contrôles spécialisés non éditables dans l'EDI. Un de mes utilisateurs a envoyé mon programme à un collègue en Ouzbékistan qui a confirmé que mon hypothèse était correcte. –

+0

Vous pouvez essayer de définir prorerty "ParentFont" true pour tous les contrôles enfants de votre formulaire principal. Ensuite, vous pouvez modifier la propriété de police pour le formulaire principal, et il sera propagé à tous les contrôles imbriqués. Si vos contrôles spécialisés sont hérités de TControl, ils devraient prendre en charge ce type de gestion des polices. –