有谁有用过简体转换繁体的控件或是自已实现了此功能,请赐教,最好有源码!!
  Cvcode这个控件我有用,但它转成的繁体好多是乱码.

解决方案 »

  1.   

    不难 用LCMapString 解决
      

  2.   

    lzcx:
      你能给源码吗?我期待....,分不够可再加
      

  3.   

    unit UserTypes;interface
    uses
    Windows;
    type
      TLanguageType = (LanguageType_Simplified, LanguageType_Traditional);
    //  TLanguage = (Language_GB, Language_BIG5);
    type
    TVersionInfoItem =
       (viCompanyName, viFileDescription, viFileVersion, viInternalName,
        viLegalCopyright, viLegalTradeMarks, viOriginalFilename, viProductName,
        viProductVersion, viComments);
    implementationend.//------------------------
    unit BIG5_GB_Convert;interface
    uses
    UserTypes;
    function WinGBToBIG5(Source, Destination: PChar; iLen: integer; LanguageType: TLanguageType): WordBool; export; stdcall;
    function WinBIG5ToGB(Source, Destination: PChar; iLen: integer; LanguageType: TLanguageType): WordBool; export; stdcall;
    function LCMAPConvert(Source, Destination: PChar; iLen: integer; LanguageType: TLanguageType): WordBool; export; stdcall;implementation
    uses
    Windows,
      SysUtils;function LCMAPConvert(Source, Destination: PChar; iLen: integer; LanguageType: TLanguageType): WordBool;
    var
    iSourceLen: integer;  //需要转换的字符数
      sNew: string;
    begin
    result := false;
    if iLen >= Length(Source) then
      begin
    iSourceLen := length(Source);
       //给sGB_New分配内存
      SetLength(sNew, iSourceLen);
       if LanguageType =  LanguageType_Simplified then
         //转换GB码到GB码简体,使用API函数LCMapString
        LCMapString($0804, LCMAP_SIMPLIFIED_CHINESE, Source, -1, PChar(sNew), iSourceLen)
      else
      //转换Gb码简体到Gb码繁体,使用API函数LCMapString
    LCMapString($0804, LCMAP_TRADITIONAL_CHINESE, Source, -1, PChar(sNew), iSourceLen);
      StrCopy(Destination, PChar(snew));
       result := true;
      end;
    end;function Big5ToGB(sBig5: string; LanguageType: TLanguageType): string;
    var
    wsUnicode: WideString; //Unicode编码的字符
    sGB: AnsiString;  //GB编码的字符
    iLen: integer;  //需要转换的字符数
      sGB_New: string;   //根据标志转换的Gb编码
    begin
    //计算转换的字符数
    iLen := MultiByteToWideChar(950, 0, PChar(sBig5), -1, nil, 0);
      //给wszUnicode分配内存
      SetLength(wsUnicode, iLen);
      //转换Big5码到Unicode码,使用了API函数MultiByteToWideChar
      MultiByteToWideChar(950, MB_COMPOSITE, PChar(sBig5), -1, PWideChar(wsUnicode), Length(wsUnicode));  //计算转换的字符数
      iLen := WideCharToMultiByte (936, 0, PWideChar(wsUnicode), -1, nil, 0, nil, nil);
      //给sGB分配内存
      SetLength(sGB, iLen);
      //转换Unicode码到Gb码,使用API函数WideCharToMultiByte
      WideCharToMultiByte(936, WC_COMPOSITECHECK, PWideChar(wsUnicode), -1, PAnsiChar(sGB), Length(sGB), '?', PBOOL(false)); iLen := length(sGB);
      //给sGB_New分配内存
      SetLength(sGB_New, iLen);
      if LanguageType =  LanguageType_Simplified then
      //转换GB码到GB码简体,使用API函数LCMapString
        LCMapString($0804, LCMAP_SIMPLIFIED_CHINESE, PChar(sGB), -1, PChar(sGB_New), iLen)
      else
      //转换Gb码简体到Gb码繁体,使用API函数LCMapString
    LCMapString($0804, LCMAP_TRADITIONAL_CHINESE, PChar(sGB), -1, PChar(sGB_New), iLen);  Result := sGB_New;
    end;function GBToBig5(sGB: string; LanguageType: TLanguageType): string;
    var
    wsUnicode: WideString; //Unicode编码的字符
    sBig5: AnsiString;  //Big5编码的字符
    iLen: integer;  //需要转换的字符数
      sGB_New: string;   //根据标志转换的Gb编码
    begin
    iLen := length(sGB);
      //给sGB_New分配内存
      SetLength(sGB_New, iLen);
      if LanguageType =  LanguageType_Simplified then
      //转换GB码到GB码简体,使用API函数LCMapString
    LCMapString($0804, LCMAP_SIMPLIFIED_CHINESE, PChar(sGB), -1, PChar(sGB_New), iLen)
      else
      //转换GB码到GB码繁体,使用API函数LCMapString
    LCMapString($0804, LCMAP_TRADITIONAL_CHINESE, PChar(sGB), -1, PChar(sGB_New), iLen); //计算转换的字符数
    iLen := MultiByteToWideChar (936, 0, PChar(sGB_New), -1, nil, 0);
      //给wszUnicode分配内存
      SetLength(wsUnicode, iLen);
      //转换Gb码到Unicode码,使用了API函数MultiByteToWideChar
      MultiByteToWideChar(936, MB_COMPOSITE, PChar(sGB_New), -1, PWideChar(wsUnicode), Length(wsUnicode)); //计算转换的字符数
      iLen := WideCharToMultiByte (950, 0, PWideChar(wsUnicode), -1, nil, 0, nil, nil);
      //给sBig5分配内存
      SetLength(sBig5, iLen);
      //转换Unicode码到Big5码,使用API函数WideCharToMultiByte
      WideCharToMultiByte(950, WC_COMPOSITECHECK, PWideChar(wsUnicode), -1, PAnsiChar(sBig5), Length(sBig5), '?', PBOOL(false));  Result := sBig5;
    end;function WinGBToBIG5(Source, Destination: PChar; iLen: integer; LanguageType: TLanguageType): WordBool;
    var
      sConvert : string;
    begin
    if (iLen >= Length(Source)) and (Length(Source) > 0) then
      begin
    sConvert := GBToBIG5(Source, LanguageType);
        StrCopy(Destination, PChar(sConvert));
       result := true;
      end
      else
        result := false;
    end;function WinBIG5ToGB(Source, Destination: PChar; iLen: integer; LanguageType: TLanguageType): WordBool;
    var
      sConvert : string;
    begin
    if (iLen >= Length(Source)) and (Length(Source) > 0) then
      begin
    sConvert := BIG5ToGB(Source, LanguageType);
        StrCopy(Destination, PChar(sConvert));
       result := true;
      end
      else
        result := false;
    end;
    end.
      

  4.   

    function Simplified2Traditional(mSimplified: string): string;
    {
      简体中文转换为繁体中文,仅支持Win2K以上版本
    }
    var
      L: Integer;
    begin
      L := Length(mSimplified);
      SetLength(result, L);
      LCMapString(GetUserDefaultLCID,
        LCMAP_TRADITIONAL_CHINESE, PChar(mSimplified), L, @result[1], L);
    end; { Simplified2Traditional }function Traditional2Simplified(mTraditional: string): string;
    {
      繁体中文转换为简体中文,仅支持Win2K以上版本
    }
    var
      L: Integer;
    begin
      L := Length(mTraditional);
      SetLength(result, L);
      LCMapString(GetUserDefaultLCID,
        LCMAP_SIMPLIFIED_CHINESE, PChar(mTraditional), L, @result[1], L);
    end; { Traditional2Simplified }
      

  5.   

    俺也要一份,谢谢          [email protected]