2012-03-14 12 views
5

No estoy seguro de si la tilde es correcta, pero lo que tengo que hacer es almacenar en alguna colección un puntero a la función especificada. Estoy haciendo que más o menos como declarar una variableGuardando un puntero a la función especificada en Delphi

SomeFunctionName: string 

Por supuesto este tipo no puede ser una cadena, la pregunta es ¿cuál debería ser exactamente?

+0

tipo ' TGetSomeString = function: cadena; // leer sobre tipos de procedimientos en la documentación' – OnTheFly

+0

Normalmente, para los métodos (procedimiento o función que pertenece a una clase) se debe usar el tipo 'procedure (args) of object' o' function (args): resultype of object' más el tipo de declaración. http://stackoverflow.com/questions/4626614/delphi-please-explain-this-type-procedure-of-object –

Respuesta

6

Normalmente usaría una variable de puntero a la función. Por ejemplo:

type 
    TProcedure = procedure; 

procedure MyProc1; 
begin 
end; 

procedure MyProc2; 
begin 
end; 

var 
    Proc: TProcedure; 

..... 
Proc := MyProc1; 
Proc();//calls MyProc1 
Proc := MyProc2; 
Proc();//calls MyProc2 

Este es el ejemplo más simple que se pueda imaginar. Puede especificar tipos de procedimientos que tienen lista de parámetros, método de tipos de objetos, etc. Lea más en el tema Procedural Types de la guía de idiomas.

+1

SO error de formateador? +1 – TLama

+3

@TLama Sí, lo he visto de vez en cuando. Lo he informado: http://meta.stackexchange.com/questions/125587/please-can-this-markdown-bug-be-fixed –

+0

@ JacekKwiecień Vea la sección llamada "Method Pointers" en la página a la que David se refiere . –

1

En realidad, no está almacenando el procedimiento/función, sino el método de almacenamiento.

Por lo tanto, debe utilizar TMethod en su lugar. Un TMethod tiene un puntero de objeto y un puntero de procedimiento.

Se puede ver con más detalle en otro post: Save and restore event handlers

edición: Parece que la pregunta ha sido editar de nuevo a original después de que muestra algunas de requerimiento de eventos Almacenamiento TControl.onClick .....

Cuestiones relacionadas