原文見「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。