TParametersProperty是ADO的参数属性编辑器,我现在要做改写一下这个属性编辑器,但继承下来后编译不了,好像差一个什么文件,怎么办哟!!(100

  • 主题发起人 主题发起人 tomboy
  • 开始时间 开始时间
T

tomboy

Unregistered / Unconfirmed
GUEST, unregistred user!
TParametersProperty是ADO的参数属性编辑器,我现在要做改写一下这个属性编辑器,但继承下来后编译不了,好像差一个什么文件,怎么办哟!!(100分)<br />另:属性编辑器注册后如何反注册?
 
是少Proxies单元吧[:D]
没关系,你把设计期和运行期的代码分到两个单元就可以了
可以看http://www.delphibbs.com/delphibbs/dispq.asp?lid=759837
 
delphi的代码是:
TParametersProperty = class(TCollectionProperty)
public
procedure Edit; override;
end;
我要做成
TPlusParametersProperty = class(TCollectionProperty)
public
procedure Edit; override;
end;

不是差Proxies单元,你们能不能做一下上面的代码????
做一下帮我看看是哪里的问题????

我明天去办公室试试分两个包的办法
 
按道理组件列表(Parameters)应从TCollection继承下来
但我发现
TParametersProperty&lt;-TCollectionProperty&lt;-TClassProperty
&lt;-TPropertyEditor

经查:少了ToolWnds单元

怎么办????各位,分少可以加嘛,帮我查一查!!
 
噢,确实没有,不过并不会影响注册属性编辑器,你把属性编辑器类所在的单元放在单独的单元里,
我这里注册成功了。
 
嘿嘿,老兄??你注册成功了?????除非你遇到鬼了!!!
我试过很多遍!我将属性编辑器的声明放在一个单独的单元里,源码如下:
unit PropertyEdit;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, PlusDB, DsgnIntf,adoreg;

type
TPlusCollectionProperty = class(TClassProperty)
Public
procedure Edit; Override;
function GetAttributes: TPropertyAttributes; Override;
function GetEditorClass: TCollectionEditorClass; Virtual;
function GetColOptions: TColOptions; Virtual;
end;

TPlusParametersProperty = class(TPlusCollectionProperty)
Public
procedure Edit; Override;
end;

procedure Register;

implementation

procedure Register;
begin
RegisterPropertyEditor(TypeInfo(TPlusParameters), TPlusQuery, 'Parameters', TPlusParametersProperty);
end;

{ TPlusParametersProperty }

procedure TPlusParametersProperty.Edit;
var
Parameters: TPlusParameters;
begin
try
Parameters := TPlusParameters(GetOrdValue);
if Parameters.Count = 0 then Parameters.Refresh;
except
{ Ignore any error when trying to refresh the params }
end;
inherited Edit;
end;

{ TCollectionProperty }

procedure TPlusCollectionProperty.Edit;
var
Obj: TPersistent;
begin
Obj := GetComponent(0);
while (Obj &lt;&gt; nil) and not (Obj is TComponent) do
Obj := TPersistentCracker(Obj).GetOwner;
ShowCollectionEditorClass(Designer, GetEditorClass,
TComponent(Obj), TCollection(GetOrdValue), GetName, GetColOptions);
end;

function TPlusCollectionProperty.GetAttributes: TPropertyAttributes;
begin
Result := [paDialog, paReadOnly];
end;

function TPlusCollectionProperty.GetColOptions: TColOptions;
begin
Result := TCollectionEditor;
end;

function TPlusCollectionProperty.GetEditorClass: TCollectionEditorClass;
begin
Result := [coAdd, coDelete, coMove];
end;

end.

根本通不过!!!报错说:
Error creating form:Ancestor for 'TToolbarDesignWindow' not found
还有adoreg.pas单元所引用的其它单元如:CustomModuleEditors等大部分单元
都找不到!!!!
 
203010:就等着你解决这个问题!!!几百分等着你拿呀!!兄弟:帮帮忙哈
 
我用你的代码试试...
 
可以搞定啊,我用Delphi6
unit Test;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
[red]// PlusDB 是你自己的单元吧[/red]
DesignIntf, DesignEditors, ColnEdit;
[red]//我没有包含AdoReg[/red]
type
TPlusCollectionProperty = class(TClassProperty)
Public
procedure Edit; Override;
function GetAttributes: TPropertyAttributes; Override;
function GetEditorClass: TCollectionEditorClass; Virtual;
function GetColOptions: TColOptions; Virtual;
end;

TPlusParametersProperty = class(TPlusCollectionProperty)
Public
procedure Edit; Override;
end;

procedure Register;

implementation

procedure Register;
begin
RegisterPropertyEditor(TypeInfo(TDateTime), TControl, 'Parameters', TPlusParametersProperty);
[red]//我随便写的[/red]
end;

{ TPlusParametersProperty }

procedure TPlusParametersProperty.Edit;
//var
// Parameters: TPlusParameters;
begin
{ try
Parameters := TPlusParameters(GetOrdValue);
if Parameters.Count = 0 then Parameters.Refresh;
except
{ Ignore any error when trying to refresh the params }
// end;
[red]//这个TPlusParameters也是你定义的吧[/red]
inherited Edit;
end;

{ TCollectionProperty }
type
TPersistentCracker = class(TPersistent);

procedure TPlusCollectionProperty.Edit;
var
Obj: TPersistent;
begin
Obj := GetComponent(0);
while (Obj &lt;&gt; nil) and not (Obj is TComponent) do
Obj := TPersistentCracker(Obj).GetOwner;
ShowCollectionEditorClass(Designer, GetEditorClass,
TComponent(Obj), TCollection(GetOrdValue), GetName, GetColOptions);
end;

function TPlusCollectionProperty.GetAttributes: TPropertyAttributes;
begin
Result := [paDialog, paReadOnly];
end;
[red]//下面两个函数的代码抄反了[/red][8D]
function TPlusCollectionProperty.GetColOptions: TColOptions;
begin
Result := [coAdd, coDelete, coMove];
end;

function TPlusCollectionProperty.GetEditorClass: TCollectionEditorClass;
begin
Result := TCollectionEditor;
end;

end.
 
不行的!
还是Error creating form:Ancestor for 'TToolbarDesignWindow' not found
在你的uses中要引用一个ColnEdit吧???而这个文件中又引用了ToolWnds
编译器总是说:ToolWnds.dcu没找到!!

是不是要单独把注册单元放进另一个包里去?但应该不会这样吧。麻烦你再试试
我用的D%5d5
 
你把这个单元放到一个单独的包中,设置这个包为设计期包(在Options里),试一下,
若还不行我再考虑是否要Install Delphi5
 
喂,千万别Build,过不去的,用Compile和Install
 
还是不行,一样的提示信息!继续。。。
 
Install Delphi6
 
咳,我明天去办公室试试,不过,我估计成功的可能性不大……
 
我把PropertyEdit放在一个单独的设计时包里还是不行。
在delphi6下编译也不行。
编译器告诉我:没有ComponentDesigner.dcu
咳!这个问题真头疼。我觉得是不是思路上有问题。
老大:
你能不能帮我试试:在不动d的源码的情况下给adoQuery
的参数对象加一个属性?比如加一个TControl类型的!
意思是让每一个参数都对应一个TControl
 
好,我明天做
 
做好了吗?给我回个话哈
 
做好了吗?
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部