我不知道如何实现你的需求,不过可以变通一下,用ComponentEditor吧

解决方案 »

  1.   

    用RegisterPropertyEditor,具体查帮助
      

  2.   

    我想这是很常见的吧。
        比如ClientDataset的filename属性(d6),就是这种实现类型的,只不过不允许
    用户直接在Object Inspector中填写的话避免不存在的文件的判断(当然在代码中赋值
    是无法避免的,还是要加上存在判断)。
      

  3.   

    为什么不用FileExists来判断呢?
      

  4.   

    to 楼上的:(刚刚回复完毕才发现又有新回复,再打开已看不见您的代号了)
           有现成的OpenDialog使用,也要借助RegisterPropertyEditor吗?
      

  5.   

    更正:
       to li_zhifu(东北人)
         有现成的OpenDialog使用,也要借助RegisterPropertyEditor吗?    to superjs(真剑神)
         我是指在自设计的组件中添加一个这样的属性啊,用于指定文件(当然指定后有
    别的用途),FileExists还是要用的,可以用来当用户直接赋值时使用。
      

  6.   

    在组件单元中加一个类:
    TmyProperty = class(TPropertyEditor)
      private
      public
        procedure Edit; override;
        function GetAttributes: TPropertyAttributes; override;
      end;
    在实现部分procedure TmyProperty.Edit;
    var
      OpenDialog: TOpenDialog;
    begin
      { Execute editor }
      OpenDialog := TOpenDialog.Create(Application);
      ...
    end;function TmyProperty.GetAttributes: TPropertyAttributes;
    begin
      Result := [paDialog];
    end;注册您的控件
    RegisterComponents('Samples', [TyourComponet]);
    在注册部分加一句
    RegisterPropertyEditor(TypeInfo(Integer), TyourComponet, 'yourproperty', TmyProperty);
      

  7.   

    嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻
    嘻嘻嘻测试成功嘻嘻嘻嘻
    嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻//....
      published
        property FileName: TFileName read FFileName write FFileName;
    //....
      

  8.   

          published:
            AppName: TFileName read AppName write SetAppName
    //               ~~~~~~~~~
      

  9.   

    接上问,我在程序中如li_zhifu所写,但是TmyProperty = class(TPropertyEditor)
      private
      public
        procedure Edit; override;
        function GetAttributes: TPropertyAttributes; override;
      end;
    编译时,出现Undefined Type TPropertyEditor的错误。然后我在uses中加了VCLEditors,Undefined...错误是不见了,但是出现了Can not find VCLEditors.dcu。是不是因为我D6没有安装好的问题?(在安装D6时,在最后阶段,总出现错误。)
      

  10.   

    to TR@SOE():你好呀~!BCB斑竹
      

  11.   

    to zswang:
          试了一下,好像不能filter文件类型
      

  12.   

    ZSWang, tks. Let me try later. 
      

  13.   

    嘻Delphi标准控件也一样
    不要要求太高了!解决先没有办法只有自己写编辑器了
      

  14.   

    to TR@SOE():可Delphi6.0行不通,唉遗憾
      

  15.   

    to TR@SOE():设置搜索路径为($Delphi)\ToolApi
      

  16.   

    搜索路径为“C:\Program Files\Borland\Delphi6\Source\ToolsAPI”//本单元为手工添加
    //放在“C:\Program Files\Borland\Delphi6\Lib\proxies.pas”中
    unit Proxies;interfaceprocedure CreateSubClass(Instance: TObject; const ClassName, UnitName: string;
      Ancestor: TClass); overload;
    procedure CreateSubClass(Instance: TObject; const ClassName: string;
      Ancestor: TClass); overload;
    procedure DestroySubClass(Instance: TObject);
    procedure RenameSubClass(Instance: TObject; const ClassName: string;
      const UnitName: string = '');
    function CreateSubClassMethod(Instance: TObject;
      const MethodName: string): Pointer;
    procedure ChangeToProxyClass(Instance: TObject; Proxy: TClass);
    procedure RenameSubClassMethod(Instance: TObject; Method: Pointer;
      const MethodName: string);
    procedure DestroySubClassMethod(Instance: TObject; Method: Pointer);
    function IsProxyClass(ClassType: TClass): Boolean;implementationprocedure CreateSubClass(Instance: TObject; const ClassName, UnitName: string;
      Ancestor: TClass); overload;
    begin
    end;procedure CreateSubClass(Instance: TObject; const ClassName: string;
      Ancestor: TClass); overload;
    begin
    end;procedure DestroySubClass(Instance: TObject);
    begin
    end;procedure RenameSubClass(Instance: TObject; const ClassName: string;
      const UnitName: string = '');
    begin
    end;function CreateSubClassMethod(Instance: TObject;
      const MethodName: string): Pointer;
    begin
    end;procedure ChangeToProxyClass(Instance: TObject; Proxy: TClass);
    begin
    end;procedure RenameSubClassMethod(Instance: TObject; Method: Pointer;
      const MethodName: string);
    begin
    end;procedure DestroySubClassMethod(Instance: TObject; Method: Pointer);
    begin
    end;function IsProxyClass(ClassType: TClass): Boolean;
    begin
      Result := False;//我要是知道这些代码就好了!
    end;end.
      

  17.   

    或者从Delphi5.0中复制Proxies.duc很合理
    或者下载Delphi6.0的升级包另外我很少用第三方控件
      

  18.   

    to TR@SOE() :
         你把这个组件放在你的组件包里编译,注意这个包要requires DesignIDE,这样就可已了。
      
      

  19.   

    d6中注册属性编辑器有些问题,可能会彻底破坏IDE,请有类似情况的朋友注意一下
         我再试试,回头把结果贴出来……