Evidentemente, no puedes asignar a un puntero a
procedimiento la dirección de una
cadena de caracteres.
Para empezar, S debe ser un puntero a procedimiento, igual que la propiedad/campo Code.
Código Delphi
[-]PROCEDURE MyClick (Self, Sender: TObject);
BEGIN
ShowMessage ('Caption del Sender: ' + (Sender AS TButton).Caption);
END;
PROCEDURE TForm1.Button1Click (Sender: TObject);
VAR
M: TMethod;
S: PROCEDURE (a, b: TObject);
BEGIN
M.Data := nil;
S := @MyClick;
M.Code := S;
Button1.OnClick := M AS TNotifyEvent;
Button2.OnClick := M AS TNotifyEvent;
Button3.OnClick := M AS TNotifyEvent;
END;
Lo de usar "AS" es una cuestión de estilo.
Por cierto, usa el botón de código para formatearlo: