Compañero, BINDEVENT() no permite el paso de parámetros, únicamente delega un evento hacia otro definido por el programador. Los parámetros que se transfieren al evento definido por el programador dependen del evento original que estés delegando.
Con todo respeto, BINDEVENT() delega un evento a un método definido por el programador, el cual se va a ejecutar en lugar del delegante, inclusive, puede ejecutarse el delegante y el delegado en forma personalizada con el parámetro nFlags; pero si el evento delegante no recibe ningún parámetro, el evento delegado no tendrá la capacidad de recibir parámetros, aunque éstos se declararan con la instrucción LPARAMETERS. Expongo el siguiente caso (en inglés):
How can I determine the object that raised the event when in the
Delegate method? eg. I have a grid on a form and I want to implement a sort on
column header click.
... code to initialize the grid and assign values to the header tag ...
FOR EACH oColumn IN thisform.Grid1.Columns
bindevent(oColumn.Header,"Click",thisform,"OnHeaderClick")
ENDFOR
PROCEDURE OnHeaderClick
oHeader = ???? && Which column header was clicked?
SET ORDER to tag (oHeader.Tag) IN (thisform.Grid1.RecordSource)
ENDPROC
You
can do this in your OnHeaderClick method to determine the
event's source object:
local arrEvents[1]
local oHeader as header
dimension arrEvents[1]
aevents(arrEvents, 0)
oHeader = arrEvents[1]
Como se puede ver, la solución no se basa en el paso de parámetros al evento delegado, pues el evento delegante, en este caso “Click” del objeto Header, no recibe parámetro alguno.
En esta situación el polimorfismo no aplica en la forma que lo expones.