2016-10-19 4 views
0

TPageControlの子孫がtsTabs以外のStyleプロパティを持たないようにします。TPageControl:Styleプロパティの変更を防止する方法

一見、SetStyleを無効にしようとしましたが、基本クラスでプライベートと宣言されています。誰もがアイデアを持っている

+0

いくつかの自己拘束機能を使用してください。 –

+0

私はTCustomPageControlが利用可能であると期待していました。しかし、非です。関連するQを参照してください。[どのようにして子孫コンポーネントからプロパティを削除しますか?](http://stackoverflow.com/questions/15961579/how-do-you-remove-a-property-from-a-descendent-コンポーネント) – kobik

+0

@kobik: 'TPageControl'は' TCustomTabControl'から派生しています。しかし、いずれにしても、そのリンクに記述されている技術のほとんどは設計時にプロパティを隠すだけですが、プロパティは実行時にコードにアクセスできます。 –

答えて

3

TPageControlあなたが求めていることをネイティブにサポートしていません。

  1. は、あなたのコンポーネントが新しいgetter/setterメソッドを持つStyleプロパティを再宣言していて、その後、何もせずセッター出口を持っている:あなたが求めているものを達成するために、あなたはどちらかしな​​ければなりません。ただし、コンポーネントのユーザーが本当にアクセスしたい場合、継承されたStyleプロパティは実行時に技術的にアクセス可能です。

  2. TPageControlが行うすべてのものをTCustomTabControl代わりにTPageControlからコンポーネントを引き出すと、再実装が、保護されたStyleプロパティを促進することなく。ただし、コンポーネントのユーザーが本当にアクセスしたい場合、継承されたStyleプロパティは実行時に技術的にアクセス可能です。

  3. コンポーネントが仮想CreateParams()メソッドをオーバーライドし、TCS_TABSウィンドウスタイルを強制的にTCreateParams.Styleフィールドに追加します。 Styleプロパティには、ユーザーが割り当てた値(TabPositionプロパティの動作にも影響します)が残りますが、少なくとも基礎となるウィンドウは常にtsTabsスタイルが使用されているかのように動作します。

  4. 実行時に直接TCustomTabControl.SetStyle()をフックして何もせずにリターンするための迂回ライブラリを使用します。

+0

@kobik:どのプロシージャ/関数/メソッドも実行時にフックすることができます。そのトリッキーな部分は、そのメモリアドレスを取得することにあります。プライベートメソッドに対してもそれを行う方法があります。 –

関連する問題