各位:可不可以用DELPHI编写程序将数据库里的繁体中文转为简体?怎么样编写程序啊?求救了

解决方案 »

  1.   

    //只能用于Win2X以上系统
    unit GB2Big5;interface
    uses
      SysUtils, Windows;
      function Big5StringToGBString(Src : string) : string;
    implementation
    function StrConv(pszSrc : PChar; cpSrc : UINT; pszDest : PChar; cbDest :
    Longint; cpDest : UINT) : Longint;
    var
     buf : PWideChar;
     cwLen : LongInt;
    begin
     cwLen := MultiByteToWideChar(cpSrc,
      0,
      pszSrc,
      -1,
      nil,
      0);
     GetMem(buf, (cwLen+1) * SizeOf(WideChar));
     ZeroMemory(buf, (cwLen+1) * SizeOf(WideChar));
     MultiByteToWideChar(cpSrc,
      0,
      pszSrc,
      StrLen(pszSrc),
      buf,
      cwLen+1);
     Result := WideCharToMultiByte(cpDest,
      0,
      buf,
      -1,
      pszDest,
      cbDest,
      nil,
      nil);
     FreeMem(buf);
    end;function StringConv(const Src : string; cpSrc, cpDest : UINT) : string;
    var
     buf : PChar;
     len : Longint;
    begin
     len := StrConv(PChar(Src), cpSrc, nil, 0, cpDest);
     GetMem(buf, len);
     ZeroMemory(buf, len);
     StrConv(PChar(Src), cpSrc, buf, len, cpDest);
     Result := string(buf);
     FreeMem(buf);
    end;function CHTStringToCHSString(Src : string) : string;
    var
     buf : PChar;
     len : Integer;
    begin
     len := LCMapString($804, // LCID_CHINESE_SIMPLIFIED
      LCMAP_SIMPLIFIED_CHINESE,
      PChar(Src),
      -1,
      nil,
      0);
     GetMem(buf, len);
     ZeroMemory(buf, len);
     LCMapString($804, // LCID_CHINESE_SIMPLIFIED
      LCMAP_SIMPLIFIED_CHINESE,
      PChar(Src),
      -1,
      buf,
      len);
     Result := string(buf);
     FreeMem(buf);
    end;function CHSStringToCHTString(Src : string) : string;
    var
     buf : PChar;
     len : Integer;
    begin
     len := LCMapString($404, // LCID_CHINESE_SIMPLIFIED
      LCMAP_TRADITIONAL_CHINESE,
      PChar(Src),
      -1,
      nil,
      0);
     GetMem(buf, len);
     ZeroMemory(buf, len);
     LCMapString($404, // LCID_CHINESE_SIMPLIFIED
      LCMAP_TRADITIONAL_CHINESE,
      PChar(Src),
      -1,
      buf,
      len);
     Result := string(buf);
     FreeMem(buf);
    end;function CHTToCHS(pszSrc, pszDest : PChar; cbDest : Longint) : Longint;
    begin
     Result := LCMapString($804, // LCID_CHINESE_SIMPLIFIED
      LCMAP_SIMPLIFIED_CHINESE,
      pszSrc,
      -1,
      pszDest,
      cbDest);
    end;function CHSToCHT(pszSrc, pszDest : PChar; cbDest : Longint) : Longint;
    begin
     Result := LCMapString($404, // LCID_CHINESE_SIMPLIFIED
      LCMAP_TRADITIONAL_CHINESE,
      pszSrc,
      -1,
      pszDest,
      cbDest);
    end;function Big5StringToGBString(Src : string) : string;
    begin
     Result := CHTStringToCHSString(StringConv(Src, 950, 936));
    end;function Big5ToGB(pszSrc, pszDest : PChar; cbDest : Longint) : Longint;
    var
     buf : PChar;
     len : Integer;
    begin
     len := StrLen(pszSrc)+1;
     GetMem(buf, len*2);
     ZeroMemory(buf, len*2);
     StrConv(pszSrc, 950, buf, 936, len*2);
     Result := CHTToCHS(buf, pszDest, cbDest);
     FreeMem(buf);
    end;function GBStringToBig5String(Src : string) : string;
    begin
     Result := CHSStringToCHTString(StringConv(Src, 936, 950));
    end;function GBToBig5(pszSrc, pszDest : PChar; cbDest : Longint) : Longint;
    var
     buf : PChar;
     len : Integer;
    begin
     len := StrLen(pszSrc)+1;
     GetMem(buf, len*2);
     ZeroMemory(buf, len*2);
     StrConv(pszSrc, 936, buf, 950, len*2);
     Result := CHSToCHT(buf, pszDest, cbDest);
     FreeMem(buf);
    end;end.
      

  2.   

    我剛完成一個軟件,是多版本的.
    用數據庫把所有的控件的Caption存放到數據庫
    如果系統作的是繁體,對應的把簡體的Caption也存放到數據庫
    可用ini文件控制版本.
    需要哪種版本用程序取那種版本的Caption即可
    任何系統均實用
      

  3.   

    附上代碼
    向數據庫寫caption
    procedure TFrmmain.GetCaption(FRM:TForm);
    var
    i:integer;
    Compt:TComponent;
    begin
      for I := FRM.ComponentCount  - 1 downto 0 do
      begin
        Compt:=FRM.Components[i];
         try
         if (Compt is Tbitbtn) then
         begin
           ExecuteSQL(dm.ADOQVerSion,'INSERT INTO Version (RecordNO,Englishi) VALUES('''+
                               FrmBaseInfo.AddNo('RecordNO','Version')+''','''+
                               (Compt as Tbitbtn).Caption+''')')  ;
         end
         else
         if (Compt is TSeSkinDBRadioGroup) then
         begin
           ExecuteSQL(dm.ADOQVerSion,'INSERT INTO Version (RecordNO,Englishi) VALUES('''+
                               FrmBaseInfo.AddNo('RecordNO','Version')+''','''+
                               (Compt as TSeSkinDBRadioGroup).Caption+''')')  ;
         end
         else if (Compt is TLabel) then
         begin
           ExecuteSQL(dm.ADOQVerSion,'INSERT INTO Version (RecordNO,Englishi) VALUES('''+
                               FrmBaseInfo.AddNo('RecordNO','Version')+''','''+
                               (Compt as TLabel).Caption+''')')  ;
         end
         else if (Compt is TRzGroup) then
         begin
           ExecuteSQL(dm.ADOQVerSion,'INSERT INTO Version (RecordNO,Englishi) VALUES('''+
                               FrmBaseInfo.AddNo('RecordNO','Version')+''','''+
                               (Compt as TRzGroup).Caption+''')')  ;
         end
         else if (Compt is TRZTabSheet) then
         begin
           ExecuteSQL(dm.ADOQVerSion,'INSERT INTO Version (RecordNO,Englishi) VALUES('''+
                               FrmBaseInfo.AddNo('RecordNO','Version')+''','''+
                               (Compt as TRZTabSheet).Caption+''')')  ;
         end
         else if (Compt is TSpeedButton) then
         begin
           ExecuteSQL(dm.ADOQVerSion,'INSERT INTO Version (RecordNO,Englishi) VALUES('''+
                               FrmBaseInfo.AddNo('RecordNO','Version')+''','''+
                               (Compt as TSpeedButton).Caption+''')')  ;
         end
         else if (Compt is TMainMenu) then
          begin
           ExecuteSQL(dm.ADOQVerSion,'INSERT INTO Version (RecordNO,Englishi) VALUES('''+
                               FrmBaseInfo.AddNo('RecordNO','Version')+''','''+
                               (Compt as TMainMenu).Items.Items[0].Items[0].Caption+''')');       ExecuteSQL(dm.ADOQVerSion,'INSERT INTO Version (RecordNO,Englishi) VALUES('''+
                               FrmBaseInfo.AddNo('RecordNO','Version')+''','''+
                               (Compt as TMainMenu).Items.Items[0].Items[1].Caption+''')');
           ExecuteSQL(dm.ADOQVerSion,'INSERT INTO Version (RecordNO,Englishi) VALUES('''+
                               FrmBaseInfo.AddNo('RecordNO','Version')+''','''+
                               (Compt as TMainMenu).Items.Items[0].Items[2].Caption+''')');       ExecuteSQL(dm.ADOQVerSion,'INSERT INTO Version (RecordNO,Englishi) VALUES('''+
                               FrmBaseInfo.AddNo('RecordNO','Version')+''','''+
                               (Compt as TMainMenu).Items.Items[0].Items[3].Caption+''')');
           ExecuteSQL(dm.ADOQVerSion,'INSERT INTO Version (RecordNO,Englishi) VALUES('''+
                               FrmBaseInfo.AddNo('RecordNO','Version')+''','''+
                               (Compt as TMainMenu).Items.Items[0].Items[4].Caption+''')');       ExecuteSQL(dm.ADOQVerSion,'INSERT INTO Version (RecordNO,Englishi) VALUES('''+
                               FrmBaseInfo.AddNo('RecordNO','Version')+''','''+
                               (Compt as TMainMenu).Items.Items[0].Items[5].Caption+''')');
           ExecuteSQL(dm.ADOQVerSion,'INSERT INTO Version (RecordNO,Englishi) VALUES('''+
                               FrmBaseInfo.AddNo('RecordNO','Version')+''','''+
                               (Compt as TMainMenu).Items.Items[1].Items[0].Caption+''')');       ExecuteSQL(dm.ADOQVerSion,'INSERT INTO Version (RecordNO,Englishi) VALUES('''+
                               FrmBaseInfo.AddNo('RecordNO','Version')+''','''+
                               (Compt as TMainMenu).Items.Items[1].Items[1].Caption+''')');
           ExecuteSQL(dm.ADOQVerSion,'INSERT INTO Version (RecordNO,Englishi) VALUES('''+
                               FrmBaseInfo.AddNo('RecordNO','Version')+''','''+
                               (Compt as TMainMenu).Items.Items[2].Items[0].Caption+''')');       ExecuteSQL(dm.ADOQVerSion,'INSERT INTO Version (RecordNO,Englishi) VALUES('''+
                               FrmBaseInfo.AddNo('RecordNO','Version')+''','''+
                               (Compt as TMainMenu).Items.Items[2].Items[1].Caption+''')');
           ExecuteSQL(dm.ADOQVerSion,'INSERT INTO Version (RecordNO,Englishi) VALUES('''+
                               FrmBaseInfo.AddNo('RecordNO','Version')+''','''+
                               (Compt as TMainMenu).Items.Items[2].Items[2].Caption+''')');       ExecuteSQL(dm.ADOQVerSion,'INSERT INTO Version (RecordNO,Englishi) VALUES('''+
                               FrmBaseInfo.AddNo('RecordNO','Version')+''','''+
                               (Compt as TMainMenu).Items.Items[3].Items[0].Caption+''')');
           ExecuteSQL(dm.ADOQVerSion,'INSERT INTO Version (RecordNO,Englishi) VALUES('''+
                               FrmBaseInfo.AddNo('RecordNO','Version')+''','''+
                               (Compt as TMainMenu).Items.Items[3].Items[1].Caption+''')');       ExecuteSQL(dm.ADOQVerSion,'INSERT INTO Version (RecordNO,Englishi) VALUES('''+
                               FrmBaseInfo.AddNo('RecordNO','Version')+''','''+
                               (Compt as TMainMenu).Items.Items[3].Items[2].Caption+''')');
           ExecuteSQL(dm.ADOQVerSion,'INSERT INTO Version (RecordNO,Englishi) VALUES('''+
                               FrmBaseInfo.AddNo('RecordNO','Version')+''','''+
                               (Compt as TMainMenu).Items.Items[3].Items[3].Caption+''')');       ExecuteSQL(dm.ADOQVerSion,'INSERT INTO Version (RecordNO,Englishi) VALUES('''+
                               FrmBaseInfo.AddNo('RecordNO','Version')+''','''+
                               (Compt as TMainMenu).Items.Items[4].Items[0].Caption+''')');
           ExecuteSQL(dm.ADOQVerSion,'INSERT INTO Version (RecordNO,Englishi) VALUES('''+
                               FrmBaseInfo.AddNo('RecordNO','Version')+''','''+
                               (Compt as TMainMenu).Items.Items[4].Items[1].Caption+''')');
          end
         else if (Compt is TRzToolbutton) then
         begin
           ExecuteSQL(dm.ADOQVerSion,'INSERT INTO Version (RecordNO,Englishi) VALUES('''+
                               FrmBaseInfo.AddNo('RecordNO','Version')+''','''+
                               (Compt as TRzToolbutton).hint+''')');
         end
         else if (Compt is TRzButton) then
         begin
           ExecuteSQL(dm.ADOQVerSion,'INSERT INTO Version (RecordNO,Englishi) VALUES('''+
                       FrmBaseInfo.AddNo('RecordNO','Version')+''','''+
                       (Compt as TRzButton).Caption+''')');
         end
         else if (Compt is TGroupBox) then
         begin
           ExecuteSQL(dm.ADOQVerSion,'INSERT INTO Version (RecordNO,Englishi) VALUES('''+
                       FrmBaseInfo.AddNo('RecordNO','Version')+''','''+
                       (Compt as TGroupBox).Caption+''')');
         end
         else if (Compt is TRzLabel) then
         begin
           ExecuteSQL(dm.ADOQVerSion,'INSERT INTO Version (RecordNO,Englishi) VALUES('''+
                       FrmBaseInfo.AddNo('RecordNO','Version')+''','''+
                       (Compt as TRzLabel).Caption+''')');
         end;
       except
       end;
      end;
    end;
      

  4.   

    取出captionfunction TFrmmain.Get_chinese_caption(s_caption:string;VersinonFlag:string) : string;begin  if not DM.ADOQVerSion.Active then DM.ADOQVerSion.Open;
      try
           if UpperCase(VersinonFlag)='E' then
          result :=s_caption
        else
        if UpperCase(VersinonFlag)='C'then
        begin
            if  (trim(s_caption)<>NULL) and (trim(s_caption)<>'')   then
           begin
                   result :=DM.ADOQVerSion.Lookup('RecordNO;Englishi',VarArrayOf([0,trim(s_caption)]),'ChineseGBig5');
                  end;
          
        end
        else
        if UpperCase(VersinonFlag)='P' then
        begin
          if(trim(s_caption)<>NULL) and (trim(s_caption)<>'') then
          begin
            result :=DM.ADOQVerSion.Lookup('RecordNO;Englishi',VarArrayOf([0,trim(s_caption)]),'ChineseGB')
          end;
          
        end
      except
        result:=s_caption;
      end;
    end;
      

  5.   

    to fj218(洞庭风) :
    转换测试的结果不太对呀!是不是少了什么??请指教,多谢呵呵!