在使用Frame作為基類實現繼承時,發現視窗出現“
Property OldCreateOrder does not exist ”的錯誤,在網上找了一大圈也沒有。後來在Borland網站上找到了一些線索http://qc.borland.com/wc/qcmain.aspx?d=9481 和 http://qc.borland.com/wc/qcmain.aspx?d=5866 ,看一下My Code:
TDMIBFrameHandle = class(TFrame)
protected
FOPETreeView: TMIBTreeView;
function CheckEditers: Boolean; virtual; abstract;
procedure ClearAddEditCheck; virtual; abstract;
procedure ClearEditer; virtual; abstract;
procedure DisableEditers; virtual; abstract;
procedure DisableGrid; virtual; abstract;
procedure EnabledEditers; virtual; abstract;
procedure EnableGrid; virtual; abstract;
function GetColumnValue(const aFieldName: string): Variant; virtual;
abstract;
procedure GetEditerValues; virtual; abstract;
procedure InitializeEditer; virtual; abstract;
procedure InitializeToolBar; virtual; abstract;
procedure StartSelect; virtual; abstract;
public
procedure Close; virtual;
procedure StartSurf; virtual;
end;
TDMIBFrame = class(TDMIBFrameHandle)
end;
光看這代碼我想應該沒有什麼問題,但問題就出在這代碼上。因為這個代碼是建立純PAS檔案,也就是說不帶視窗的PAS。因為OldCreateOrder 是Form才有屬性,那麼如果以這個類來繼承它會自動加上Form中的屬性(因為基類沒有視窗,而繼承類中有視窗,Delphi自動加上了Form的屬性)。那麼解決方案很簡單,建立一個帶視窗的Frame基類,再從這個基類繼承即可。不知道是不是單間D7的問題(感覺是個BUG),2007不知道有沒有這個問題。