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

xsmuhtar 2011-11-29 03:09:46
delphi如何获取汉字拼音及音标
...全文
262 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xsmuhtar 2011-11-29
  • 打赏
  • 举报
回复
msime.pas 文件在这个地方可以下载
http://download.csdn.net/detail/xsmuhtar/3857627
xsmuhtar 2011-11-29
  • 打赏
  • 举报
回复
我有一个源代码,这个代码正常获取拼音及音标,但是每个汉字后不留空格,我要改一下要留空格的,如何改我不知道
代码如下:

unit Unit1;

interface

uses
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;

lhy 2011-11-29
  • 打赏
  • 举报
回复
这有一个没音标的
http://www.cnblogs.com/wormday/articles/278436.html
xsmuhtar 2011-11-29
  • 打赏
  • 举报
回复
我是一个新手,你说的这些我不知道,你能帮我弄下来吗?
lhy 2011-11-29
  • 打赏
  • 举报
回复
1看看网上有没有对照表,下载一个
2前几千个最常用的汉字是按照拼音排序的,找到每个拼音的分界汉字,自己做一个对照表。

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧