分享

Ribbon控件如何确定cxBarEditItem的属性类型

 npkaida 2016-11-05

Ribbon控件如何确定cxBarEditItem的属性类型

作者:慧都控件网 | 2010-06-01 11:27:31| 阅读 1651 有用 (1) 评论 (0) 收藏


概述:在使用DevExpress 的Ribbon控件过程中,发现cxBarEditItem的属性类型是可变的,并且难以确定。在界面上的显示只不过是TextEdit, ComboBox之类的字符串,而实际对应的对象却完全不是。本文将与你一起分享Ribbon控件如何确定cxBarEditItem的属性类型。

  在使用DevExpress 的Ribbon控件过程中,发现cxBarEditItem属性类型是可变的,并且难以确定。在界面上的显示只不过是TextEdit, ComboBox之类的字符串,而实际对应的对象却完全不是。要找出真实的对象名称,还是需要花一定的功夫的。

  下面就是找对象名称的过程了,首先确保DevBar的Source目录被配置在了Library Path中,因为我们需要不止一次的重新编译控件,不能够只配置dcu的目录。然后,跟据属性编辑器的特点,找到相应的RegisterPropertyEditor方法,搜一下就会在cxBarEditItemReg.pas这个文件里,找到一句代码:

RegisterPropertyEditor(TypeInfo(TcxCustomEditProperties), TcxCustomBarEditItem,
    'Properties', TcxBarEditItemPropertiesProperty);

  从此代码可以确定,properties属性的编辑器就是TcxBarEditItemPropertiesProperty,然后按着Ctrl点一下这个类名,直接跳转到了属性编辑器的声明部分。我们直接看SetValue()方法。

  在里面找到了关键的一句代码:

APropertiesClass := TcxCustomEditPropertiesClass(GetRegisteredEditProperties.FindByClassName(Value));

  原来它的填充类是通过一个特定的工厂方法返回的,接着我们就能直接跟进去了,找到FindByClassName这个方法,打下断点。然后运行程序,会看到这个方法被一次次的调用,而其中有一次,就是properties属性调用的了。

  在这里,我们无法确定哪一次才是Properties属性调用的,而且由于Dev控件的复杂性,这个方法被反复调用多次。因此,我们略微的修改代码,以满足确定属性的需要。

改动如下:

function TcxRegisteredClasses.FindByClassName(const AClassName: string): TClass;
var
I: Integer;
begin
Result := nil;
for I := 0 to Count - 1 do
begin
    if Items[I].ClassName = AClassName then
    begin
      {$DEFINE DEBUG}
      {$IFDEF DEBUG}
      if items[i].InheritsFrom(TcxCustomEditProperties) then
      begin
          WriteLog(AClassName);
      end;
      {$ENDIF}
      Result := Items[I];
      Break;
    end;
end;
end;

  红色的部分就是添加的代码了,WriteLog是一个自定义函数,作用是往C盘根目录下写一个Log文件,文件的内容即继承自TcxCustomEditProperties的类。

  程序执行后,打开这个文本一看,就一目了然了。

  上面的代码用了编译预处理,如果不需要写文件,就把{$DEFINE DEBUG} 改成 {.$DEFINE DEBUG},如果下一次还需要做此工作,再改回来。

  慧都科技作为Developer Express公司目前在中国唯一正式授权的经销商,不仅为DXperience提供了全面的技术支持服务,同时还倾情打造 DevExpress for.net高级培训以及DXperience Winform子控件培训,让您深入了解控件实现效果和常见问题的解决思路,提高开发效率。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多