type
  TMainForm=class(TForm)
  private
    procedure Text11(sender:TObject);
end;
var
  MainForm:TmainForm;
produre MainForm.Text11(Sender:TObject);
begin
  showmessage('hello');
end;
produre TiniThread.Execute;
begin
  OnTerminate:=MainForm.Text11;
end;
上面这段程序省略了好多,不过应该都能看懂。
问题是:produre MainForm.Text11(Sender:TObject);这句中为何一定要写括号中的变量,如里我不写编译就通不过?
还有为何delphi 中申明有过程后面要加(),而有的不要?

解决方案 »

  1.   

    OnTerminate是一个属性, 它read和write的是一个过程指针变量, 这个指针指向的过程应该有Tobject类型的参数.
      

  2.   

    因为你的 TIniThread.OnTerminate 属性,该函数指针对应的函数申明有这个参数。
      OnTerminate: procedure (sender:TObject);
      

  3.   

    OnTerminate:=MainForm.Text11 是对函数指针进行赋值
    将Text11的函数指针给OnTerminate事件。
    当程序触发OnTerminate事件时就可以自动执行Text11函数的代码了。
      

  4.   

    有sender与void要视情况而定。
    在函数或者过程体中不传入sender对象的,就没必要这样做。