設計時にコンポーネントのサイズを制限する
-
08-07-2019 - |
質問
ボタンのサイズやフォントサイズ(特定の制約内)を変更してテキストの変更を可能にするサイズ認識機能を提供するために、TButtonから継承しようとしています
e.g。
|小さい|
または
|  これは非常に長い   |
|ボタン上の文|
同じフォームの同じボタンでも問題ありません。テキストをリセットするだけで、ボタンはサイズの変更自体に対応します。
すべてのテキスト測定機能を実装しましたが、機能はポイントまで機能します。
やったことは、WidthとFontの新しいプロパティmaxHeight、minHeight、defaultHeightなどを作成することです。
ユーザーがデフォルトの高さを変更すると、設計時コンポーネントが変更され、この新しいデフォルトの高さが反映されます。
ユーザーが通常のHeight&を使用する場合ただし、幅のプロパティ(または角をドラッグ)をデフォルトの高さと幅に関連付ける方法がわかりません。
OnCanResizeをインターセプトし、イベントハンドラーを作成し、新しいサイズが最小値以内であることを確認しようとしました。そうでない場合は、必要に応じて最小または最大に設定しますが、境界内であれば更新します。ランタイムのサイズ変更イベントをインターセプトできますが、デザインタイムはできません。
設計時のサイズ変更を傍受することが可能な場合、誰もがその方法を知っていますか?
それが少し長すぎる場合は申し訳ありませんが、それが理にかなっていることを願っています!
解決
仮想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);
}
他のヒント
ボタンはまだウィンドウであり、 WM_GETMINAXINFO
に応答できる(する)ことに注意してください。ほとんどの設計ツールは ptMinTrackSize
と ptMaxTrackSize
を尊重していると思います(名前は少なくともそれに類似しています)。