一般的窗口声明为:
type
  TForm1= Class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);       ..............1
  private
  public
  procedure Public1;                        .....................2
  end;procedure procedure1;            ................................3var
   Form1: TForm1;implementation{$R *.dfm}
请问,上面的3个procedure有何不同??

解决方案 »

  1.   

    前两个是声明在类定义中的方法,只有类的实例才能访问它们,在本例中也就是form1这个tform1的实例可以访问它们.
      

  2.   

    第一个是对象button1的行为也就是方法
    第二个是对象form1的行为方法,这个方法放在public里面 说明他对所有的单元都是可见的(你要uses这个单元先)
    第三个方法不属于任何对象,只是为了实现某个算法,也对所有单元可见。不知道小弟这样理解对不对 还请高手指点
      

  3.   

    1.Button1Click事件的声明部分
    2.任何访问该类的单元都可以调用procedure
    3.Button1Click的实现部分
      

  4.   

    procedure1是全局过程,在文件里,哪里都 可以调用
    Public1是属于类的,要用类对象调用
    Button1Click跟Public1差不多
    这样说算不算
      

  5.   

    起作用范围不同
    1.public里的是全局的
    2.private里的局部的,
    另种范围记不太清楚了
      

  6.   

    在某些API的调用中,有些需要某个过程的指针作为参数,比如SetWindowHookEx。这些调用的指针如果声明在2的位置,能调用吗?怎么写?是不是Form1.Public1?
      

  7.   

    不要什么都问别人,首先要尝试自己寻找答案。这么简单的,应该是任何一本Delphi的书都有介绍的
      

  8.   

    procedure其实也是一种数据类型(过程类型)
    第一个,Button1Click(Sender: TObject);看他的定义就可以明白
    property onclick:TNotifyEvent;而TNotifyEvent是这样定义的
    Type TNotifyEvent = procedure (Sender:Tobject) of object;
    这说明方法类型是一个特殊的过程类型,他用of object来标识。
    所以他的作用范围就是所有类的实体对象都可以调用,也可以说算是全局的。
    第二个,定义在private里面所以属于类方法,只有类内部的定义函数才能调用它
    第三个,也应该也是全局的,但是他和一有很大区别,它不需要类的实体,在任何地方都能调用,所以它是更纯粹的全局函数。