2012-03-14 1 views
5

Не уверен, правильна ли речь, но что мне нужно сделать, это хранить в какой-то коллекции указатель на указанную функцию. Я делаю, что довольно много, как объявить переменнуюСохранение указателя на указанную функцию в Delphi

SomeFunctionName: string 

Конечно этот тип не может быть строкой, вопрос в том, что она должна точно быть?

+0

'типа TGetSomeString = function: string; // читаем о процедурных типах в документации ' – OnTheFly

+0

Обычно для методов (процедуры или функции, принадлежащих классу) вы должны использовать тип' procedure (args) объекта 'или' function (args): resultype объекта' плюс объявление типа. http://stackoverflow.com/questions/4626614/delphi-please-explain-this-type-procedure-of-object –

ответ

6

Обычно вы использовали переменную-указатель функции. Например:

type 
    TProcedure = procedure; 

procedure MyProc1; 
begin 
end; 

procedure MyProc2; 
begin 
end; 

var 
    Proc: TProcedure; 

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

Это самый простой пример, который только можно себе представить. Вы можете указать процедурные типы, содержащие список параметров, метод типов объектов и т. Д. Подробнее читайте в разделе Procedural Types.

+1

Ошибка SO formatter? +1 – TLama

+3

@TLama Да, я видел это время от времени. Я сообщил об этом: http://meta.stackexchange.com/questions/125587/please-can-this-markdown-bug-be-fixed –

+0

@ JacekKwiecień См. Раздел «Указатели метода» на странице, которую Дэвид ссылается на , –

1

Фактически вы не храните процедуру/функцию, но сохраняете метод.

Итак, вы должны использовать TMethod вместо этого. У TMethod есть указатель на объект и указатель процедуры.

Вы можете увидеть более подробно в другом посте: Save and restore event handlers

редактировать: Похоже, вопрос был править назад к оригиналу после показа запроса некоторого события Запоминания TControl.onClick .....

Смежные вопросы