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

原创 2001年11月14日 14:57:00

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

    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的编辑器版本是VER140,Delphi 5.0的编辑器版本是VER130,下面是本人的一个真实的引用文件:
    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(starfarm@263.net)

    2001.11.13

delphi6

  • 2008年08月21日 15:31
  • 394KB
  • 下载

论坛问题收集(3)----Delphi 组件撰写常见问题

转自《慧都控件网》第二部份 整合环境2.1 在整合环境中如何找出组件所产生的问题?我发现唯一能找出问题的方法只有:在 Delphi 整合环境的 Tools|Options 对话框的 Library 页...
  • sdjnjdxc
  • sdjnjdxc
  • 2007年05月24日 14:50
  • 591

delphi 自我删除和线程池

unit Unit4; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, F...
  • earbao
  • earbao
  • 2015年06月16日 10:41
  • 1540

Delphi 组件撰写常问问题

1.1 此份文件的目的为何? 这份文件的目的是为了解答有关撰写 Delphi组件时常见或文件上找不到的问题。我曾经花了一段很长的时间来了解探索 TDataLink 类别,这让我觉得应该将撰写组件时常遇...
  • cwxiao888
  • cwxiao888
  • 2004年02月17日 18:48
  • 785

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

  • zgqtxwd
  • zgqtxwd
  • 2008年05月01日 00:02
  • 67

Delphi组件编辑器

看到Dev中的cxGrid组件的编辑器很强大,于是很想探究一下,跟踪cxGrid的代码比较麻烦,但原理大概知道一二.首先来研究一下设计器双击cxGrid弹出一个编辑窗体,选择窗体中的一个内容后,属性编...
  • henreash
  • henreash
  • 2012年03月20日 09:56
  • 3291

delphi中OleContainer加载word文档的几个问题

在delphi中有时候需要将word文档以数据流的形式保存到数据库中然后展现出来,同时又需要修改word文档进行实时保存。以下以例子展示 1.通过oleContainer导入...
  • ann_0801
  • ann_0801
  • 2012年02月07日 13:59
  • 2069

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

Delphi 6.0中属性编辑器的解决方案 Delphi 6.0中属性编辑器的解决方案     Delphi中用户可以自己声明属性编辑器在程序设...
  • Hank
  • Hank
  • 2001年11月14日 14:57
  • 1245

自定义控件添加上自定义的控件属性。

一、概述 平时大家在看别人写的代码时,可能在一个自定义控件的XML中也发现过类似的代码: 大家看最后三个属性: [html] view pla...
  • qq_24954199
  • qq_24954199
  • 2015年11月26日 16:53
  • 303

为控件添加自定义附加属性

原文出处:http://www.cnblogs.com/DebugLZQ/p/3153098.html 附加属性 附加属性,大家都不陌生,最常见的是Canvas.Left/Canvas.T...
  • chelen_jak
  • chelen_jak
  • 2013年11月21日 18:17
  • 857
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Delphi 6.0中属性编辑器的解决方案
举报原因:
原因补充:

(最多只允许输入30个字)