CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

Delphi 6.0中属性编辑器的解决方案

楼主Hank(星星农场)2001-11-13 17:43:25 在 Delphi / VCL组件开发及应用 提问

        Delphi中用户可以自己声明属性编辑器在程序设计期间对第三方控件进行设计,对属性编辑器的声明可以在注册控件的时候通过RegisterComponentEditor过程进行定义,具体为:  
          procedure   RegisterComponentEditor(ComponentClass:   TComponentClass;   ComponentEditor:   TComponentEditorClass);  
          当然,用户在注册前要定义自己的属性编辑器,下面是一个例子:  
          TOutlookBarEditor   =   class(TComponentEditor)  
              function   GetVerb(Index:   Integer):   string;   override;  
              function   GetVerbCount:   Integer;   override   ;  
              procedure   Edit;   override;  
              procedure   ExecuteVerb(Index:   Integer);   override;  
          end;  
   
          其中最关键的部分在于对RegisterComponentEditor的引用。  
          在Delphi5.0中,可以直接将$(DELPHI)\Source\ToolsAPI目录下的DsgnIntf.pas文件拷贝到控件的设计目录下或者拷贝到$(DELPHI)\Lib目录即可。  
          在Delphi6.0中,Delphi将文件分解成DesignIntf.pas和DesignEditors.pas两个文件,所以引用时要将$(DELPHI)\Source\ToolsAPI目录下的DesignIntf.pas和DesignEditors.pas两个文件拷贝到控件的设计目录下或者拷贝到$(DELPHI)\Lib目录。  
          当然,如果你的Delphi   Package的搜索路径或者Delphi   IDE的搜索路径可以搜索到$(DELPHI)\Source\ToolsAPI目录就省去此麻烦。  
   
          但是,在Delphi   6.0中,如果就此编译,会出现找不到Proxies.dcu文件的问题。因为Proxies被编译了,在Delphi的目录中根本就找不到此相关文件,它已经被编译到designide.dcp文件中,解决方案很简单,就是在你的Package中引用designide.dcp文件即可,具体作法是:  
          Project->View   Source->在requires部分加入对designide的引用即可。  
   
          由于此部分文件只是在设计期间才有效,所以你的Package在设计时就要注意:  
          不要在运行期间将在进行期间使用的文件加入对DesignIntf.pas和DesignEditors.pas两个文件的引用,否则依然会出现找不到Proxies.dcu文件的问题,要将文件脱离!  
   
          当然,如果你的Package要在Delphi   5.0及Delphi6.0下同时能运行,那就要下点功夫通过编辑器的版本进行控制,Delphi   6.0的编辑器版本是VER   140,Delphi   5.0的编辑器版本是VER   130,下面是本人的一个真实的引用文件:  
          uses  
              Classes,   {$IFDEF   VER140}DesignIntf,   DesignEditors{$ELSE}DsgnIntf{$ENDIF};  
   
          Package部分由于版本不同而对不同的版本要进行不同的设计,再此就不叙述了!  
   
   
          其它补记:由于Delphi   5.0和Delphi   6.0对过程及参数的定义区域不同而出现错误,所以在编写两个版本的Package时一定要注意引用虚函数时出现的问题。例如对Tcontrol控件的SetAutoSize(Value:   Boolean)过程的引用:  
          在Delphi   5.0中定义为:  
          private  
              procedure   SetAutoSize(Value:   Boolean);  
          而在Delphi   6.0中定义为:  
          protected  
              procedure   SetAutoSize(Value:   Boolean);   virtual;  
          此时的定义要根据自己的实际情况定义了,可不能随便定义了!  
   
   
   
          Starfarm--->Docn   Hank  
   
          2001.11.13 问题点数:15、回复次数:4Top

1 楼Hank(星星农场)回复于 2001-11-14 14:45:44 得分 0

欢迎各位继续讨论Top

2 楼enlightenment(破冰超人)回复于 2001-11-14 14:50:59 得分 10

See   you   again!Lock-in!Top

3 楼Hank(星星农场)回复于 2001-11-15 13:04:55 得分 0

看来这种东西就不应该贴在这儿......Top

4 楼taozc(陶)回复于 2001-11-19 16:50:42 得分 5

多谢!我正好遇到这问题,按照你的说法做了,已解决了问题。  
  谢谢!Top

相关问题

  • ◆◆ 关于DELPHI属性编辑器的Grid ◆◆
  • ◆◆ 关于DELPHI属性编辑器的Grid ◆◆
  • Delphi有关属性编辑器的问题
  • 关于属性编辑器的问题(就是在系统中实现DELPHI的属性编辑器的那样的效果)
  • DELPHI的公式编辑器
  • 关于属性编辑器的问题:
  • 有关属性编辑器的问题:
  • 属性编辑器的开发!
  • 属性编辑器的入门问题
  • 属性编辑器找不到DesignIntf.dcu

关键词

  • delphi
  • 文件
  • 属性
  • 控件
  • 拷贝
  • 版本
  • 解决
  • source
  • 编辑器
  • 引用

得分解答快速导航

  • 帖主:Hank
  • enlightenment
  • taozc

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo