输入姓名后 ,其拼音自动生成,谁有这个函数,马上送分.....

解决方案 »

  1.   

    以前的帖子和文档中心里都有,自己search一下吧,浪费了...
      

  2.   

    到这个地址下载即可
    http://www.vcfan.com/delphi/down_files.asp?id=860
      

  3.   

    var  iHandleCount: integer;  pList: array[1..nHKL_LIST] of HKL;  szImeName: array[0..254] of char;  i: integer;  sFound: string;begin  lstComposition.Items.Clear;  iHandleCount := GetKeyboardLayoutList(nHKL_LIST, pList);  for i := 1 to iHandleCount do  begin    if ImmEscape(pList[i], 0, IME_ESC_IME_NAME, @szImeName) > 0 then    begin      sFound := QueryCompStr(pList[i], edtExam.Text);      if sFound <> '' then        lstComposition.Items.Add(StrPas(szImeName) + ': ' + sFound);    end;  end;**************金山词霸 (2.0-2000 版本 ) 内有 gb2py.idx 和 gbk2py.idx,内有国标 GB 、 GBK 的每个汉字的拼音和声调。可用拿来一用。 
    下面上 Delphi 写的 gb2py 函数。 function gb2py(hanzi:pchar):pchar;varSfile:Tmemorystream;pos,temp,ipos,len:integer;py:array[0..20] of char;begin  pos:=($fe-$a1)*(ord(hanzi[0])-$b0)+ord(hanzi[1])-$a1;  sfile:=Tmemorystream.create;  sfile.loadfromfile('C:\Program Files\KINGSOFT\XDICT\gb2py.idx');  //data:=sfile.memory;  sfile.Seek($1608+pos*4,soFromBeginning);  sfile.Read(ipos,4);  sfile.Read(temp,4);  len:=temp-ipos;  sfile.Seek(ipos+1,soFromBeginning);  sfile.Read(py,len);  py[len-1]:=#0;  sfile.Free;  result:=py;end;
      

  4.   


    procedure TForm1.button1Click(Sender: TObject);
      function GetPYIndexChar( hzchar:string):char;
        begin
          case WORD(hzchar[1]) shl 8 + WORD(hzchar[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..$D188 : result := 'X';
            $D1B9..$D4D0 : result := 'Y';
            $D4D1..$D7F9 : result := 'Z';
          else
            result := char(32);
          end;
        end;var
      I: Integer;
      PY: string;
      s: string;
    begin
      s := '' ;
      I := 1;
      while I <= Length(Edit1.Text) do
      begin
        PY := Copy(Edit1.Text, I , 1);
        if PY >= Chr(128) then
        begin
          Inc(I);
          PY := PY + Copy(Edit1.Text, I , 1);
          s := s + GetPYIndexChar(PY);
        end
        else
          s := s + PY;
        Inc(I);
      end;
      Edit2.Text := s;
    end;