1

サイズ認識機能を提供するためにTButtonから継承しようとしています。この機能では、ボタンのサイズを変更したり、フォントサイズ(特定の制約内)を変更してテキストを変更したりできます。

例えば

| 小さい|

また

| これは本当に長いです|
| ボタンの文|

幸いにも同じフォームの同じボタンである可能性があります。私が行ったのはテキストをリセットすることだけで、ボタンはサイズの変更自体に対応します。

すべてのテキスト測定機能を実装しましたが、機能はある程度機能します

私が行ったことは、WidthとFontの新しいプロパティmaxHeight、minHeight、defaultHeightなどを作成することです。

ユーザーがデフォルトの高さを変更すると、デザイン時のコンポーネントが変更され、この新しいデフォルトの高さが反映されます。

ただし、ユーザーが通常の高さと幅のプロパティを使用する場合(またはコーナーをドラッグする場合)、デフォルトの高さと幅にそれらを関連付ける方法がわかりません。

OnCanResizeをインターセプトしてイベントハンドラーを作成し、新しいサイズが最小最大値内にあることを確認しようとしました。そうでない場合は、必要に応じて最小または最大に設定しますが、境界内にある場合は更新します。ランタイムサイズ変更イベントをインターセプトできますが、デザインタイムはインターセプトできません。

設計時のサイズ変更を傍受できる場合、誰かがその方法を知っていますか?

それが少し長すぎる場合は申し訳ありませんが、それが理にかなっていることを願っています!

4

2 に答える 2

1

仮想SetBounds()メソッドをオーバーライドします。そこから、必要に応じてユーザーが要求したディメンションを調整してから、それらを祖先のSetBounds()メソッドに渡すことができます。例えば:

class TMyButton : public TButton
{
    typedef TButton inherited;

public:
    ...
    virtual void __fastcall SetBounds(int ALeft, int ATop, int AWidth, int AHeight);

__published:
    __property int MaxHeight = ...;
    __property int MinHeight = ...;
    ...
};

virtual void __fastcall SetBounds(int ALeft, int ATop, int AWidth, int AHeight)
{
    if (AHeight > MaxHeight) AHeight = MaxHeight;
    if (AHeight < MinHeight) AHeight = MinHeight;
    ...
    inherited::SetBounds(ALeft, ATop, AWidth, AHeight);
}
于 2009-10-29T21:48:18.480 に答える
0

ボタンはまだウィンドウであり、に応答できる(応答する)ことに注意してWM_GETMINAXINFOください。ほとんどのデザインツールはとを尊重しているptMinTrackSizeと思いますptMaxTrackSize(名前は少なくともそれに似ています)。

于 2009-10-29T00:20:03.147 に答える