Delphi的属性页问题(送200分)(200分)

  • 主题发起人 主题发起人 xujunhua
  • 开始时间 开始时间
X

xujunhua

Unregistered / Unconfirmed
GUEST, unregistred user!
我编写了一些ACtiveX的控件,但编写他的属性页的时候,属性页里改变的数据
在设计的状态下可以反映到控件中,但程序运行是使用的值却是不变的,
UpdateObject和UpdatePropertyPage的代码都已写好。不知是何问题,解决
者个200分
 
能不能看一下代码。
 
代码很长,如果你现在在网上的话,我们立即讨论
 
控件实现部分的代码:

function Teee.Get_buttoncaption: WideString;
begin
result:=Button1.Caption;
end;

procedure Teee.Set_buttoncaption(const Value: WideString);
begin
Button1.Caption:=Value;
end;

属性页部分的代码:

procedure TPropertyPage1.UpdatePropertyPage;
begin
{ Update your controls from OleObject }
Edit1.text:=OLEOBject.buttonCaption;
end;

procedure TPropertyPage1.UpdateObject;
begin
{ Update OleObject from your controls }
OLEOBject.buttonCaption:=Edit1.Text;
self.Modified;
end;

 
控件实现部分的代码:
1)
procedure Teee.DefinePropertyPages(DefinePropertyPage: TDefinePropertyPage);
begin
{ Define property pages here. Property pages are defined by calling
DefinePropertyPage with the class id of the page. For example,
DefinePropertyPage(Class_QueryXPage)
}
DefinePropertyPage(Class_PropertyPage1);
end;
2)self.modified可以不要

 
sunjc,那不是问题之所在,我试过.
 
常有的事,就是这样.可我也没明白是怎么回事.
 
我现在已经清楚一些,不过我还是想期待更好的答案
 
本问题变成讨论性质的问题,请大家随便发言。
斑竹,分数可以转吗?
 
看了你们的回答,我受益非浅!
 
有可能是这样的情况:
就是你修改的值并不是存放在控件中的值.也就是说,你将你的属性传递到属性编辑对象中
时,如果用的是值传递的话(也就是不是传递的是这个属性本身的指针,即不是地址传递)
这样,你的属性编辑对象,编辑了这个属性值后,还需要将值复制到原来的控件的属性的
存值变量中去的.
例如:
type
TAControl = class(TControl)
private
FItems: TStrings;
published
property Items: TStrings read FItems write SetItems;
end;
在传递属性时如果是这样做的.
AStrings.Assign(ITems)

这样传递过来的就是其值.如果在属性编辑中修改了AStrings的值,并没有将其传递回去的.
还要用Items.Assign(AStrings)才行.
其实一般的,可以用这样的赋值方法:
AString := Items,
这样也就可以了,同时,还不要为AString申请内存.
 
>>斑竹,分数可以转吗?

可以,请说说你的想法
 
接受答案了.
 
后退
顶部