Содержание материала

Все системы с Интернет 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;

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить