有关QueryPY.dll 谁能提供一下这个dll的接口最好能举例说明一下啊先在这谢谢了啊 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 接口函数拿eXeScope能轻松弄到,但是参数不太好弄,版本太多列子不太可能!你花点时间搜搜! 是和拼音有关,也有一个自己的函数(网上找的),但是功能不够强大(就是有很多汉字转换不过来)网上有人说自己的函数和这个dll结合效果不错,所以才找的它 QueryPY.DLL中共有两个函数:WyQueryPY 只查询拼音的开头字母WyQueryPYWhole 查询完整的拼音你可以在DELPHI程序中这样声明它们:function WyQueryPY(HanStr,R: PChar): integer; Stdcall; external 'QueryPY.dll';function WyQueryPYWhole(HanStr,R: PChar): integer; Stdcall; external 'QueryPY.dll';HanStr: 传入需要查询的汉字字符串;R : 查询的结果将保存在这里;返回 : 函数返回R的长度。还有一点要说明:汉字字符串中可以有英文字母,它们将不作处理。下面的例子查询Edit1中的汉字拼音拼法:unit upy;interfaceusesWindows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls;typeTForm1 = class(TForm)Edit1: TEdit;Button2: TButton;Label1: TLabel;Label2: TLabel;Button1: TButton;procedure Button2Click(Sender: TObject);procedure Button1Click(Sender: TObject);private{ Private declarations }public{ Public declarations }end;varForm1: TForm1;function WyQueryPY(HanStr,R: PChar): integer;Stdcall; external 'QueryPY.dll';function WyQueryPYWhole(HanStr,R: PChar): integer;Stdcall; external 'QueryPY.dll';implementation{$R *.DFM}procedure TForm1.Button2Click(Sender: TObject);varstr: array[0..100] of char;beginWyQueryPY(Pchar(Edit1.Text),str);showmessage('拼音开头字母是:' + #13 + str);end;procedure TForm1.Button1Click(Sender: TObject);varstr: array[0..200] of char;beginWyQueryPYWhole(Pchar(Edit1.Text),str);showmessage('完整拼音是:' + #13 + str);end;end. function ChineseToPY(S: 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 C1, C2, Len1: Integer; ir: Word;begin Result := ''; C1 := 1; Len1 := Length(S); while (C1 <= Len1) do begin if (ord(S[C1]) >= 160) and (ord(S[C1 + 1]) >= 160) then begin ir := (ord(S[C1]) - 160) * 100 + ord(S[C1 + 1]) - 160; if (ir > 300) and (ir <= 395) then begin Result := Result + Chr(ir - (300 - 32)); end else begin C2 := 0; while (C2 <= 26) do begin if (ir >= ChinaCode[C2, 0]) and (ir <= ChinaCode[C2, 1]) then begin Result := Result + chr(C2 + ord('a')); break; end; C2 := C2 + 1; end; end; C1 := C1 + 2; end else begin Result := Result + S[C1]; C1 := C1 + 1; end; end;end; 简体版本转换为繁体版本 用socket控件编写的网络通讯程序,如何区别来自同一代理的两个用户? 有关directorylistbox的问题 高分求教indy传送文件的问题 高分求 进销存源码 delphi中怎样批量解压文件? 读写文件速度很慢,如何解决? 关于在程序中发送电子邮件附件的问题 能否用delphi对应用程序更改它标题? 一个比较弱的问题(也有不少分呀!) 奇怪问题,TWebbrowser找开的网页中的activeX中的网页打不开? clientsocket和serversocket通信
你花点时间搜搜!
是和拼音有关,也有一个自己的函数(网上找的),但是功能不够强大(就是有很多汉字转换不过来)
网上有人说自己的函数和这个dll结合效果不错,所以才找的它
WyQueryPY 只查询拼音的开头字母
WyQueryPYWhole 查询完整的拼音你可以在DELPHI程序中这样声明它们:
function WyQueryPY(HanStr,R: PChar): integer; Stdcall; external 'QueryPY.dll';
function WyQueryPYWhole(HanStr,R: PChar): integer; Stdcall; external 'QueryPY.dll';HanStr: 传入需要查询的汉字字符串;
R : 查询的结果将保存在这里;
返回 : 函数返回R的长度。还有一点要说明:汉字字符串中可以有英文字母,它们将不作处理。下面的例子查询Edit1中的汉字拼音拼法:
unit upy;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;type
TForm1 = class(TForm)
Edit1: TEdit;
Button2: TButton;
Label1: TLabel;
Label2: TLabel;
Button1: TButton;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
function WyQueryPY(HanStr,R: PChar): integer;Stdcall; external 'QueryPY.dll';
function WyQueryPYWhole(HanStr,R: PChar): integer;
Stdcall; external 'QueryPY.dll';implementation{$R *.DFM}procedure TForm1.Button2Click(Sender: TObject);
var
str: array[0..100] of char;
begin
WyQueryPY(Pchar(Edit1.Text),str);
showmessage('拼音开头字母是:' + #13 + str);
end;procedure TForm1.Button1Click(Sender: TObject);
var
str: array[0..200] of char;
begin
WyQueryPYWhole(Pchar(Edit1.Text),str);showmessage('完整拼音是:' + #13 + str);
end;end.
function ChineseToPY(S: 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
C1, C2, Len1: Integer;
ir: Word;
begin
Result := '';
C1 := 1;
Len1 := Length(S);
while (C1 <= Len1) do
begin
if (ord(S[C1]) >= 160) and (ord(S[C1 + 1]) >= 160) then
begin
ir := (ord(S[C1]) - 160) * 100 + ord(S[C1 + 1]) - 160;
if (ir > 300) and (ir <= 395) then
begin
Result := Result + Chr(ir - (300 - 32));
end
else
begin
C2 := 0;
while (C2 <= 26) do
begin
if (ir >= ChinaCode[C2, 0]) and (ir <= ChinaCode[C2, 1]) then
begin
Result := Result + chr(C2 + ord('a'));
break;
end;
C2 := C2 + 1;
end;
end;
C1 := C1 + 2;
end
else
begin
Result := Result + S[C1];
C1 := C1 + 1;
end;
end;
end;