我需要调用TCustomerADODataSet的ConnectionString的对话框(50分)

  • 主题发起人 主题发起人 autumn
  • 开始时间 开始时间
A

autumn

Unregistered / Unconfirmed
GUEST, unregistred user!
我建立了一个控件,在ide时我想调用connectionstring的对话框,
我该怎么办?
附:我的控件不是从tcustomeradodataset继承下来的。
 
我尝试将adoreg.pAS加入我自己的包里,
在“我的控件.pas”中USE ADOREG.PAS,
添加以下代码:
RegisterPropertyEditor(TypeInfo(WideString),
我的控件,
'我的控件的属性',
TConnectionStringProperty);
编译的时候,停在了adoreg.pas 的use中的CustomModuleEditors
但是我找了我的硬盘也没有发现这个文件。

我不知道这这一步是否走对了,如果是对的,那下一步我该怎么办?
 
to autumn:
你还想知道答案吗?想的话就贴个帖子吧
 
简单:
打开Dclusr50.dpk,在requires后加入dclado50即可。

BTW:
hubdog,这样可不好.....
 
哎,前路崎岖,大侠们还须继续扶持:
按照沈前卫的方法加入了dclado50,install这个包,把这个控件放到form里,
但是一按Object Inspector的哪个属性,就出现以下错误:
Access vailation at address ... in module 'vcl50.bpl '.read of address
fffff.
我首先怀疑自己的pas有问题,于是简单的建立一个component,情况一样。
 
把你代码寄给我,我帮你调试.
shenqw@21cn.com
 
hubdog:
???
我帖,我帖,我越爱贴!!
呵呵,象止血贴的广告。
 
unit AdoComponent;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
dsgnintf,typinfo,adoconed;

type
TAdoComponent = class(TComponent)
private
{ Private declarations }
FDemo:WideString;
protected
{ Protected declarations }
public
{ Public declarations }
published
{ Published declarations }
property Demo:WideString read FDemo Write FDemo;
end;

TDemoProperty=class(TStringProperty)
function GetAttributes: TPropertyAttributes; override;
procedure Edit;override;
end;
procedure Register;

implementation

function EditConnectionString(Component: TComponent): Boolean;
var
PropInfo: PPropInfo;
NewConnStr,
InitialConnStr: WideString;
begin
Result := False;
with TConnEditForm.Create(Application) do
try
Caption := Format('%s%s%s %s', [Component.Owner.Name, DotSep,
Component.Name, 'demo']);
PropInfo := GetPropInfo(Component.ClassInfo, 'demo');
InitialConnStr := GetStrProp(Component, PropInfo);
NewConnStr := Edit(InitialConnStr);
if NewConnStr <> InitialConnStr then
begin
SetStrProp(Component, PropInfo, NewConnStr);
Result := True;
end;
finally
Free;
end;
end;

procedure Register;
begin
RegisterComponents('CX Lib', [TAdoComponent]);
RegisterPropertyEditor(TypeInfo(WideString), TAdoComponent, 'demo', TDemoProperty);
end;

{ TDemoProperty }

procedure TDemoProperty.Edit;
begin
if EditConnectionString(GetComponent(0) as TComponent) then
Modified;
end;

function TDemoProperty.GetAttributes: TPropertyAttributes;
begin
result:=[padialog];
end;

end.
 
我怎么不认真看看adoconed.pas. Hubdog是对的,分该给他.我就......
 
问题解决了。谢谢两位鼎力指教!
不知可否买一送一,呵呵,蛇心不足啊!
也教我以后少伤点财。//又不见了50大员了。

上面的代码adoreg.pas中好象差不多,但是我看不明白。也没有细看把。
为什么不能直接用TConnectionStringProperty?
遇上这类问题通常该如何办?
 
多人接受答案了。
 
后退
顶部