thanks

解决方案 »

  1.   

    function tform1.GetPYIndexChar(const sScrStr: string): string;
    var
      iCount: integer;
      sHz, sPYM: string;
    begin
      iCount := 1;
      while iCount <= length(sScrStr) do
        begin
          sHz := COPY(sScrStr, iCount, 2);
          case WORD(sHz[1]) shl 8 + WORD(sHz[2]) of
            $B0A1..$B0C4: result := 'A';
            $B0C5..$B2C0: result := 'B';
            $B2C1..$B4ED: result := 'C';
            $B4EE..$B6E9: result := 'D';
            $B6EA..$B7A1: result := 'E';
            $B7A2..$B8C0: result := 'F';
            $B8C1..$B9FD: result := 'G';
            $B9FE..$BBF6: result := 'H';
            $BBF7..$BFA5: result := 'J';
            $BFA6..$C0AB: result := 'K';
            $C0AC..$C2E7: result := 'L';
            $C2E8..$C4C2: result := 'M';
            $C4C3..$C5B5: result := 'N';
            $C5B6..$C5BD: result := 'O';
            $C5BE..$C6D9: result := 'P';
            $C6DA..$C8BA: result := 'Q';
            $C8BB..$C8F5: result := 'R';
            $C8F6..$CBF9: result := 'S';
            $CBFA..$CDD9: result := 'T';
            $CDDA..$CEF3: result := 'W';
            $CEF4..$D1B8: result := 'X';
            $D1B9..$D4D0: result := 'Y';
            $D4D1..$D7F9: result := 'Z';
            else
              result := '';
          end;
          if Result = '' then
            begin
              sPYM := sPYM + COPY(sScrStr, iCount, 1);
              iCount := iCount + 1;
            end
          else
            begin
              sPYM := sPYM + Result;
              iCount := iCount + 2;
            end;
          Result := sPYM;
        end; //end While
    end;procedure TForm1.Edit1Exit(Sender: TObject);
    begin
       Edit2.text := GetPYIndexChar(Edit1.Text);
    end;
      

  2.   

    有位同仁写了一个DLL文件。你可以找看看。叫QueryPY.dll
      

  3.   

    轉貼
    ///取的漢字的拼音的首字母
    function GetHzPy(const AHzStr: string): string;
    const
      ChinaCode: array[0..25, 0..1] of Integer = ((1601, 1636), (1637, 1832), (1833, 2077),
        (2078, 2273), (2274, 2301), (2302, 2432), (2433, 2593), (2594, 2786), (9999, 0000),
        (2787, 3105), (3106, 3211), (3212, 3471), (3472, 3634), (3635, 3722), (3723, 3729),
        (3730, 3857), (3858, 4026), (4027, 4085), (4086, 4389), (4390, 4557), (9999, 0000),
        (9999, 0000), (4558, 4683), (4684, 4924), (4925, 5248), (5249, 5589));
    var
      i, j, HzOrd: integer;
    begin
      i := 1;
      while i <= Length(AHzStr) do
      begin
        if (AHzStr[i] >= #160) and (AHzStr[i + 1] >= #160) then
        begin
          HzOrd := (Ord(AHzStr[i]) - 160) * 100 + Ord(AHzStr[i + 1]) - 160;
          for j := 0 to 25 do
          begin
            if (HzOrd >= ChinaCode[j][0]) and (HzOrd <= ChinaCode[j][1]) then
            begin
              Result := Result + char(byte('A') + j);
              break;
            end;
          end;
          Inc(i);
        end else Result := Result + AHzStr[i];
        Inc(i);
      end;
    end;
      

  4.   

    我的函数能处理常用汉字和非常用汉字
    function  get_pym(hzstr:string):string;
    //传入参数为:hzstr 类型:string (即汉字串)
    var realstr,pym,pym1:string;
        ch1,ch2:char;
        val,xp:integer;
    begin
       //去掉空串
       realstr:=trim(hzstr);
       pym:='';
       xp:=1;
       while xp<=length(realstr) do
         begin
          ch1:=copy(realstr,xp,1)[1];
          if (xp=length(realstr)) or (ord(ch1)<128) then
           pym1:=''+ch1
          else
           begin
            ch2:=copy(realstr,xp+1,1)[1];
            pym1:=' ';
            val:=(ord(ch1) - 176)*94+(ord(ch2) - 160);
            if ord(ch1)<128 then
              pym1:=''+ch1   // 80
            else if ord(ch1)<176 then
              pym1:=' '   // A1
            else
              case ord(ch1) of
              216:pym1:=copy('CJWGNSPGCGNENYPBTY ZDXYKYGTDJNNJQMBSGZ CYJSYYQPGKBZGY YWJKGKLJYWKPJQHY W D LSGMRYPYWWCCKZNKYDG',ord(ch2) - 160,1);
              217:pym1:=copy('TTNGJEYKK YT JNM YLQLYPYSFQRP  L BTGKJFYXJWZLTBN X JJJ XDTT QZYCDXXHG K PHFFSS YBGMXLPBYLL HLX',ord(ch2) - 160,1);
              218:pym1:=copy('S  M JH OJNGHD QYKLGJH GQ HXQGKEZ WY  S JXYEYXADZPMDS M JZQJY   J WQJBDZBXG NZ PWHKXHQKMWFBPBY',ord(ch2) - 160,1);
              219:pym1:=copy('DTJ  KQHYLYGXFPTYJYY P ZLF HMQ HGMXXSXJ  D SBBQBEF JYHWWG KPYLQBGLDL DTNMAYDDK  NGYC GXLY AYBN',ord(ch2) - 160,1);
              220:pym1:=copy('PTSDKDYLHGYMYL XPY JNDQJWXQXFYYFJLEQB RX CQWQQ BNKYMGPLBMJRQ FLNYMYQMTQTRBCJTH TQFRXQHXMJJ  LX',ord(ch2) - 160,1);
              221:pym1:=copy('QGJMSH KB WYEMYLTXFSYD GL  JQ SJNQB  TYHBFTDCYZDJWY HQFRXW KQKXE PTLPXJ  RMEBWHJLBJ LYYSMDXLCL',ord(ch2) - 160,1);
              222:pym1:=copy('QKXLHXJRZJMFQHXHWYWSBHTRXXGLHQHFNMNYKLDYXZPYLGG MT FPAJJZYLJTYA JGBJPLQGD YQYAXBKY E J  NSLY H',ord(ch2) - 160,1);
              223:pym1:=copy(' XLZCGHPX H NYTD B JKDL AYFMYDLEBBGQYZKXGLDNDNYSKJ HDLYXBCGHXYPKDJMM NGMM LGW SZXZJFZNML  THC ',ord(ch2) - 160,1);
              224:pym1:=copy('YDBDLL  DDNLKJYKJSY JLKWHQASDKNH SGANHDAASHT PLCPQYBSDMPJLPZJOQLCDHJJYSPRCHNWJNLHLYYQYHW PTDZG',ord(ch2) - 160,1);
              225:pym1:=copy('WWM FFJQQQQYXACLBHKDJXDGMMYDJX LLSYGXGKJRYWZWYCLZM SJ LDBYD FCXYHL  HY JQ  QAGMNYXPFRK SBJLYXY',ord(ch2) - 160,1);
              226:pym1:=copy('SYGLN CMH WWMN JJLXXH HSY  TT RY YXBYH SMXJS NPWGPXXTAYBGAJ XLY DC W O WK  SBNH PDYZNF YYTYCKX',ord(ch2) - 160,1);
              227:pym1:=copy('KYBSQKKYTQQXF W HCYKEL QBSQYJQ  LMTH  WHMKTLKJLY  WHEQQHTQH PQ QS FY MDMGBWHWLG LLYSDLMLXPTHMJ',ord(ch2) - 160,1);
              228:pym1:=copy('HWLJ YH JXHTX LHXRSWLW JCBXMH QXSD PMGFC GL XYMJSHXPJXWMYQK MYPLRTHB FTPMHYXLCHLHL YLXG S  T L',ord(ch2) - 160,1);
              229:pym1:=copy('SLD LRPBH HXYYFHB GDMY NQQWL HJJ YWJZYEJJDHPBLQXTQKWHL HQXAGTLXLJXMSLXHT K JEC J JNMFBY  F WYB',ord(ch2) - 160,1);
              230:pym1:=copy('JZGNYSD  QYR LJP LPWXSDWEJBJ B NAYTWGMPAP LYQP L X BNM GGFNZJJ ZSFZYNDXHPLQK C WAL BC JX Y GWK',ord(ch2) - 160,1);
              231:pym1:=copy('YP GXF F DKH GXDLQF GD LQWZKXTMHSBG MJ RGLYJBPMLMSXLZ QQH YJ ZYDJWBMJKLDDPMJEGXYHYL HLQYQHKYCW',ord(ch2) - 160,1);
              232:pym1:=copy(' JMYYXNATJHYCCX PCQLBZWWYTWBQ MLPMYRJ  CXFP N  LJPLXXY T LGDLT KLYR  GQTGJHHGJLJAXFGFJZSL FDQ ',ord(ch2) - 160,1);
              233:pym1:=copy('L LGJDJC N LLJPJQD  L JXMY FTSXGCG BR XJQQ T HGYQTJQQLZXJYLYLB YAMC TYLPDJBYRE KL Y HLY  QL NW',ord(ch2) - 160,1);
              234:pym1:=copy(' ZCLLWJQJJJKDGJZOLBBZPPGLGHTGZXYGHZMY NQ Y YHBHGXKAMTXYXNB KY ZGJ LQJDF JXDYGJQJ PMG GJJJPKQSB',ord(ch2) - 160,1);
              235:pym1:=copy('GBMMCJS  LPQPDX DYYKY  JDDYYGYWRHJRTG NYQLDKLJ  ZG Q JGDYKSHP MTLCPWNJYFYZDJCNMWE  YGLBT  GMS ',ord(ch2) - 160,1);
              236:pym1:=copy('LLYXQ XXBSJSBB GGHFJLWPM JNLYYWDQ H XTYYWHM YHYWD XBTLM YYYFSXJC TX LHJHF SX QHFZM C TQ    RTT',ord(ch2) - 160,1);
              237:pym1:=copy('DJHNNYZQQMNQDMMG YDXMJGDH DY BFFALLLTD TFXMXQ DNGWQDBD  JDXB GSQQDD CMBK FFXMKDM  YYSZ MLJDSYN',ord(ch2) - 160,1);
              238:pym1:=copy('SPRSKMKMP KL DBQTF  WTFGGLYPLLJZHGJ GYP LT  M NBTJBQFKTHBY GKPBBYMTD  XTBNPDKLEY JNYDDYK DDHQH',ord(ch2) - 160,1);
              239:pym1:=copy(' D S TARLLTKZLGECLLKJLQJAQNBDKKGHPJTZQKSE SHALQFMMGJNLYJBBTMLYZXDXJPLDLPCQDH Y B  C BZM LJFLKR',ord(ch2) - 160,1);
              240:pym1:=copy(' JSNFRGJHXPDHYJY   DLQ SE GXLBLGYXTWMAB HECMWYJY LLJJYHLGBDJL LYGKD P XJYY LWCX  FGWYYDLYHCLJS',ord(ch2) - 160,1);
              241:pym1:=copy(' MBJHBLY LY BLYDPDQYSXQ BYTDKYXJY  NRJMPDJGKL LJB TBJDDB LBL  QRPYXJCJLZ SHLTOL NMDDDLNGKAQHQH',ord(ch2) - 160,1);
              242:pym1:=copy('JHYKHE NMSHRP QQJ HGMFPRXHJGDY HGHLYR QL YQJN SQTKQJYM  XWL FQQQXYFGGYPTQWLM RNFKKFSYYLQBMQAMM',ord(ch2) - 160,1);
              243:pym1:=copy('MYX TP HCPTXX   MPHP HM LMLDQFYQX  YJDJJ ZHQPD ZGLSTJB KBXYQ J GP XQ Q RQTBDKYX KHHGFLB SMDLDG',ord(ch2) - 160,1);
              244:pym1:=copy('DZDBL YY  NN  YB B GL ZX WM C MQNJQ BDQSJTXXMBLTXZCLZSHZCXRQ GJYLX FJPHYM QQYDFQJQLZZN   DG Y ',ord(ch2) - 160,1);
              245:pym1:=copy('CTXM Y  TLKPHTXHTLBJXJLX CDQXCBBTJFQ F LTJBTKQBXXJJLJ H  DB JD  JDCPRNPQ JPFC L L X DMXMPHJ  Z',ord(ch2) - 160,1);
              246:pym1:=copy('GS ZQLYLWTJPF YAXM J TZYY WMYTCSJJLJ QLWZMALBXYFBPNLSFHTGJWEJJXXGLLJETG HJQLZFK GNND ZFD QFHBS',ord(ch2) - 160,1);
              247:pym1:=copy('AQTGYLBXMMYG ZLDYDQMJJRGBJTKGDHGKBLQKBDMBYLXW XYTTYBKMRTJZXQJBHLMHMJQ MQA LD YXYQDLQCAFYWYXQH ',ord(ch2) - 160,1);
              else ;
            end;
       if val < 37 then
          pym1:='A'
       else
       if val < (2*94+33) then
          pym1:='B'
       else
       if val < (4*94+78) then
          pym1:='C'
       else
       if val < (6*94+74) then
          pym1:='D'
       else
       if val < (7*94+2) then
          pym1:='E'
       else
       if val < (8*94+33) then
          pym1:='F'
       else
       if val < (9*94+94) then
          pym1:='G'
       else
       if val < (11*94+87) then
          pym1:='H'
       else
       if val < (15*94+6) then
          pym1:='J'
       else
       if val < (16*94+12) then
          pym1:='K'
       else
       if val < (18*94+72) then
          pym1:='L'
       else
       if val < (20*94+35) then
          pym1:='M'
       else
       if val < (21*94+22) then
          pym1:='N'
       else
       if val < (21*94+30) then
          pym1:='O'
       else
       if val < (22*94+58) then
          pym1:='P'
       else
       if val < (24*94+27) then
          pym1:='Q'
       else
       if val < (24*94+86) then
          pym1:='R'
       else
       if val < (27*94+90) then
          pym1:='S'
       else
       if val < (29*94+58) then
          pym1:='T'
       else
       if val < (30*94+84) then
          pym1:='W'
       else
       if val < (33*94+25) then
          pym1:='X'
       else
       if val < (36*94+49) then
          pym1:='Y'
       else
       if val < (39*94+90) then
          pym1:='Z';
      end;
      pym := pym+pym1;
      if ord(ch1)<128 then
       xp:=xp+1
      else
       xp:=xp+2; end; // end of while do
    result:=pym;
    end;