在讲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自定义函数声明以及函数调用