原文见“http://www.cnblogs.com/sonicit/archive/2008/03/30/1129586.html”html
说明:看了上面那位兄台的解法后,仍是有些不明因此,不明白他说的最后一句话——”那么解决方法很简单,建立一个带窗口的Frame基类,再从这个基类继承便可“到底是什么,纠结了好久,spa
后来在 majingli 的帮助下,才明白,在Delphi 7 下的 TFrame 的继承不像咱们在 MFC 中的操做同样直接改代码就能够了,而是要经过 IDE 来进行操做。htm
具体问题描述blog
因为需求总在变化,加上不断的会进行重构,因此咱们有可能在 一个 TFrame3=class(TFrame)已经写到比较完善时,忽然想把其基类从 TFrame 转成 TFrame2;按咱们的在 MFC 中的习惯作法,咱们会先建立一个 TFrame2,而后手动编辑 TFrame3 的 pas 文件,使其变为 TFrame3=class(TFrame2);而后运行程序,OK,一切正常。继承
但是当咱们关闭工程,再打开时,会弹对话框,显示 “ TabOrder does not exit“,此时,不管咱们选择什么,再次运行时都会弹出”Property OldCreateOrder does not exist错误。ci
解决的办法it
删除 TFrame3, 再从新由 IDE 生成 TFrame3,在建立时选择由 ”Frame2“ 派生, 而后再把原 TFrame3 的 pas 文件复制过来便可.能够看到,二者的 pas 文件是彻底如出一辙的, 光从代码根本看不出任何问题. 这应该算是 delphi7 的bug了。class
补充重构
有的时候,咱们已经建立了太多的 TFrame3, 这样一个一个从新派生,再改其 pas 文件,实在是一项很是浩大的工程,这会对重构形成极大的负担,那么有没有更好的办法呢?object
由于 pas 文件是彻底一致的,因此咱们只能把目标放在 dfm 文件上,打开 TFrame3 的 dfm 文件,其第一行写的是 “object Frame3: TFrame3”;再打开一个由IDE建立的,派生自 TFrame2 的 TFrame4 的 dfm 文件,其第一行写的是“inherited Frame4: TFrame4”,那么这是否是就是问题因此呢?咱们试着把“object Frame3: TFrame3”,改为“inherited Frame3: TFrame3”, 再次运行,一切 OK。