微思考源码weisico.com|分享互联网优质资源,免费织梦模板,WP主题下载

Delphi自定义函数声明以及函数调用

在讲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

微信公众号weisico-com

转载请注明:微思考学习网-关注技术,分享知识 >> Delphi自定义函数声明以及函数调用

赞 (0) 收藏
分享到