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.

解决方案 »

  1.   

    procedure show(j:integer);
    你的这个过程没有声明的原因
    type  TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
        procedure show(j:integer);//写道这里试试
      private
        { Private declarations }
      public
        { Public declarations }
      end;
      

  2.   

    要在类定义中申明
    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;
      

  3.   

    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 }
         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.
      

  4.   

    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 }
        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.
    试试上面代码
      

  5.   

    你的程序中有一个逻辑问题:
       Delphi的TForm有一个 show 方法,就是Show它自己,而你在TForm1的Button1Click方法下调用Show,显然缺省调用的是TForm1自己的Show(这是名字的作用范围问题),而不是你前边定义的 procedure show(j:integer);
       修改的方法:
       做法1:改 procedure show(j:integer);过程的名字,如 MyShow(j:integer);
       做法2:也可以如angle097113(深思不解)的方法,重载Show方法,但是具体可行否,你可以试一试,我不敢肯定。
      

  6.   

    如果不是响应控件事件的过程,一般在private和public里面声明就可以了,并且这里有一个非常有用的快捷组合键Ctrl + Shift + C,当你声明了函数或者过程之后,按这三个键,会在implementation后面自动生成类似于以下一段的代码:
    procedure TForm1.show(j:integer);
    beginend;
      

  7.   

    可能Show是 系统本身的一个函数 最好更改一下名称
    以免出错的 就是楼上说得对的