做控件时重写DefineProperties函数时的问题。 (200分)

  • 主题发起人 主题发起人 singlesword
  • 开始时间 开始时间
S

singlesword

Unregistered / Unconfirmed
GUEST, unregistred user!
我写一个ToolBar控件,这个TXXToolBar内的按钮是
存放在一个TList中的。
FButtons: TList
我在TXXToolBar中重写DefineProperties,使得在设
计期的时候,可以把button的信息写到.dfm中。
可是在我用Writer.WriteComponent跟Reader.ReadComponent
的时候,就是出异常,研究了好长时间都搞不定。
我的TXXToolBarButton这个类里没什么特别的,就是
从TControl继承的加了两个自定义的enum类属性而已。

哪位高人指导一下?
 
如果你没有写过DefineProperties的话,那么请首先参考Delphi的源码。因为你没有贴出源码所以没办法帮你调试。
首先先确定你写入的是否正确.方法在窗体中设置,然后选择view form as text查看*.dfm的代码或者保存之后,直接用记事本打开(D6/7)
然后再调试读入.整个代码在调试的时候最好你能加入异常处理,否则DelphiIDE很可能会出错的
 
现在就是没法查看*.dfm,我找到原因了,但不知道怎么解决。
终于发现我的控件在设计期不能写到dfm的问题就出在这个函数上。
我在自己的程序中直接调用WriteComponent跟ReadComponent,
发现是可以把控件写入二进制文件的。
可是当用ObjectBinaryToText转换为Text的时候就出了错。
错误信息跟设计期报的错一样。
这是怎么回事?难道是这个函数的bug?
 
Writer.WriteListBegin;
for i := 0 to FButtons.Count - 1 do
begin
Button := TDPCToolBarButton(FButtons.Items);
Writer.WriteComponent(Button);
end;
Writer.WriteListEnd;
在defineproperties的write函数里是这样写的,
得到的是这样一陀
FButtons = 2.11650224923299E214d
arButton
后面就是因为出异常断掉了,这是怎么回事?
 
用TCollectionItem来存储你的TList信息,就不用自己重写那个了,你那样也不是好办法。
 
>>可是当用ObjectBinaryToText转换为Text的时候就出了错。
>>错误信息跟设计期报的错一样。
>>这是怎么回事?难道是这个函数的bug?

不要动不动就怀疑这个有Bug那个有Bug,如果按你这个逻辑,那为什么别人做的好好的,你做就不行,那是不是你也有Bug???[:D]
 
后退
顶部