该控件里{$I HzSpDat2.inc}是什么意思?unit HzSpell;
{ version 4.1}interfaceuses
Windows, Messages, SysUtils, Classes;type
THzSpell = class(TComponent)
protected
FHzText: String;
FSpell: String;
FSpellH: String;
procedure SetHzText(const Value: String);
function GetHzSpell: String;
function GetPyHead: String;
public
class function PyOfHz(Hz: String): String;
class function PyHeadOfHz(Hz: String): String;
published
property HzText: String read FHzText write SetHzText;
property HzSpell: String read GetHzSpell;
property PyHead: String read GetPyHead;
end;{$I HzSpDat2.inc}procedure Register;function GetHzPy(HzChar: PChar; Len: Integer): String;
function GetHzPyFull(HzChar: String): String;
function GetHzPyHead(HzChar: PChar; Len: Integer): String;
function GetPyChars(HzChar: String): String;implementationprocedure Register;
begin
RegisterComponents('System', [THzSpell]);
end;function GetHzPy(HzChar: PChar; Len: Integer): String;
var
C: Char;
Index: Integer;
begin
Result := '';
if (Len > 1) and (HzChar[0] >= #129) and (HzChar[1] >= #64) then
begin
//是否为 GBK 字符
case HzChar[0] of
#163: // 全角 ASCII
begin
C := Chr(Ord(HzChar[1]) - 128);
if C in ['a'..'z', 'A'..'Z', '0'..'9', '(', ')', '[', ']'] then
Result := C
else
Result := '';
end;
#162: // 罗马数字
begin
if HzChar[1] > #160 then
Result := CharIndex[Ord(HzChar[1]) - 160]
else
Result := '';
end;
#166: // 希腊字母
begin
if HzChar[1] in [#$A1..#$B8] then
Result := CharIndex2[Ord(HzChar[1]) - $A0]
else if HzChar[1] in [#$C1..#$D8] then
Result := CharIndex2[Ord(HzChar[1]) - $C0]
else
Result := '';
end;
else
begin // 获得拼音索引
Index := PyCodeIndex[Ord(HzChar[0]) - 128, Ord(HzChar[1]) - 63];
if Index = 0 then
Result := ''
else
Result := PyMusicCode[Index];
end;
end;
end
else if Len > 0 then
begin
//在 GBK 字符集外, 即半角字符
if HzChar[0] in ['a'..'z', 'A'..'Z', '0'..'9', '(', ')', '[', ']',
'.', '!', '@', '#', '$', '%', '^', '&', '*', '-', '+',
'<', '>', '?', ':', '"'] then
Result := HzChar[0]
else
Result := '';
end;
end;function GetHzPyFull(HzChar: String): String;
var
i, len: Integer;
Py: String;
function IsDouByte(C: Char): Boolean;
begin
Result := C >= #129;
end;
begin
Result := '';
i := 1;
while i <= Length(HzChar) do
begin
if IsDouByte(HzChar[i]) and (Length(HzChar) - i > 0) then
len := 2
else
len := 1;
Py := GetHzPy(@HzChar[i], len);
Inc(i, len);
if (Result <> '') and (Py <> '') then
Result := Result + ' ' + Py
else
Result := Result + Py;
end;
end;function GetHzPyHead(HzChar: PChar; Len: Integer): String;
begin
Result := Copy(GetHzPy(HzChar, Len), 1, 1);
end;function GetPyChars(HzChar: String): String;
var
i, len: Integer;
Py: String;
function IsDouByte(C: Char): Boolean;
begin
Result := C >= #129;
end;
begin
Result := '';
i := 1;
while i <= Length(HzChar) do
begin
if IsDouByte(HzChar[i]) and (Length(HzChar) - i > 0) then
len := 2
else
len := 1;
Py := GetHzPyHead(@HzChar[i], len);
Inc(i, len);
Result := Result + Py;
end;
end;{ THzSpell }function THzSpell.GetHzSpell: String;
begin
if FSpell = '' then
begin
Result := GetHzPyFull(FHzText);
FSpell := Result;
end
else Result := FSpell;
end;function THzSpell.GetPyHead: String;
begin
if FSpellH = '' then
begin
Result := GetPyChars(FHzText);
FSpellH := Result;
end
else Result := FSpellH;
end;class function THzSpell.PyHeadOfHz(Hz: String): String;
begin
Result := GetPyChars(Hz);
end;class function THzSpell.PyOfHz(Hz: String): String;
begin
Result := GetHzPyFull(Hz);
end;procedure THzSpell.SetHzText(const Value: String);
begin
FHzText := Value;
FSpell := '';
FSpellH := '';
end;end.
{ version 4.1}interfaceuses
Windows, Messages, SysUtils, Classes;type
THzSpell = class(TComponent)
protected
FHzText: String;
FSpell: String;
FSpellH: String;
procedure SetHzText(const Value: String);
function GetHzSpell: String;
function GetPyHead: String;
public
class function PyOfHz(Hz: String): String;
class function PyHeadOfHz(Hz: String): String;
published
property HzText: String read FHzText write SetHzText;
property HzSpell: String read GetHzSpell;
property PyHead: String read GetPyHead;
end;{$I HzSpDat2.inc}procedure Register;function GetHzPy(HzChar: PChar; Len: Integer): String;
function GetHzPyFull(HzChar: String): String;
function GetHzPyHead(HzChar: PChar; Len: Integer): String;
function GetPyChars(HzChar: String): String;implementationprocedure Register;
begin
RegisterComponents('System', [THzSpell]);
end;function GetHzPy(HzChar: PChar; Len: Integer): String;
var
C: Char;
Index: Integer;
begin
Result := '';
if (Len > 1) and (HzChar[0] >= #129) and (HzChar[1] >= #64) then
begin
//是否为 GBK 字符
case HzChar[0] of
#163: // 全角 ASCII
begin
C := Chr(Ord(HzChar[1]) - 128);
if C in ['a'..'z', 'A'..'Z', '0'..'9', '(', ')', '[', ']'] then
Result := C
else
Result := '';
end;
#162: // 罗马数字
begin
if HzChar[1] > #160 then
Result := CharIndex[Ord(HzChar[1]) - 160]
else
Result := '';
end;
#166: // 希腊字母
begin
if HzChar[1] in [#$A1..#$B8] then
Result := CharIndex2[Ord(HzChar[1]) - $A0]
else if HzChar[1] in [#$C1..#$D8] then
Result := CharIndex2[Ord(HzChar[1]) - $C0]
else
Result := '';
end;
else
begin // 获得拼音索引
Index := PyCodeIndex[Ord(HzChar[0]) - 128, Ord(HzChar[1]) - 63];
if Index = 0 then
Result := ''
else
Result := PyMusicCode[Index];
end;
end;
end
else if Len > 0 then
begin
//在 GBK 字符集外, 即半角字符
if HzChar[0] in ['a'..'z', 'A'..'Z', '0'..'9', '(', ')', '[', ']',
'.', '!', '@', '#', '$', '%', '^', '&', '*', '-', '+',
'<', '>', '?', ':', '"'] then
Result := HzChar[0]
else
Result := '';
end;
end;function GetHzPyFull(HzChar: String): String;
var
i, len: Integer;
Py: String;
function IsDouByte(C: Char): Boolean;
begin
Result := C >= #129;
end;
begin
Result := '';
i := 1;
while i <= Length(HzChar) do
begin
if IsDouByte(HzChar[i]) and (Length(HzChar) - i > 0) then
len := 2
else
len := 1;
Py := GetHzPy(@HzChar[i], len);
Inc(i, len);
if (Result <> '') and (Py <> '') then
Result := Result + ' ' + Py
else
Result := Result + Py;
end;
end;function GetHzPyHead(HzChar: PChar; Len: Integer): String;
begin
Result := Copy(GetHzPy(HzChar, Len), 1, 1);
end;function GetPyChars(HzChar: String): String;
var
i, len: Integer;
Py: String;
function IsDouByte(C: Char): Boolean;
begin
Result := C >= #129;
end;
begin
Result := '';
i := 1;
while i <= Length(HzChar) do
begin
if IsDouByte(HzChar[i]) and (Length(HzChar) - i > 0) then
len := 2
else
len := 1;
Py := GetHzPyHead(@HzChar[i], len);
Inc(i, len);
Result := Result + Py;
end;
end;{ THzSpell }function THzSpell.GetHzSpell: String;
begin
if FSpell = '' then
begin
Result := GetHzPyFull(FHzText);
FSpell := Result;
end
else Result := FSpell;
end;function THzSpell.GetPyHead: String;
begin
if FSpellH = '' then
begin
Result := GetPyChars(FHzText);
FSpellH := Result;
end
else Result := FSpellH;
end;class function THzSpell.PyHeadOfHz(Hz: String): String;
begin
Result := GetPyChars(Hz);
end;class function THzSpell.PyOfHz(Hz: String): String;
begin
Result := GetHzPyFull(Hz);
end;procedure THzSpell.SetHzText(const Value: String);
begin
FHzText := Value;
FSpell := '';
FSpellH := '';
end;end.
解决方案 »
- dll如何调用DLL
- Delphi中文技术论坛擂台赛第五期新鲜出炉!
- 一个窗体创建和释放的问题。请赐教
- 菜鸟提问!刚开始学delphi就碰见了一堆问题,请各位帮忙看一下
- 用unidac的unitable手动连接firebird数据库 提示no permission for read select access to table
- 菜鸟求救:我在Sql server中有个datetime字段,本来有时间的,在程序中怎样把它置空
- ******一个初级程序员今天疑惑的问题!!!!!!
- 大虾,怎样获取Access表字段的标题?
- 如何取到 WINNT\SYSTEM32 这个目录的绝对路径?
- 送分题:请问浮点数取整的函数是什么?
- dbgrideh加order by再点TITLE排序出错是什么原因
- 音频传输问题
{ This file is base on Winpy_TAB.TXT }const
PYMUSICCOUNT = 526;
PyMusicCode: array [1..PYMUSICCOUNT] of String[6] = { 汉字基本发音表 } (
{$I *.inc} 这个也是预编译指令告诉编译器,需要将后缀名为inc的文件统一编译
我知道的就这么多。你可以到网上搜索一下 delphi 编译参数 然后就知道了。
class function PyOfHz(Hz: String): String;
class function PyHeadOfHz(Hz: String): String;
这里是其他类调用它的方法吧.