Delphi – 动态调用不同的功能

前端之家收集整理的这篇文章主要介绍了Delphi – 动态调用不同的功能前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个树状视图(VirtualTree),它有节点.当用户点击节点时,我需要运行一个特定的函数,传递节点的文本名.该功能是节点的属性之一.例如,假设两个节点.

节点1,Name = MyHouse,Function = BuildHouse
节点2,Name = MyCar,function = RunCar

当我点击节点1时,我需要调用BuildHouse(‘MyHouse’)函数;
当我点击节点2时,我需要调用RunCar(‘MyCar’);

参数总是字符串.应该注意,这些是真正的功能,而不是类的成员.

有太多的节点要有一个CASE或IF / THEN类型的代码结构.我需要一种动态调用各种功能方法,即无需对行为进行硬编码.
我该怎么做?当我必须在运行时查找函数名称,而不是编译时,如何调用函数

谢谢,
GS

解决方法

Delphi允许创建指向函数的变量,然后通过变量调用函数.因此,您可以创建函数并将函数分配给节点的正确类型属性(或者可以将功能分配给例如许多集合项类的便利数据属性).
interface

type
  TNodeFunction = function(AInput: String): String;

implementation

function Func1(AInput: String): String;
begin
   result := AInput;
end;

function Func2(AInput: String): String;
begin
   result := 'Fooled You';
end;

function Func3(AInput: String): String;
begin
   result := UpperCase(AInput);
end;

procedure Demonstration;
var
  SomeFunc,SomeOtherFunc: TNodeFunction;
begin

     SomeOtherFunc = Func3;

     SomeFunc := Func1;
     SomeFunc('Hello');   // returns 'Hello'
     SomeFunc := Func2;
     SomeFunc('Hello');   // returns 'Fooled You'

     SomeOtherFunc('lower case'); // returns 'LOWER CASE'

end;

猜你在找的Delphi相关文章