나는 Delphi 7 응용 프로그램을 가지고 있습니다. 비 유니 코드 프로그램에 대한 기본 Windows 문자 집합을 가져올 수 있어야합니다. DEFAULT_CHARSET이 DEFAULT_CHARSET을 설정한다는 것을 알고 있지만 정확히 어떤 문자 세트인지 알고 있어야 다른 문자 세트와 비교할 수 있습니다. 이게 가능하고 어떻게?Delphi - Windows의 기본 비 - 유니 코드 문자 집합
감사합니다.
나는 Delphi 7 응용 프로그램을 가지고 있습니다. 비 유니 코드 프로그램에 대한 기본 Windows 문자 집합을 가져올 수 있어야합니다. DEFAULT_CHARSET이 DEFAULT_CHARSET을 설정한다는 것을 알고 있지만 정확히 어떤 문자 세트인지 알고 있어야 다른 문자 세트와 비교할 수 있습니다. 이게 가능하고 어떻게?Delphi - Windows의 기본 비 - 유니 코드 문자 집합
감사합니다.
GetFontData가 GetObject
호출 여기 LogFont 정의 채울 캐릭터
GetObject called with HFONT를 판별 LogFont.lfCharSet
을 사용하면
DEFAULT_CHARSET은 현재 시스템 로케일에 기초한 값으로 설정된다. 예를 들어, 시스템 로케일이 영어 (미국)이면 ANSI_CHARSET으로 설정됩니다. 시스템 기본을의 Windows ANSI 코드 페이지를 제공하는 CPINFOEX 구조를 제공
var
CPInfoEx:TCPInfoEx;
CD:Cardinal;
CharsetInfo:TCharSetInfo;
CSN:String;
begin
If GetCPInfoEx(CP_ACP,0,CPInfoEx) then
begin
CD := CPInfoEx.Codepage;
if TranslateCharsetInfo(CD,CharsetInfo,TCI_SRCCODEPAGE) then
begin
CharsetToIdent(CharsetInfo.ciCharset,CSN);
Showmessage(CPInfoEx.CodePageName+' - '+IntToStr(CharsetInfo.ciCharset)+' - '+CSN);
end;
end;
end;
결과 코드 페이지 id가 charset id와 같습니까? – OnTheFly
@bummi - TCPInfoEx와 GetCPInfoEx는 Delphi 7 Windows 장치에서 선언 된 것처럼 보이지 않으므로이 방법을 사용할 수 없습니다. 워렌 P (Warren P)가 제안한 것처럼 실제로 GetACP (Windows 장치에서 실제로 _is_ 선언 됨)를 사용하는 것과는 대조적으로이 방법을 사용하면 어떤 이점이나 차이가 있습니까? – jedivader
같은 결과가 나올 경우이 링크는 GetACP에 정보를 제공합니다. GetCPInfo 리드에 이어 http://msdn.microsoft.com/en-us/library/windows/desktop/dd318070(v=vs.85).aspx에 정보 제공 GetCPInfoEx – bummi
여기 델파이 7
unit Main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
_cpinfoex = record
MaxCharSize: UINT; { max length (bytes) of a char }
DefaultChar: array[0..MAX_DEFAULTCHAR - 1] of Byte; { default character }
LeadByte: array[0..MAX_LEADBYTES - 1] of Byte; { lead byte ranges }
UnicodeDefaultChar : WCHAR;
CodePage : UINT;
CodePageName : array[0..MAX_PATH] of char;
end;
TCPInfoEx = _cpinfoex;
{$EXTERNALSYM CPINFOEX}
CPINFOEX = _cpinfoex;
{$EXTERNALSYM GetCPInfoEx}
TForm1 = class(TForm)
procedure FormShow(Sender: TObject);
private
procedure Check;
public
end;
function GetCPInfoEx(CodePage: UINT; dwFlags : DWORD; var lpCPInfoEx: TCPInfoEx): BOOL; stdcall;
function GetCPInfoEx; external kernel32 name 'GetCPInfoExA';
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Check;
var
v_CPInfoEx : TCPInfoEx;
v_CD : Cardinal;
v_CharsetInfo : TCharSetInfo;
v_CSN,
v_CodePageName,
v_s, v_info : String;
v_i : Integer;
begin
If GetCPInfoEx(CP_ACP, 0, v_CPInfoEx) then
begin
v_info := 'CodePage: '+IntToStr(v_CPInfoEx.CodePage)+#13;
v_CodePageName := '';
v_i := 0;
repeat
v_CodePageName := v_CodePageName + v_CPInfoEx.CodePageName[v_i];
inc(v_i);
until v_CPInfoEx.CodePageName[v_i] = #0;
v_info := v_info + 'CodePageName: '+v_CodePageName+#10#13;
v_info := v_info + 'MaxCharSize: '+IntToStr(v_CPInfoEx.MaxCharSize)+' bytes.'+#13;
v_s := '';
for v_i := 0 to MAX_DEFAULTCHAR - 1 do
v_s := v_s + IntToStr(v_CPInfoEx.DefaultChar[v_i])+' ';
v_info := v_info + 'DefaultChar: '+v_s+#13;
v_s := '';
for v_i := 0 to MAX_LEADBYTES - 1 - 1 do
v_s := v_s + IntToStr(v_CPInfoEx.LeadByte[v_i])+' ';
v_info := v_info + 'LeadByte: '+v_s+#13;
v_info := v_info + 'UnicodeDefaultChar: '+v_CPInfoEx.UnicodeDefaultChar;
ShowMessage(v_info);
end;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
Check;
end;
end.
나는 그것이 GetACP''생각에 대한 완전한 예입니다. –
원하는 것을 정확히 정의 할 수 있습니까? Windows 문자 집합이 정확하지 않습니다. –
@WarrenP - 감사합니다, 저를 위해 일했습니다! 이제 코드 페이지를 TFontCharset으로 변환하는 가장 좋은 방법은 무엇입니까? David Hefferman - 우리는 DEFAULT_CHARSET이 Windows의 '유니 코드가 아닌 프로그램을위한 언어'의 지역 및 언어 설정에서 선택된 언어에 따라 설정되는 문자 집합에 대해 이야기하고 있습니다. (http://www.microsoft.com/korea/ resources/documentation/windows/xp/all/proddocs/ko-ko/int_pr_select_language_version.mspx? mfr = true) – jedivader