Все системы с Интернет Explorer 4 и новее есть библиотека mlang.dll в\system32 каталог. Обычно вы можете сказать, Дельфы, чтобы просто импортировать эти библиотеки com. Этот, однако, не Делфи. Я начал преобразования "самых разыскиваемых интерфейс" для себя. Результаты я представляю вам здесь.
Сначала я дам вам код для блока преобразования, который позволяет Вам просто преобразовать любой текст из страницы кодекса перевод на другую. Далее мы вскоре будем обсуждать код и дать вам пример того, как использовать его.
uCodePageConverter
Code: |
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Unit Name : uCodePageConverter * Autor : Daniel Wischnewski * Copyright : Copyright © by gate(n)etwork. All Right Reserved. * Urheber : Daniel Wischnewski * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
unit uCodePageConverter;
interface
uses Windows;
const IID_MLangConvertCharset: TGUID = '{D66D6F98-CDAA-11D0-B822-00C04FC9B31F}'; CLASS_MLangConvertCharset: TGUID = '{D66D6F99-CDAA-11D0-B822-00C04FC9B31F}';
type tagMLCONVCHARF = DWORD;
const MLCONVCHARF_AUTODETECT: tagMLCONVCHARF = 1; MLCONVCHARF_ENTITIZE: tagMLCONVCHARF = 2;
type tagCODEPAGE = UINT;
const CODEPAGE_Thai: tagCODEPAGE = 0874; CODEPAGE_Japanese: tagCODEPAGE = 0932; CODEPAGE_Chinese_PRC: tagCODEPAGE = 0936; CODEPAGE_Korean: tagCODEPAGE = 0949; CODEPAGE_Chinese_Taiwan: tagCODEPAGE = 0950; CODEPAGE_UniCode: tagCODEPAGE = 1200; CODEPAGE_Windows_31_EastEurope: tagCODEPAGE = 1250; CODEPAGE_Windows_31_Cyrillic: tagCODEPAGE = 1251; CODEPAGE_Windows_31_Latin1: tagCODEPAGE = 1252; CODEPAGE_Windows_31_Greek: tagCODEPAGE = 1253; CODEPAGE_Windows_31_Turkish: tagCODEPAGE = 1254; CODEPAGE_Hebrew: tagCODEPAGE = 1255; CODEPAGE_Arabic: tagCODEPAGE = 1256; CODEPAGE_Baltic: tagCODEPAGE = 1257;
type IMLangConvertCharset = interface ['{D66D6F98-CDAA-11D0-B822-00C04FC9B31F}'] function Initialize( uiSrcCodePage: tagCODEPAGE; uiDstCodePage: tagCODEPAGE; dwProperty: tagMLCONVCHARF ): HResult; stdcall; function GetSourceCodePage( out puiSrcCodePage: tagCODEPAGE ): HResult; stdcall; function GetDestinationCodePage( out puiDstCodePage: tagCODEPAGE ): HResult; stdcall; function GetProperty(out pdwProperty: tagMLCONVCHARF): HResult; stdcall; function DoConversion( pSrcStr: PChar; pcSrcSize: PUINT; pDstStr: PChar; pcDstSize: PUINT ): HResult; stdcall; function DoConversionToUnicode( pSrcStr: PChar; pcSrcSize: PUINT; pDstStr: PWChar; pcDstSize: PUINT ): HResult; stdcall; function DoConversionFromUnicode( pSrcStr: PWChar; pcSrcSize: PUINT; pDstStr: PChar; pcDstSize: PUINT ): HResult; stdcall; end;
CoMLangConvertCharset = class class function Create: IMLangConvertCharset; class function CreateRemote(const MachineName: string): IMLangConvertCharset; end;
implementation
uses ComObj;
{ CoMLangConvertCharset }
class function CoMLangConvertCharset.Create: IMLangConvertCharset; begin Result := CreateComObject(CLASS_MLangConvertCharset) as IMLangConvertCharset; end;
class function CoMLangConvertCharset.CreateRemote( const MachineName: string ): IMLangConvertCharset; begin Result := CreateRemoteComObject( MachineName, CLASS_MLangConvertCharset ) as IMLangConvertCharset; end;
end.
|
Как видите, я перевел только один из многих интерфейсов, однако этот является наиболее эффективным (по мнению Microsoft) и будет выполнять эту работу. Далее я добавил некоторые константы, чтобы упростить задачу поиска наиболее важных значений.
При использовании данного устройства для выполнения любых конерций кодовой страницы не следует забывать, что обе кодовые страницы (исходные и целевые) должны быть установлены и поддержаны на компьютере, выполняющем перевод. "На компьютере, который покажет результат, должна быть установлена и поддержана только целевая кодовая страница.
Для проверки устройства просто создайте форму с памяткой и кнопкой. Добавьте следующий код для кнопки событие onclick. (Не забудьте добавить единицу преобразования в предложение uses!)
SAMPLE
Code: |
procedure TForm1.Button1Click(Sender: TObject); var Conv: IMLangConvertCharset; Source: PWChar; Dest: PChar; SourceSize, DestSize: UINT; begin // connect to MS multi-language lib Conv := CoMLangConvertCharset.Create; // initialize UniCode Translation to Japanese Conv.Initialize(CODEPAGE_UniCode, CODEPAGE_Japanese, MLCONVCHARF_ENTITIZE); // load source (from memo) Source := PWChar(WideString(Memo1.Text)); SourceSize := Succ(Length(Memo1.Text)); // prepare destination DestSize := 0; // lets calculate size needed Conv.DoConversionFromUnicode(Source, @SourceSize, nil, @DestSize); // reserve memory GetMem(Dest, DestSize); try // convert Conv.DoConversionFromUnicode(Source, @SourceSize, Dest, @DestSize); // show Memo1.Text := Dest; finally // free memory FreeMem(Dest); end; end; |
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!