내 delphi 2009 앱에는 GNUGetText를 사용하는 기본 번역 시스템이 있습니다. 일부 win API 호출을 사용하여 글꼴을 준비했습니다. 몰타에서 온 누군가가 내 앱에 문제가있어이 분야에서 정확하게 실패 할 때까지 제대로 작동하고 있다고 생각했습니다. 내 앱은 전 세계적으로 사용됩니다. 이 코드 중 일부는 d2009가 유니 코드를 사용하므로 쓸모 없게 될 수도 있습니다.사용할 문자 집합을 결정합니다.
내 앱이 모든 로케일에서 작동하려면이 모든 것이 정말로 필요합니다.
TForm.Font.Charset는
내 이해 i는 사용자의 로케일에 따라 TForm의 인스턴스의 Font.Charset를 설정해야합니다이었다. 이 올바른지?
TranslateCharsetInfo() 승리 API 함수
델파이 2009의 windows.pas는 말한다 :
function TranslateCharsetInfo(var lpSrc: DWORD; var lpCs: TCharsetInfo;
dwFlags: DWORD): BOOL;
델파이 5의 windows.pas 말한다 : 마이크로 소프트의 MSDN에서
function TranslateCharsetInfo(var lpSrc: DWORD; var lpCs: TCharsetInfo;
dwFlags: DWORD): BOOL; stdcall;
:
BOOL TranslateCharsetInfo(
__inout DWORD FAR *lpSrc,
__out LPCHARSETINFO lpCs,
__in DWORD dwFlags
);
이 코드는 (다시 델파이 5 일간) 작성되었습니다
다시는 단어는 함수의 인포가 잘못이었다 올바른 방법이었다
은 D2009의 windows.pas 파일 복사가function TranslateCharsetInfo(lpSrc: Pointer; var lpCs: TCharsetInfo;
dwFlags: DWORD): BOOL; stdcall; external gdi32;
통지 것을 stdcall하지 않습니다. 어떤 TranslateCharsetInfo 선언을 사용해야합니까?
코드를 제외하고, 기본적으로 내가 다음을 수행했습니다
:
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;
난 그냥 이상하게도 ... 이것에 대해 충분히 모른다 년 전 때 이 편지를 쓰고, 나는 그것이 올바르게 작동하고 있다고 설득되었다. 의 결과 ... API 호출 반환 코드를 확인하지 못했습니다 ...
이 모든 것을 수행하는 더 똑똑한 방법이 아닙니까? RTL/VCL이이 중 대부분/전부를 자동으로 수행하지 않습니까? 내 직감은 내가이 일에 너무 열심히 일하고 있다고 말해. ...
당신의 도움에 감사드립니다!
의견을 보내 주셔서 감사합니다. Lars D! 나는 로케일에서 내 앱을 사용해 볼 것을 누군가에게 요청할 것이다. –