2012-03-14 100 views
5

不知道该标题是否正确,但我需要做的是在某个集合中存储指向指定函数的指针。我这样做,很像声明一个变量在Delphi中保存一个指向指定函数的指针

SomeFunctionName: string 

当然这种类型不能是字符串,问题是什么,应该是准确?

+0

'型TGetSomeString = function:string; //读取文档中的过程类型 – OnTheFly 2012-03-14 13:43:23

+0

通常,对于方法(属于类的过程或函数),您可以使用object的对象或函数(args)类型的“过程(args):对象的结果类型”类型声明。 http://stackoverflow.com/questions/4626614/delphi-please-explain-this-type-procedure-of-object – 2012-03-15 13:04:40

回答

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 2012-03-14 09:46:29

+3

@TLama是的,我不时看到它。我已经报告过它:http://meta.stackexchange.com/questions/125587/please-can-this-markdown-bug-be-fixed – 2012-03-14 09:51:47

+0

@JacekKwiecień请参阅David提到的页面中名为“Method Pointers”的部分。 – 2012-03-14 12:10:15

1

您实际上并不存储过程/函数,而是存储方法。

所以你应该使用TMethod来代替。 TMethod有一个对象指针和一个过程指针。

可以在另一篇文章中看到更多的细节: Save and restore event handlers

编辑:这似乎显示出一些贮藏TControl.onClick事件请求后,问题一直是编辑回到原来.....