2016-11-14 49 views
9

我寫了TCustomFrame「,這已被恰好從TFrame(Forms.pas單元)複製的孩子類:爲什麼從TCustomFrame繼承的組件看起來與TFrame不同?

TMyFrame = class(TCustomFrame) 
    private 
    { Private declarations } 
    public 
    { Public declarations } 
    published 
    property Align; 
    property Anchors; 
    property AutoScroll; 
    property AutoSize; 
    property BiDiMode; 
    property Constraints; 
    property DockSite; 
    property DragCursor; 
    property DragKind; 
    property DragMode; 
    property Enabled; 
    property Color nodefault; 
    property Ctl3D; 
    property Font; 
    property Padding; 
    property ParentBackground default True; 
    property ParentBiDiMode; 
    property ParentColor; 
    property ParentCtl3D; 
    property ParentFont; 
    property ParentShowHint; 
    property PopupMenu; 
    property ShowHint; 
    property TabOrder; 
    property TabStop; 
    property Visible; 
    property OnAlignInsertBefore; 
    property OnAlignPosition; 
    property OnCanResize; 
    property OnClick; 
    property OnConstrainedResize; 
    property OnContextPopup; 
    property OnDblClick; 
    property OnDockDrop; 
    property OnDockOver; 
    property OnDragDrop; 
    property OnDragOver; 
    property OnEndDock; 
    property OnEndDrag; 
    property OnEnter; 
    property OnExit; 
    property OnGetSiteInfo; 
    property OnMouseActivate; 
    property OnMouseDown; 
    property OnMouseEnter; 
    property OnMouseLeave; 
    property OnMouseMove; 
    property OnMouseUp; 
    property OnMouseWheel; 
    property OnMouseWheelDown; 
    property OnMouseWheelUp; 
    property OnResize; 
    property OnStartDock; 
    property OnStartDrag; 
    property OnUnDock; 
    end; 

如上所述here,我已經最初限定的TFrame的子類,那麼我已切換到TCustomFrame並從DFM中刪除TabOrder屬性,以便能夠在IDE中打開該文件並重新編譯該程序包。

object MyFrame: TMyFrame 
    Left = 0 
    Top = 0 
    Width = 296 
    Height = 31 
    TabOrder = 0 //this line has been deleted 
end 

enter image description here

一切似乎都不錯,但打開和保存源文件後,有在DFM幾個新的屬性,並出現一個標題欄:

object MyFrame: TMyFrame 
    Left = 0 
    Top = 0 
    ClientHeight = 0 
    ClientWidth = 280 
    Color = clBtnFace 
    Font.Charset = DEFAULT_CHARSET 
    Font.Color = clWindowText 
    Font.Height = -11 
    Font.Name = 'Tahoma' 
    Font.Style = [] 
    OldCreateOrder = True 
    PixelsPerInch = 96 
    TextHeight = 13 
end 

enter image description here

爲什麼發生這種情況,我應該怎麼做才能避免這些問題?

+3

我也不明白爲什麼這個問題是downwoted。它有一個很好的問題描述和格式非常好。 – Ari0nhh

+0

我也沒有。可能downvoters有一個很好的理由... – RBA

+1

我可以猜測,你可能會得到反對票,因爲不是與Delphi的框架一起工作,你正在與它打架。基本上,你似乎已經開始了可能成爲一個永無止境的鏈條:解決了上一個問題,現在這裏是下一個... –

回答

6

我相信你所需要做的就是將你的框架類註冊爲一個自定義模塊。

在你的包的註冊過程中,添加如下內容:

procedure Register; 
begin 
[...] 
    RegisterCustomModule(TMyFrame, TCustomMyFrameModule) 
end; 

而且TCustomMyFrameModule被定義爲

TCustomMyFrameModule = class(TCustomModule) 
    function Nestable: Boolean; override; 
end; 

function TCustomMyFrameModule.Nestable: Boolean; 
begin 
    Result := True; 
end; 

編輯: 對於它的工作,你需要註冊一個自定義模塊在IDE中編輯的類的父類。

TFrame1 = class(TMyFrame) 
end; 
RegisterCustomModule(TMyFrame, TCustomMyFrameModule) 

如果你想編輯您的TMyFrame在IDE中,您將需要註冊自定義模塊TCustomFrame。

TMyFrame = class(TCustomFrame) 
end; 
RegisterCustomModule(TCustomFrame, TCustomMyFrameModule) 
+0

我在我的設計時包中複製了代碼,構建它並重新啓動IDE,但似乎沒有任何更改(標題欄仍然存在,並且dfm文件仍包含自動添加的屬性)。你能否澄清我所做的事情是否有缺失? – ExDev

+0

hmmm ....更仔細地閱讀你的問題,我想你需要'RegisterCustomModule(TCustomFrame,TCustomMyFrameModule)'使它工作。雖然我不確定這是最好的方式去做。我個人會製作2個類,1個擴展TCustomFrame(TMyFrame),然後1個用於在後代類('TWhatever = class(TMyFrame)')中設計框架。雖然我想這將需要2幀在不同的包裝。 –

+0

看來它現在起作用了!你能解釋一下爲什麼你重寫'Nestable'函數嗎?它有什麼作用?我沒有找到任何有用的[文檔](http://docwiki.embarcadero.com/Libraries/Seattle/en/DesignEditors.TCustomModule.Nestable)。 – ExDev

相關問題