啊~~~~~~~~~~无人可以解决吗,,,不会吧????我可是抱了很大希望的啊~~~~~~~~~~~~

解决方案 »

  1.   


    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([email protected])    2001.11.13 
     对该文的评论       yemang ( 2001-11-22 15:05:29 )  我已经找了好长时间了,总算有人可以给出答案了。 
     
          Hank ( 2001-11-19 19:55:55 )  简单说明就只有两条:
    1、引用文件DesignIntf.pas和DesignEditors.pas
    2、在Package的工程中引用designide 
     
          scxby ( 2001-11-17 15:27:49 )  不用这么复杂,我是将要用到的文件DesignIntf.pas和DesignEditors.pas复制到LIB目录下,编译时有错,修改这两个文件不要引用Proxies,将调用了Proxies中过程的代码通通注释掉,我用了一段时间,还没有出问题。 
     
          Hank ( 2001-11-16 19:32:54 )  TO:youfly
    这句话的意思是:
    你定义的控件所在的文件中不要引用DesignIntf.pas和DesignEditors.pas两个文件,因为你的实际应用程序(注意:是你日常的程序,例如各种实际的应用软件而不是你的Package)在编译时会试图找这两个文件而会引用到Proxies.dcu,实际上Proxies.dcu已经编译到designide.dcp对应的designide.bpl文件中,这个文件根本就不存在,所以就会报错。
    因为属性编辑器只是在应用程序设计期间才有效,所以根本就没有必要引用这个文件,只是在你的注册文件中引用两个文件即可!总之,一句话:在定义的控件所在的文件中不要引用DesignIntf.pas和DesignEditors.pas两个文件。 
     
          youfly ( 2001-11-15 19:39:44 )  不要在运行期间将在进行期间使用的文件加入对DesignIntf.pas和DesignEditors.pas两个文件的引用,否则依然会出现找不到Proxies.dcu文件的问题,要将文件脱离!