--- ---

If, for any reason, you want to detach (remove) the code you have written in an event handler, you have to set the event handler to nil.

    procedure TForm1.Button1Click(Sender: TObject) ;
    begin
      ShowMessage('Who clicked?') ;
      //remove event handler from event
      Button1.OnClick := nil;
    end;

To re-assign the procedure Button1Click to the button's OnClick event, you should use:

    Button1.OnClick := Button1Click;