一个Panel中有N个控件,动态创建的,而且类型不一,可能有Delphi自带的也有三方的,我现在要动态给这些控件赋OnMouseDwon事件,笨方法是遍历每个控件,然后判断:
if Sender.ClassName='TButton' then
TButton(sender).OnMouseDown := MyOnMouseDown;
但是,控件太多,类型也不一致,还有三方的,不可能写太多判断语句,另外,虽然这些可视控件都是从TWinControl类继承,但TWinControl类并没有把OnMouseDown事件公布出来,根本就不能调用TWinControl(sender).OnMouseDown方法来赋值,请教大家,有没有通用的好方法可以实现,多谢!控件继承delphi

解决方案 »

  1.   

    if Sender is TWinControl then
      TButton(Sender).OnMouseDown := MyOnMouseDown;
    作弊方法。。
      

  2.   


    感谢回复!这种方法我之前试过,容易引起内存异常,因为很多其它控件并非TButton类,经常引起地址错误,治标不治本,不可取。
      

  3.   

    可以用RTTI來解决 李维的書里有說到, uses Typeinfo
      

  4.   

     var propinfo: Tpropinfo; propinfo  := Getpropinfo(compoents[i].classinfo,'Color'); 检测组件是否有颜色属性。 SetOrdprop(compoents[i],propinfo,clred); 设为红色。 希望有帮助,,,手机打字很累的…
      

  5.   


    感谢回复!这种方法我之前试过,容易引起内存异常,因为很多其它控件并非TButton类,经常引起地址错误,治标不治本,不可取。如果你用D2005+,可以试试classhelper,将OnMouseDown公布出来