Una excelente pregunta.
Por lo que yo sé, no es posible hacer en la versión actual de Delphi. Esto es muy desafortunado ya que esos procedimientos anónimos serían geniales para configurar rápidamente los manejadores de eventos de un objeto, por ejemplo cuando se configuran los dispositivos de prueba en un tipo de marco de prueba automático xUnit.
Debe haber dos maneras de CodeGear Para implementar esta función:
1: Permitir la creación de métodos anónimos. Algo como esto:
Button1.OnClick := procedure(sender : tobject) of object begin
...
end;
El problema aquí es qué poner como el auto puntero para el método anónimo. Uno podría usar el puntero del objeto desde el que se creó el método anónimo, pero luego solo se pueden crear métodos anónimos desde un contexto de objeto. Una mejor idea podría ser simplemente crear un objeto falso detrás de las escenas para contener el método anónimo.
2: Alternativamente, se podría permitir que los tipos de eventos acepten tanto métodos como procedimientos, siempre que compartan la firma definida. De esta forma, puede crear el controlador de eventos de la manera que desee:
Button1.OnClick := procedure(sender : tobject) begin
...
end;
En mi opinión, esta es la mejor solución.
@Majin: esto es inteligente y funciona porque un método anónimo está incrustado en una clase implícita. Asegúrese de leer el comentario de Barry Kelly en el artículo al que se hace referencia sobre compatibilidad futura, y esta publicación de Barry Kelly: http://blog.barrkel.com/2010/01/using-anonymous-methods-in-method.html –
Esta solución funciona en la plataforma Win32 pero no en Win64. –
@ChauCheeYang Probablemente porque los $ 0C deben ser SizeOf (Pointer) * 3 .. –