很多输入组件都有输入法设置项,可以随时改动。
问题: 求一自动产生拼音码的函数,谢谢! ( 积分: 100 )
分类: 控件 - 开发
来自: rockxu, 时间: 2002-07-14 10:46:00, ID: 1201559
就是把姓名当作参数输入后,能返回该姓名的汉语拼音的声母,如输入李鹏就返回LP
谢谢!
来自: yzhshi, 时间: 2002-07-14 10:52:00, ID: 1201573
这个如何?
{获取指定汉字的拼音索引字母,如:“汉”的索引字母是“H”}
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(0);
end;
end;
来自: yzhshi, 时间: 2002-07-14 10:53:00, ID: 1201574
还有这个,不过这个是获得全部的拼音了。
unit py;
(*
Copyright (C) Trueway(TM) 6, 1999 - 3, 2000, All rights reserved.
Trueway(TM) is the trademark of programs by LiQunwei
外挂式输入码生成器 Version 4.0
Created On: 06/05/1999
Last Update: 03/23/2000
Update History:
06/05 建立本程序的思想并开始编制程序
06/06 完成程序的前期版本
06/07 整理程序
06/14 修正了一个 Bug
06/16 除去了生成全拼中的 '.'; 使用 PChar 作为参数
使用 PChar 作为参数可省去使用 DELPHIMM.DLL (BORLNDMM.DLL)
使 C++ 语言能直接使用
06/17 将参数的命名规范化(凶牙利命名)
增加了五种发音(如 女 'nv' )
06/21 修正了一个 Bug
08/14 调整 iMode 的作用
将 163 区的全角字符返回半角字符
08/15 增加了大小写罗马数字的识别
09/04 增加了 11, 12, 13 三种方式, 对应 1, 2, 3, 仅不输出 '?'
09/23 增加希腊字母的识别(转为标准的对应英文字母)
10/23 增加 MakeSpellCode, GetSpellCode, 改用二进制标志位判断
10/24 拼音索引表索引改为短整数, 可节省 48K 的空间
01/27 修改 iCount 的含义
01/30 增加 StrPch 函数
03/23 使代码字典外挂
Notice:
程序思想来源于 UCDOS 7.0 拼音输入法
汉字发音从中文版的 Windows 98 的全拼输入法词库取
支持 GBK 汉字
处理多音字的发音为最常用发音
如 '着' 字有 'Zhe' 'Zhao' 'Zhuo' 三种发音, 输出 'Zhe'
请正确设置 iMode 参数
在 Delphi 3.0 或更高的版本中使用
调用示例:
...
First;
while not EOF do begin
Edit;
FieldByName(PyFieldName).AsString :=
String(MakePyCode(FieldByName(ChnFieldName).AsString, 1, 6);
Next;
end;
...
*)
interface
function MakeSpellCode(stText: string; iMode, iCount: Integer): string;
{ iMode 二进制功能位说明
X X X X X X X X X X X X X X X X
3 2 1
1: 0 - 只取各个汉字声母的第一个字母; 1 - 全取
2: 0 - 遇到不能翻译的字符不翻译; 1 - 翻译成 '?' (本选项目针对全角字符)
3: 0 - 生成的串不包括非数字, 字母的其他字符; 1 - 包括
(控制全角的要输出非数字, 字母字符的; 半角的非数字, 字母字符)
请在调用之前调用 LoadIMCode 函数
}
function GetSpellCode(szText: PChar; iMode, iCount: Integer): PChar; stdcall;
function LoadIMCode(as_dict_file: PChar): integer; stdcall;
// 切换输入码数据源
// 调用示例: LoadIMCode('winpy.txt');
// 此函数只需在切换字典数据时使用
function UseInplace: integer; stdcall;
// 使用内置拼音代码字典
function UseOutplace: integer; stdcall;
// 使用外置拼音代码字典
function IsOutplace: integer; stdcall;
// 是否外置
implementation
uses
SysUtils;
type
{ 拼音代码表 }
TPYCode = record
PYCode: string[6];
end;
TFPYCodes = array [1..126, 1..191] of TPYCode;
var
ImCodes: TFPYCodes;
const
PYMUSICCOUNT = 405;
PyMusicCode: array [1..PYMUSICCOUNT] of string[6] = { 汉字基本发音表 } (
'a', 'ai', 'an', 'ang', 'ao', 'ba', 'bai', 'ban', 'bang', 'bao',
'bei', 'ben', 'beng', 'bi', 'bian', 'biao', 'bie', 'bin', 'bing', 'bo',
'bu', 'ca', 'cai', 'can', 'cang', 'cao', 'ce', 'ceng', 'cha', 'chai',
'chan', 'chang', 'chao', 'che', 'chen', 'cheng', 'chi', 'chong', 'chou', 'chu',
'chuai', 'chuan', 'chuang', 'chui', 'chun', 'chuo', 'ci', 'cong', 'cou', 'cu',
'cuan', 'cui', 'cun', 'cuo', 'da', 'dai', 'dan', 'dang', 'dao', 'de',
'deng', 'di', 'dian', 'diao', 'die', 'ding', 'diu', 'dong', 'dou', 'du',
'duan', 'dui', 'dun', 'duo', 'e', 'en', 'er', 'fa', 'fan', 'fang',
'fei', 'fen', 'feng', 'fu', 'fou', 'ga', 'gai', 'gan', 'gang', 'gao',
'ge', 'ji', 'gen', 'geng', 'gong', 'gou', 'gu', 'gua', 'guai', 'guan',
'guang', 'gui', 'gun', 'guo', 'ha', 'hai', 'han', 'hang', 'hao', 'he',
'hei', 'hen', 'heng', 'hong', 'hou', 'hu', 'hua', 'huai', 'huan', 'huang',
'hui', 'hun', 'huo', 'jia', 'jian', 'jiang', 'qiao', 'jiao', 'jie', 'jin',
'jing', 'jiong', 'jiu', 'ju', 'juan', 'jue', 'jun', 'ka', 'kai', 'kan',
'kang', 'kao', 'ke', 'ken', 'keng', 'kong', 'kou', 'ku',
来自: yzhshi, 时间: 2002-07-14 10:54:00, ID: 1201578
哈哈哈,还有第三个,这个更满足你的需求了。[
]
unit PY;
interface
uses sysutils;
// 获取汉字的拼音首字符,这个函数将用在GetPYIndexStr 中.
function GetPYIndexChar(strChinese: string; bUpCase: Boolean = True): char;
// 获取多个汉字的拼音首字符组成的字符串.
function GetPYIndexStr(strChinese: string; bUpCase: Boolean = True): string;
implementation
function GetPYIndexChar(strChinese: string;bUpCase: Boolean = True): char;
begin
// 根据汉字表中拼音首字符分别为"A"至"Z"的汉字内码范围,
// 要检索的汉字只需要检查它的内码位于哪一个首字符的范围内,
// 就可以判断出它的拼音首字符。
case WORD(strChinese[1]) shl 8 + WORD(strChinese[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(0);
end;
if not bUpCase then
begin // 转换为小写
result := Chr(Ord(result)+32);
end;
end;
////////////////////////////////////////////////////////////////////////////
// 函数: GetPYIndexStr(strChinese: string;bUpCase: Boolean = True): string;
//
// 函数功能:获取多个汉字的拼音首字符组成的字符串.
// 例: GetPYIndexStr('程') 将返回'C'.
// GetPYIndexStr('程序')将返回'CX'.
//
// 第二个参数决定返回大写还是小写 , 缺省为大写 .
////////////////////////////////////////////////////////////////////////////
function GetPYIndexStr(strChinese: string;bUpCase: Boolean = True): string;
var
strChineseTemp : string;
cTemp : Char;
begin
result := '';
strChineseTemp := strChinese;
while strChineseTemp<>'' do
begin
cTemp := GetPYIndexChar(strChineseTemp);
if not bUpCase then
begin // 转换为小写
cTemp := Chr(Ord(cTemp)+32);
end;
result := result + string(cTemp);
strChineseTemp := Copy(strChineseTemp,3,Length(strChineseTemp));
end;
end;
来自: ugvanxk, 时间: 2002-07-14 10:55:00, ID: 1201580
http://wolfsoft.nugoo.com/download.asp?flag=1&fl1=4&id=1728&keyword=网友源代码
你可以参考这个
来自: rockxu, 时间: 2002-07-14 11:29:00, ID: 1201631
非常感谢你的热心解答.
得分大富翁: ugvanxk