2016-11-14 4 views
9

私はTCustomFrame書いた:その後、私は 『sの子クラスの正確TFrame(Forms.pasユニット)からコピーされたS子クラスを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を定義しました』 IDEでファイルを開き、パッケージを再コンパイルするためにTCustomFrameに切り替え、TabOrderプロパティをDFMから削除しました。

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

enter image description here

すべてがOKと思われたが、ソースファイルを開いて保存した後、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

私はこの質問がなぜ下降されたのかも理解していません。それは良い問題の記述を持ち、かなり整形されています。 – Ari0nhh

+0

私も。おそらくダウンボッターは良い理由があります... – RBA

+1

Delphiのフレームワークで作業するのではなく、あなたが戦っているからです。そして、基本的には決して終わりのないチェーンになる可能性があります:前の問題が解決しました。今度は次のものが... –

答えて

6

フレームクラスをカスタムモジュールとして登録するだけです。それが機能するためには、あなたがのためのカスタムモジュールを登録する必要があり :

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

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

EDIT

として

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

をそしてTCustomMyFrameModuleが定義されています。あなたのパッケージの登録手続きで

、このような何かを追加IDEで編集しているクラスの親クラス。

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

IDEであなたのTMyFrameを編集したい場合は、TCustomFrameのためのカスタムモジュールを登録する必要があります。

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

デザインタイムパッケージにコードをコピーしてビルドし、IDEを再起動しましたが、何も変更されていないようです(タイトルバーはまだ存在し、dfmファイルには自動的に追加されたプロパティが含まれています)。私がしたことに何かが欠けているかどうかを明らかにしてください。 – ExDev

+0

hmmm ....あなたの質問をより慎重に読んで、それが動作するには 'RegisterCustomModule(TCustomFrame、TCustomMyFrameModule)'が必要になると思います。私はそれが最善の方法であるかどうかはわかりませんが。私は個人的に、TCustomFrame(TMyFrame)を拡張し、1つの子孫クラス( 'TWhatever = class(TMyFrame)')でフレームを設計する2つのクラスを作成します。私はそれが2つのフレームが異なるパッケージにあることを必要とすると思うが。 –

+0

それは今働くようです! 'Nestable'関数をオーバーライドする理由を教えてください。それは何をするためのものか?私はそれに関する有用な[ドキュメンテーション](http://docwiki.embarcadero.com/Libraries/Seattle/en/DesignEditors.TCustomModule.Nestable)が見つかりませんでした。 – ExDev

関連する問題