我想在自己开发的控件的属性设置中给用户提供特定属性类型的“属性编辑器”,请问该如何做?(就像Delphi菜单控件中的菜单编辑器一样。)唉,其实我就是想给自己的组件添加TMenuItem类型属性,并能让用户像在TMainMenu组件中编辑Items属性一样编辑我的组件属性。恳请老师帮忙!

解决方案 »

  1.   

    你的组件继承TMenu就和TMainMenu一样了
      

  2.   

    在控件注册里面增加一个PropertyEditor的注册,可以参考偶的代码。procedure Register;
    begin
      RegisterComponents('你的控件', [控件名]);
      ......
      //注册属性编辑器TShortCut类型
      RegisterPropertyEditor(TypeInfo(TShortCut), TmsAction, 'ShortCut', TShortCutProperty);
    end;'ShortCut'是TmsAction的一个published property。
      

  3.   

    谢谢!谢谢大家!to:maozefa
    问题就是我的组件不是派生自TMenu类的。关于属性编辑器的文章我也找到很多,讲解基本一致,但如果我想使用Delphi已有的控件的“属性编辑器”却没有文章有讲到;比如我想在自己的组件中使用TMenuItem类型属性,使我的组件能像TMainMenu组件一样编辑其Items属性,我用的是Delphi7,里面没有找到关于注册TMenuItem类型属性编辑器的代码。但我找到两个包vcldesigner70.bpl和vcldesigner.dcp,发现里面有TMenuItemProperty和TMenuEditor这两个类的声明,于是我在自己的包中引入了vcldesigner.dcp包然后试图重新注册这个类到我的组件类属性或者派生新类注册,结果都失败了,提示“访问包vcldesigner70.bpl时,某某地址不可读(我的是英文版,翻译的可能不太准确)”不知为何?
      

  4.   

    在你的组件中发布TMenuItem时,使用Items这个属性名称,应该可以使用默认的编辑器
      

  5.   

    谢谢 maozefa!正常情况下我想是可以,但我不知道那出错是为什么?而且出错后也就没办法使用默认的编辑器了。
      

  6.   

    我并不是从TMenu之类派生的类,而只是想调用TMenu的Items编辑器来编辑一个TMenuItem类型的属性而已,我试过了,如果自己派生TPropertyEditor类是可以注册成功的,只在我直接注册TMenuItemProperty后,在设计时出现提示“访问包vcldesigner70.bpl时,某某地址不可读(我的是英文版,翻译的可能不太准确)”不知道为什么?
    我是希望得到Delphi自有的TMenu的菜单编辑器来设置自己组件的TMenuItem类型属性。
      

  7.   

    我做过一个提供给用户用的IDE,当然也有属性编辑器.不知是否是你说的那种
    不过作出来的效果就和bcb的左边的属性编辑器一样.估计bcb也是用这个控件作的.
    TValueListEditor
    看不明白的话我可以给你一个界面的截图,你看看效果
      

  8.   

    谢谢各位的参与!to:winner8080
    谢谢,你说的是属性列表,我说的是在属性列表中为编辑特定类型属性的值而提供的界面接口(我的理解,不知道对不对)。