to 楼上的:(刚刚回复完毕才发现又有新回复,再打开已看不见您的代号了) 有现成的OpenDialog使用,也要借助RegisterPropertyEditor吗?
更正: to li_zhifu(东北人) 有现成的OpenDialog使用,也要借助RegisterPropertyEditor吗? to superjs(真剑神) 我是指在自设计的组件中添加一个这样的属性啊,用于指定文件(当然指定后有 别的用途),FileExists还是要用的,可以用来当用户直接赋值时使用。
在组件单元中加一个类: 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);
接上问,我在程序中如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时,在最后阶段,总出现错误。)
比如ClientDataset的filename属性(d6),就是这种实现类型的,只不过不允许
用户直接在Object Inspector中填写的话避免不存在的文件的判断(当然在代码中赋值
是无法避免的,还是要加上存在判断)。
有现成的OpenDialog使用,也要借助RegisterPropertyEditor吗?
to li_zhifu(东北人)
有现成的OpenDialog使用,也要借助RegisterPropertyEditor吗? to superjs(真剑神)
我是指在自设计的组件中添加一个这样的属性啊,用于指定文件(当然指定后有
别的用途),FileExists还是要用的,可以用来当用户直接赋值时使用。
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);
嘻嘻嘻测试成功嘻嘻嘻嘻
嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻//....
published
property FileName: TFileName read FFileName write FFileName;
//....
AppName: TFileName read AppName write SetAppName
// ~~~~~~~~~
private
public
procedure Edit; override;
function GetAttributes: TPropertyAttributes; override;
end;
编译时,出现Undefined Type TPropertyEditor的错误。然后我在uses中加了VCLEditors,Undefined...错误是不见了,但是出现了Can not find VCLEditors.dcu。是不是因为我D6没有安装好的问题?(在安装D6时,在最后阶段,总出现错误。)
试了一下,好像不能filter文件类型
不要要求太高了!解决先没有办法只有自己写编辑器了
//放在“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.
或者下载Delphi6.0的升级包另外我很少用第三方控件
你把这个组件放在你的组件包里编译,注意这个包要requires DesignIDE,这样就可已了。
我再试试,回头把结果贴出来……