2011-11-07 2 views
0

내 프로그램이 로 작성되었으며 델파이 7과 러시아어 또는 중국어를 피하고 싶습니다. 한국어 파일 경로에 유니 코드 문자가 포함되어 있고 프로그램에서 아직 처리 할 수 ​​없기 때문에 한국어 소프트 사용을 시도합니다. (유니 코드를 지원하는 새로운 Delphi 버전에서 내 프로그램을 포팅하지 않는 한).델파이 7에서 사용자 언어 지원

어떻게 델파이 7에서 "유니 코드 언어"를 감지하는 함수를 작성합니까?

+2

무슨 뜻인지 자세히 설명해야합니다. 아직 명확하지 않습니다. –

+0

사용자가 사용하는 언어가 무엇인지 감지하고 싶습니다. 한국어, 중국어, 러시아어 인 경우 ... mysoft를 사용할 수 없다는 것을 informhim에 문의하십시오. – user382591

+0

"사용자가 사용하는 언어"는 무엇을 의미합니까? 그것은 많은 것들이 될 수 있습니다. 정확 해. 왜 어차피 sw를 사용하여 그들을 차단하고 싶습니까? 효과가있을 수 있습니다. 작동하지 않으면 어쨌든 사용하지 않을 것입니다! –

답변

5

Delphi 7 프로그램 (VCL 부분)은 러시아어, 중국어 또는 한국어 문자를 아무런 문제없이 처리 할 수 ​​있습니다.

Windows 시스템 언어가 올바르게 설정된 경우 charset은 해당 인코딩과 일치하며 파일 이름은이 charset에서 사용할 수있는 유니 코드 문자를 가질 수 있습니다. 실제로 string=AnsiString은 VCL에서 Windows API를 호출 할 때 유니 코드로 변환됩니다 (모두 ....A() 호출은 변환을 수행 한 다음 ....W() 버전을 호출합니다).

코드] like this 호출하여 default code page (사용하는 문자 세트를 선택할 것 하나) 강제이 경우

if GetThreadLocale<>LCID then // force locale settings if different 
    if SetThreadLocale(LCID) then 
    GetFormatSettings; // resets all locale-specific variables 

를 현재 시스템의 캐릭터의 TFileName (= AnsiString)이 될 것 Windows에서 해당 유니 코드 문자로 변환하면 Delphi 7 응용 프로그램에서이 문자를 사용할 수 있습니다. 직접 혼합 캐릭터 세트하는 당신이 표준 VCL AnsiString과 함께 할 수없는 그것을 사용

, 같이 할 수있는 델파이 2009, 새로운 string = UnicodeString 기본 패러다임에 감사합니다.

PS : 당신은 단지 # 0 .. # 127 문자를 사용하는 경우, 캐릭터 세트부터

만, # 128 .. (즉, 모든 비트 7 세트) 255 문자 포함, 당신의 문자열이 일치합니다 현재의 문자 집합/코드 페이지 설정이 무엇이든간에. 예를 들어 영어 문자와 숫자 만 사용하는 경우 문자셋/코드 페이지가 무엇이든간에 경로가 항상 작동합니다. 그러나 영어가 아닌 문자를 사용하는 경우 경로는 문자 집합/코드 페이지가 올바르게 설정된 경우에만 작동합니다 (예 : 런타임시 TOpenDialog 사용).

+0

유니 코드 경로에서 fileexists를 사용할 수 있습니까? – user382591

+3

사용자, 유니 코드 경로가 미국 전역에서 발생한다는 간단한 사실을 깨닫지 못했습니다. 어디서나 똑같은 크기로 깨지거나 유니 코드 델파이 버전으로 포팅 할 수 있습니다. –

+2

@ user382591 FileExists()는 Delphi 7에서 TFileName = AnsiString 매개 변수를 사용합니다.이 매개 변수는 파일을 검색 할 때 현재 코드 페이지/문자 집합을 사용하여 Windows에서 유니 코드 파일 이름으로 변환됩니다. 따라서 FileExists()는 현재 charset에 따라 항상 유니 코드 경로를 사용합니다. –