在讲Delphi自定义函数声明以及调用之前,我们先看一段代码
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
btn1: TButton;
edt1: TEdit;
edt2: TEdit;
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.btn1Click(Sender: TObject);
var
i:Real ;
begin
////edt1.Text:=inttostr(trunc(5.3658*100));
i:=strtedt2.text;
edt1.Text:=NumTOChina(i);
end;
function NumTOChina(i:Single):string; //小写数字转大写
const
d= '零壹贰叁肆伍陆柒捌玖分角圆拾佰仟万拾佰仟亿拾佰仟';
var
m,k:string;
j:integer;
begin
i:=i*100;
k:= '';
m:=inttostr(trunc(i));
for j:=length(m) downto 1 do
k:=k+d[(strtoint(m[Length(m)-j+1])+1)*2-1]+d[(strtoint(m[Length(m)-j+1])+1)*2]
+d[(10+j)*2-1]+d[(10+j)*2];
result:=k;
end;
end.初看这段代码没有什么问题, 但编译的时候会提示错误,而把自定义函数NumTOChina()放在btnClick()前面则能通过,如
implementation
{$R *.dfm}
function NumTOChina(i:Single):string; //小写数字转大写
const
d= '零壹贰叁肆伍陆柒捌玖分角圆拾佰仟万拾佰仟亿拾佰仟';
var
m,k:string;
j:integer;
begin
i:=i*100;
k:= '';
m:=inttostr(trunc(i));
for j:=length(m) downto 1 do
k:=k+d[(strtoint(m[Length(m)-j+1])+1)*2-1]+d[(strtoint(m[Length(m)-j+1])+1)*2]
+d[(10+j)*2-1]+d[(10+j)*2];
result:=k;
end;
procedure TForm1.btn1Click(Sender: TObject);
var
i:Real ;
begin
////edt1.Text:=inttostr(trunc(5.3658*100));
i:=strtedt2.text;
edt1.Text:=NumTOChina(i);
end;
end.这两种情况虽然自定义函数代码相同,但因为位置不同,结果也不同,这是因为,在未声明自定义函数的时候,Delphi顺序执行代码,对于本例NumTOChina()函数在btnClick()之后,编译不通过,是因为在btnClick()函数里引用了NumTOChina()函数,但此时因为未声明NumTOChina()函数,所以找不到该函数的调用,程序报错。
将NumTOChina()函数放在btnClick()之前,因为Delphi顺序执行代码,在btnClick()函数中调用之前执行过的自定义函数NumTOChina()函数自然就可以编译通过。
未保证代码的正常执行,我们可以采用将NumTOChina()函数放在btnClick()之前,其实也可以放在btnClick()之后,只不过需要对NumTOChina()函数在type部分进行函数声明
Delphi自定义函数声明及调用
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
btn1: TButton;
edt1: TEdit;
edt2: TEdit;
procedure btn1Click(Sender: TObject);
function NumTOChina(i:Real):string;{函数声明}
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.btn1Click(Sender: TObject);
var
i:Real ;
begin
////edt1.Text:=inttostr(trunc(5.3658*100));
i:=strtedt2.text;
edt1.Text:=NumTOChina(i);
end;
function TForm1.NumTOChina(i:Real): string;
const
d= '零壹贰叁肆伍陆柒捌玖分角圆拾佰仟万拾佰仟亿拾佰仟';
var
m,k:string;
j:integer;
begin
i:=i*100;
k:= '';
m:=inttostr(trunc(i));
for j:=length(m) downto 1 do
k:=k+d[(strtoint(m[Length(m)-j+1])+1)*2-1]+d[(strtoint(m[Length(m)-j+1])+1)*2]
+d[(10+j)*2-1]+d[(10+j)*2];
result:=k;
end;
end.另外,使用快捷 Ctrl+Shift+C可自动生成函数实现代码
type
TForm1 = class(TForm)
btn1: TButton;
edt1: TEdit;
edt2: TEdit;
procedure btn1Click(Sender: TObject);
function NumTOChina(i:Real):string;{函数声明}
//将光标放在该处,按组合键Ctrl+Shift+C,可在程序主体位置自动生成函数实现代码
private
{ Private declarations }
public
{ Public declarations }
end;
...//省略代码
function TForm1.NumTOChina(i:Real): string;
begin
end
...百家号 互联网微风说
微信公众号 weisico-com
转载请注明:微思考学习网-关注技术,分享知识 >> Delphi自定义函数声明以及函数调用
新手学习JS函数调用,练习两
使用库函数API和C代码中嵌入汇