如何向属性编辑器传递自定义的对象值?(100分)

  • 主题发起人 demogorgon
  • 开始时间
D

demogorgon

Unregistered / Unconfirmed
GUEST, unregistred user!
//定义的属性
type
TPairListProperty = class(TPropertyEditor)
procedure Edit; override;
function GetAttributes: TPropertyAttributes; override;
end;

////////////////在属性编辑器中编辑属性
////////////////TPairList和TValuePair都是自定义类型
///////////////下面的代码在设计时会出错,能弹出对话框
//bow~

procedure TPairListProperty.Edit;
var
Dlg: TPairListSettingDlg; //一个对话框
pl,pl2: TPairList;
vp: TValuePair;
begin
Dlg := TPairListSettingDlg.Create(Application);
try
with Dlg do
begin
Caption := 'Create PairList';
ShowModal;
//创建自定义类型的实例
pl := TPairList.Create;
vp := TValuePair.Create('sUserName', 'UserName');
pl.Add(vp);
//向属性编辑器设置属性
SetOrdValue(LongInt(@pl));
//读出属性
pl2 := TPairList(GetOrdValue);
//显示读出的属性
if pl2 = nil then
Showmessage('nil')
else
Showmessage(pl2.ElementAt(0).GetValue);
pl.Free;
pl2.Free;
end;
finally
Dlg.Free;
end
end;
 
找到错误了,是不能把pl,pl2释放
但是设置完以后在运行时察看pl得值还是nil,并没有设置进去,
how to?
 

别忘了inherited,要通过继承得到新类,一般情况下都有这句。

type
TPairListProperty = class(TPropertyEditor)
inherited;//一般情况下,都有这句。
procedure Edit; override;
function GetAttributes: TPropertyAttributes; override;
end;
 
这么写编译都过不了阿
 
sorry,very much 这样写不符合语法规则。
我的意思是 TPropertyEditor 中的某些属性需要合适的初始化值.
你最好写一个Constructor把TPropertyEditor 的构造函数继承下来,其中
更正如下:
type
TPairListProperty = class(TPropertyEditor)
procedure Edit; override;
function GetAttributes: TPropertyAttributes; override;
public
constructor create(owner:TPropertyEditor); //也许是更上一层的类
end;

constructor TPairListProperty.create(owner:TPropertyEditor);
begin
inherited create(owner);//inherited 应该这样写到这里,用于初始化继承来的部分
end;





 
还是不行啊:(
我看到有人的代码有这样一句
Designer.Modified;
我也加上了,但是还是不行,设置属性的时候我showmessage了一下,发现Designer是nil的
是不是这里的问题?怎么解决呢?
 
顶部