读取DFM的疑问(100分)

  • 主题发起人 主题发起人 Ginger
  • 开始时间 开始时间
G

Ginger

Unregistered / Unconfirmed
GUEST, unregistred user!
  当Delphi读取一个DFM时,遇到未知的Component或Property时,
会弹出对话框以通知用户,却不妨碍窗体文件的装载。而我用
Stream.ReadComponent载入窗体时,遇上未知的东西就会载入失败。
如何达到Delphi IDE 的效果呢?
 
你Delphi中安装的组件与程序开最初发时使用的组件不一致(可能某些属性是后来增加的)
 
  我不是指Delphi IDE无法装载DFM,相反,Delphi会出现类似
“Property XXXX not found. Ignore, Cancel”的对话框,选择
“Ignore”后,依然会显示窗体,只是某个组件被忽略了而已。
  而我自制的程序用ReadComponent载入一个DFM时,遇到这种
情形,只会弹出一个异常,从而无法显示窗体。我想克服的就是这个
问题。
 
异常处理
 
faint. 没用的,至多不会弹出Error对话框,窗体一样创建不了。
 
看来一下TReader代码,里面似乎没有on error resume next之类的(哈哈,用VB代码来形象表示了)
所以说基本不能实现这个功能。
 
使用ReadComponentResFile方法时候,如果窗体文件含有不在dclstd60.bpl的控件
如stringgrid,或自己写的控件,需要使用 类似如下的方法
RegisterClass(TForm1);
RegisterClass(TStringGrid);
可以放在单元文件尾部,自动初始化,即
initialization
RegisterClass(TForm1);
RegisterClass(TStringGrid);
finalization
UnRegisterClass(TForm1);
UnregisterClass(TStringGrid);
如果还不行,可以给我email我有例子yvtong@citiz.net
 
  我的意思是,我的程序将读取一些DFM,包括用户自己设计的DFM。
这些DFM中包含哪些控件在我写程序时是不可预知的,因此也无法用RegisterClass
先行注册。如何在读取时忽略未知的控件或属性呢?
 
后退
顶部