mon application delphi 2009 a un système de traduction de base qui utilise GNUGetText. J'avais utilisé quelques appels d'API pour préparer les polices. Je pensais que cela fonctionnait correctement jusqu'à récemment quand quelqu'un de Malte avait un problème avec mon application échouant précisément dans ce domaine. mon application est utilisée globalement. certains de ces codes peuvent être devenus obsolètes puisque d2009 utilise unicode.déterminer le jeu de caractères à utiliser
est-ce vraiment nécessaire pour que mon application fonctionne dans tous les environnements locaux?
TForm.Font.Charset
il y a eu ma compréhension, je dois mettre Font.Charset de l'instance TForm selon les paramètres régionaux de l'utilisateur. est-ce correct?
TranslateCharsetInfo() gagner de fonction API
delphi 2009 dit de la Windows.pas:
function TranslateCharsetInfo(var lpSrc: DWORD; var lpCs: TCharsetInfo;
dwFlags: DWORD): BOOL;
delphi Windows.pas de 5 dit:
function TranslateCharsetInfo(var lpSrc: DWORD; var lpCs: TCharsetInfo;
dwFlags: DWORD): BOOL; stdcall;
de MSDN de Microsoft:
BOOL TranslateCharsetInfo(
__inout DWORD FAR *lpSrc,
__out LPCHARSETINFO lpCs,
__in DWORD dwFlags
);
retour lorsque ce code a été écrit (retour dans delphi 5 jours), le mot a été le InPort de la fonction était incorrecte et la manière correcte était:
function TranslateCharsetInfo(lpSrc: Pointer; var lpCs: TCharsetInfo;
dwFlags: DWORD): BOOL; stdcall; external gdi32;
avis que la copie de fichier Windows.pas de D2009 est pas stdcall. quelle déclaration de TranslateCharsetInfo dois-je utiliser?
Le code
que de côté, pour l'essentiel, je l'ai fait ce qui suit:
var
Buffer : PChar;
iSize, iCodePage : integer;
rCharsetInfo: TCharsetInfo;
begin
// SysLocale.DefaultLCID = 1802
iSize := GetLocaleInfo(SysLocale.DefaultLCID, LOCALE_IDefaultAnsiCodePage,
nil, 0);
// size=14
GetMem(Buffer, iSize);
try
if GetLocaleInfo(SysLocale.DefaultLCID, LOCALE_IDefaultAnsiCodePage, Buffer,
iSize)=0 then
RaiseLastOSError;
// Buffer contains 0 so codepage = 0
iCodePage:=Result := StrToInt(string(Buffer));
finally
FreeMem(Buffer);
end;
// this function is not called according to MSDN's directions for
// TCI_SRCCODEPAGE and the call fails.
if not TranslateCharsetInfo(Pointer(iCodePage), rCharsetInfo,
TCI_SRCCODEPAGE) then
RaiseLastOSError;
// acts upon the form
Font.Charset:= rCharsetInfo.ciCharset;
end;
Je ne sais pas assez sur ce ... il y a assez étrangement, des années quand je écrit ceci, j'étais persuadé que cela fonctionnait correctement. les résultats de ... ne pas vérifier le code de retour d'appel de l'API ...
n'y a-t-il pas une façon plus intelligente de faire tout cela? le RTL/VCL ne fait-il pas la plupart/tout cela automatiquement? mon instinct me dit que je travaille trop dur sur ce ...
je vous remercie pour votre aide!
merci pour votre commentaire Lars D! Je vais demander à quelqu'un d'essayer mon application dans un tel environnement. –