Delphi中许多组件属性里都有Action一项, 当我创建并为其指定一个Action后, 怎么在OnExecute()中获得那个使用了Action的对象呢?

解决方案 »

  1.   

    我已经解决了这个问题, 我的做法是通过TAction中的ActionComponent找到上一级的Component. 由于我使用的是Raize控件组, 其中有个叫TRzGroupBar的控件, 在它里面可以加入许多TRzGroup, 在TRzGroup中又可以加入许多TRzGroupItem, 而Action动作就是加载在每一个TRzGroupItem的属性Action里面的, 因此依照上面我的做法可以直接获得当前使用的TRzGroup的指针(只有它是继承了TComponent类, TRzGroupItem不是从TComponent继承的!),然后遍历该TRzGroup中每一个TRzGroupItem, 并比较其指针是否与TAction->OnExecute(TObject *Sender)中的Sender指针相同, 若相同则说明已经找到那个调用该Action的TRzGroupItem了, 随后你便可以得到你想要的那个TRzGroupItem的Index值了.说了那么多, 大家不一定都会了解, 如果有使用Raize组件包的人遇到此类问题可以仿效我的做法, 当然也不能固守陈规, 或许你也有更好的办法呢:) 希望我们能写出更好公用组件,以飨后人.