在设计时限制组件的大小

时间:2009-10-29 00:06:36

标签: c++ c++builder custom-component vcl

我试图从TButton继承以提供一些尺寸感知功能,其中按钮能够调整自身和/或其字体大小(在某些约束内)以允许更改文本

e.g。

|小|

|这是一个很长的事 |按钮上的句子|

很可能是同一个表单上的相同按钮,我所做的就是重置文本,按钮可以自行处理尺寸变化。

我已经实现了所有文本测量功能,并且功能到点

我所做的是为宽度和字体创建新属性maxHeight,minHeight,defaultHeight等。

当用户更改默认高度时,我的设计时组件将更改并反映此新的默认高度。

当用户使用正常高度&然而宽度属性(或拖动角落)我不知道如何将它们绑定到默认的高度和宽度。

我拦截了OnCanResize并创建了一个事件处理程序,并尝试确认新的大小是否在最大最小值内。如果不是,则根据需要设置为最小值或最大值,但如果在边界内则更新。我能够拦截运行时调整大小事件,但不能拦截设计时间。

如果可以截取设计时间调整大小,有谁知道怎么做?

抱歉,如果这有点啰嗦,希望有道理!

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:0)

请记住,按钮仍然是一个窗口,可以(将)响应WM_GETMINAXINFO。我相信大多数设计工具都尊重ptMinTrackSizeptMaxTrackSize(名称至少与此类似)。

相关问题