delphi如何获取汉字拼音及音标

解决方案 »

  1.   

    这有一个没音标的
    http://www.cnblogs.com/wormday/articles/278436.html
      

  2.   

    我有一个源代码,这个代码正常获取拼音及音标,但是每个汉字后不留空格,我要改一下要留空格的,如何改我不知道
    代码如下:unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, msime, DB, ADODB;type
      TForm1 = class(TForm)
        Button2: TButton;
        Memo1: TMemo;
        ADOQuery1: TADOQuery;
        label2: TLabel;
        Edit1: TEdit;
        GroupBox1: TGroupBox;
        Button1: TButton;
        EditText: TEdit;
        MemoOutput: TMemo;
        Edit2: TEdit;
        GroupBox2: TGroupBox;
        Edit3: TEdit;
        Button3: TButton;
        procedure Button2Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}uses ActiveX, ComObj;procedure TForm1.Button3Click(Sender: TObject);
    var
      vGuid: TGUID;
      vFELanguage: IFELanguage;
      vError: Integer;
      vCaps: DWORD;
      vOutput: PMORRSLT;
      W: WideString;
      vPinYin: WideString;
      S: WideString;
      I: Integer;
      iMonoRubyPos: WORD;
      iReadIdxWDD: WORD;
      vMonoRubyPos: PWORD;
      vReadIdxWDD: PWORD;
    begin
      Memo1.Clear;
      if CLSIDFromString(PWideChar(WideString('MSIME.China')), vGuid) <> S_OK then
      begin
        ShowMessage(SysErrorMessage(GetLastError));
        Exit;
      end;
      vError := CoCreateInstance(vGuid, nil, CLSCTX_SERVER,
        IFELanguage, vFELanguage);
      if vError <> S_OK then
      begin
        ShowMessage(SysErrorMessage(vError));
        Exit;
      end;
      vError := vFELanguage.Open;
      if vError <> S_OK then
      begin
        ShowMessage(SysErrorMessage(vError));
        Exit;
      end;
      vCaps := 0;
      vError := vFELanguage.GetConversionModeCaps(@vCaps);
      if vError <> S_OK then
      begin
        ShowMessage(SysErrorMessage(vError));
        Exit;
      end;
      vOutput := nil;
      W := Edit3.Text;
      vError := vFELanguage.GetJMorphResult(FELANG_REQ_REV,
        FELANG_CMODE_PINYIN or FELANG_CMODE_NOINVISIBLECHAR,
        Length(W), PWideChar(W), nil, @vOutput);
      if vError <> S_OK then
      begin
        ShowMessage(SysErrorMessage(vError));
        Exit;
      end;
      if not Assigned(vOutput) then Exit;
      vPinYin := Copy(vOutput^.pwchOutput+' ', 1, vOutput^.cchOutput);
      Memo1.Lines.Add('=' + vPinYin); { vMonoRubyPos := vOutput^.paMonoRubyPos;
      vReadIdxWDD := vOutput^.pchReadIdxWDD;
      iReadIdxWDD := 1;
      iMonoRubyPos := vMonoRubyPos^ + 1;
      Inc(vMonoRubyPos);
      I := 1;
      while I <= Length(W) do
      begin
        while I <= vReadIdxWDD^ do
        begin
          Inc(I);
          if I > vReadIdxWDD^ then
          begin
            S := Copy(vPinYin, iMonoRubyPos, vMonoRubyPos^ - iMonoRubyPos + 1);
            if S <> '' then
              S := Copy(W, iReadIdxWDD, I - iReadIdxWDD) + '(' + S + ')'
            else S := Copy(W, iReadIdxWDD, I - iReadIdxWDD);
            Memo1.Lines.Add(S);
            iReadIdxWDD := I;
            iMonoRubyPos := vMonoRubyPos^ + 1;
            Break;
          end;
          Inc(vReadIdxWDD);
          Inc(vMonoRubyPos);
        end;
        Inc(vReadIdxWDD);
        Inc(vMonoRubyPos);
      end;
      CoTaskMemFree(vOutput); // 释放资源
      vFELanguage.Close;
      vFELanguage := nil;   }
    end;
      

  3.   

    msime.pas 文件在这个地方可以下载
    http://download.csdn.net/detail/xsmuhtar/3857627