1

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

例如

| 小|

或者

| 这真的很长|
| 按钮上的句子| 高分辨率照片| CLIPARTO

很可能是同一个表单上的同一个按钮,我所做的只是重置文本,并且按钮本身可以应对大小变化。

我已经实现了所有的文本测量功能,并且功能工作到一定程度

我所做的是为宽度和字体创建新属性 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. 我相信大多数设计工具都尊重ptMinTrackSizeand ptMaxTrackSize(名称至少与 that 相似)。

于 2009-10-29T00:20:03.147 回答