1、在delphi中自定义过程时是否都要先声明过程?声明过程必须在interface下的type中定义吗?能否在其它地方声明?若能有什么不同?最好举个例子说明。
2、下面这个程序怎样修改才正确?
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure show(j:integer);
begin
showmessage(inttostr(j));
end;procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
i:=1;
show(i); //此处错误,错误信息为:Too many actual parameters
end;end.
2、下面这个程序怎样修改才正确?
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure show(j:integer);
begin
showmessage(inttostr(j));
end;procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
i:=1;
show(i); //此处错误,错误信息为:Too many actual parameters
end;end.
你的这个过程没有声明的原因
type TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure show(j:integer);//写道这里试试
private
{ Private declarations }
public
{ Public declarations }
end;
type TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure show(j:integer);
private
{ Private declarations }
public
{ Public declarations }
end;下面
procedure TForm1.show(j:integer);
begin
showmessage(inttostr(j));
end;
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
procedure show(j:integer);
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.show(j:integer);
begin
showmessage(inttostr(j));
end;procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
i:=1;
show(i);
end;end.
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure show(j:integer); end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.show(j:integer);
begin
showmessage(inttostr(j));
end;procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
i:=1;
show(i);
end;end.
试试上面代码
Delphi的TForm有一个 show 方法,就是Show它自己,而你在TForm1的Button1Click方法下调用Show,显然缺省调用的是TForm1自己的Show(这是名字的作用范围问题),而不是你前边定义的 procedure show(j:integer);
修改的方法:
做法1:改 procedure show(j:integer);过程的名字,如 MyShow(j:integer);
做法2:也可以如angle097113(深思不解)的方法,重载Show方法,但是具体可行否,你可以试一试,我不敢肯定。
procedure TForm1.show(j:integer);
beginend;
以免出错的 就是楼上说得对的