2010-07-20 4 views
4

Existe-t-il un moyen plus facile de convertir Delphi 7 en Delphi 2009? ou existe-t-il un moyen d'utiliser une unité Delphi 7 dans un projet Delphi 2009?Existe-t-il un moyen plus simple de convertir Delphi 7 en Delphi 2009?

J'ai une unité dans Delphi 7 mais le comportement est tout chamboulé quand j'essaie de l'utiliser dans mon projet Delphi 2009.

Il a beaucoup de différences comme:

Hangul = 'ㄱㄲㄴㄷㄸㄹㅁㅂㅃㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎ' + 
      'ㅏㅐㅑㅒㅓㅔㅕㅖㅗㅛㅜㅠㅡㅣ'; 
ShowMessage(Copy(Hangul, 1 + (I) * 2, 2)); 

Affiche les caractères un à la fois en Delphi 7, mais deux à la fois en Delphi 2009. donc je devais changer pour:

mais c'était le plus facile, il devient plus confus .. et l'algorithme n'est pas à moi donc je ne peux pas comprendre l'intégralité du programme.

Toute aide serait appréciée.

EDIT: et si quelqu'un est intéressé à voir le code ici est le LINK. C'est la partie unit HanInput;. Il traduit les clés (en anglais) et affiche les caractères coréens. Et non, je ne comprends pas le coréen.

Répondre

5

Je regarderais le codage de votre fichier .pas. Vous pouvez le faire en utilisant Notepad++ par exemple. S'il ne s'agit pas de UTF-8, remplacez-le par UTF-8 en utilisant notepad ++. Cela devrait préserver les caractères et les rendre lisibles pour D2009. Oh, et assurez-vous que la BOM (marque d'ordre des octets) pour la syste`me UTF-8 est incluse.

Vous ne savez pas si le fichier sera toujours utilisable en D7 si ... (Je ne sais pas quand le support UTF-8 a été ajouté à l'EDI). Les chaînes Hangul de votre exemple et l'unité HanInput de votre lien ont deux octets par caractère. Cela me dit qu'ils sont destinés à être codés en UTF-16.

Cela est en quelque sorte confirmé par les appels MultiByteToWideChar, même s'ils sont utilisés sur les arguments plutôt que sur les constantes. Si vous utilisez réellement le codage UTF-16 dans les fonctions, vous pouvez vous débarrasser de cet appel, mais vous devez toujours trouver un moyen de traiter les constantes. Traiter les constantes - je ne vois pas trop de choses dans cette unité HanInput - pourrait être aussi simple que de copier les chaînes dans un nouveau fichier Notepad ++ encodé Ansi, changer son encodage en UTF-8 puis copier les chaînes retour à votre unité. Vous voudrez peut-être vous assurer que vous copiez d'abord toutes les chaînes dans un nouveau fichier notepad ++, puis les convertissez puis copiez-les, car l'éditeur IDE vous demandera probablement si vous voulez changer le format des unités en UTF-8 les constantes.

+0

Les caractères coréens se transforment en choses illisibles comme « ĿŀŁłŃńŅņŇňʼnŊŋŌōŎŏŐőŒœ » ..: c – Dian

+0

Am I en supposant que le fichier original (D7) était encodé en Ansi? Dans ce cas, la chaîne serait mutée parce que la chaîne est encodée en "UTF-16" dans un fichier Ansi.Lorsque vous traduisez ensuite l'Ansi en UTF-8, alors chaque L'octet de la chaîne sera traduit séparément en UTF-8 et cela causera des choses illisibles.Pendant ce temps, essayez de déclarer les constantes comme RawByteString (cherchez dans l'aide) et ne faites aucune traduction dans D2009, car le compilateur devrait prendre soin de le traduire en UTF-16LE lorsque vous l'affectez à un string. –

+0

Oui. Le fichier original a été encodé en Ansi. D'accord, je vais le faire. Merci pour l'aide. – Dian

4

En D7 Sizeof (Char) est égal à 1, alors que dans D2009 est 2. Donc cela devrait vous aider:

ShowMessage(Copy(Hangul, 1 + (I) * Sizeof(Char), Sizeof(Char))); 
+0

+1 pour le SizeOf (Char) au lieu de seulement 2. Mais si le fichier PAS est codé dans quelque chose d'autre, pas sûr de ce qui se passerait, bien que le compilateur soit assez intelligent pour ajouter des constantes dans tous les formats de chaînes ils sont assignés. –

+0

D'autre part, la copie ne fonctionne pas sur le nombre d'octets, mais sur le nombre de caractères. L'OP a dû passer de 2 (D7) à 1 (D2009) pour le faire fonctionner. Et SizeOf (Char) retournera 2 pour n'importe quelle chaîne normale dans D2009, donc cela n'aiderait pas. –

+0

Lorsque votre code suppose que sizeof (Char) = 1, vous devez le réparer. –