gpt4 book ai didi

c++ - 在设计时限制组件的大小

转载 作者:太空宇宙 更新时间:2023-11-04 12:27:11 25 4
gpt4 key购买 nike

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

例如

|小 |

|这真的很长 |
|按钮上的句子 |

可以很高兴地成为同一个表单上的同一个按钮,我所做的只是重置文本,按钮自己应对尺寸变化。

我已经实现了所有文本测量功能,并且该功能在某种程度上有效。

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

当用户更改默认高度时,我的设计时组件将更改并反射(reflect)这个新的默认高度。

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

我拦截了 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);
}

关于c++ - 在设计时限制组件的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1640922/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com