开发控件遇到的二个问题。(100分)

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

tomboy

Unregistered / Unconfirmed
GUEST, unregistred user!
一、我要给AdoQuery的参数对象增加一个属性,不允许直接
修改AdoDB单元,所以只能把相关的类继承出来,由于
TParameter和AdoQuery之前关系复杂,请各位大侠看看应该
如何去做,给指条路……
二、DBedit的DataField属性是String的,但为什么在设置该
属性的时候,却弹出一个选择框呢?我估计是因为绑定了
DataLink的关系。但我做了一个控件,有一个属性也是设置
字段名,但这个控件却不需要DataLink的其它功能,我只希望
能弹出一个列出备选字段的东东,供开发人员选择就行了,
我应该怎么做?
 
我想你不應該直接從dbedit類繼承﹐應該從抽象類
 
DBedit的DataField属性是String的,但为什么在设置该
属性的时候,却弹出一个选择框呢?我估计是因为绑定了
DataLink的关系。
//不是因为DataLink,而是因为属性编辑器的缘故
但我做了一个控件,有一个属性也是设置
字段名,但这个控件却不需要DataLink的其它功能,我只希望
能弹出一个列出备选字段的东东,供开发人员选择就行了,
我应该怎么做?
//你要自己做一个属性编辑器,然后用
RegisterPropertyEditor(TypeInfo(string), TMyEdit, 'DataField', TMyEditProperty);
//可以参考Source/ToolsApi/DesignEditors.pas里的代码
 
我要给AdoQuery的参数对象增加一个属性,不允许直接
修改AdoDB单元,所以只能把相关的类继承出来,由于
TParameter和AdoQuery之前关系复杂,请各位大侠看看应该
如何去做,给指条路……
//这个比较麻烦,不如把ADOQuery和TParameter等的代码挖出来,改名重写,不过好象笨了点
 
谢谢203010,你分析的很正确,和我自已摸索出来的方法一样!干杯!
第二个问题已解决,而第一个问题也是由于属性编辑器引起的,我已经
把类继承作好了,但由于TParametersProperty是ADO的参数属性编辑器,
我现在要做改写一下这个属性编辑器,但继承下来后
编译不了,好像差一个什么文件,怎么办哟!!
 
uses
DsgnIntf;

type
TFieldEditor = class(TStringProperty)
public
function GetAttributes: TPropertyAttributes; override;
procedure GetValueList(List: TStrings); virtual;
procedure GetValues(Proc: TGetStrProc); override;
end;

function TFieldEditor .GetAttributes: TPropertyAttributes;
begin
Result := [paValueList, paSortList, paMultiSelect];
end;

procedure TFieldEditor .GetValues(Proc: TGetStrProc);
var
I: Integer;
Values: TStringList;
begin
Values := TStringList.Create;
try
GetValueList(Values);
for I := 0 to Values.Count - 1 do Proc(Values);
finally
Values.Free;
end;
end;

procedure TFieldEditor .GetValueList(List: TStrings);
begin
List.Add('dev');
List.Add('encrsnet');
end;

procedure Register;
begin
RegisterComponents('Sample', [TMyClass]);
RegisterPropertyEditor(TypeInfo(string), TMyClass, 'DataField', TFieldEditor );
end;
 
你应该把注册属性编辑器的代码和其他的分开到两个Pas里
参考http://www.delphibbs.com/delphibbs/dispq.asp?lid=759837
 
多人接受答案了。
 
后退
顶部