我试图从TButton继承以提供一些尺寸感知功能,其中按钮能够调整自身和/或其字体大小(在某些约束内)以允许更改文本
e.g。
|小|
或
|这是一个很长的事 |按钮上的句子|
很可能是同一个表单上的相同按钮,我所做的就是重置文本,按钮可以自行处理尺寸变化。
我已经实现了所有文本测量功能,并且功能到点。
我所做的是为宽度和字体创建新属性maxHeight,minHeight,defaultHeight等。
当用户更改默认高度时,我的设计时组件将更改并反映此新的默认高度。
当用户使用正常高度&然而宽度属性(或拖动角落)我不知道如何将它们绑定到默认的高度和宽度。
我拦截了OnCanResize并创建了一个事件处理程序,并尝试确认新的大小是否在最大最小值内。如果不是,则根据需要设置为最小值或最大值,但如果在边界内则更新。我能够拦截运行时调整大小事件,但不能拦截设计时间。
如果可以截取设计时间调整大小,有谁知道怎么做?
抱歉,如果这有点啰嗦,希望有道理!答案 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
。我相信大多数设计工具都尊重ptMinTrackSize
和ptMaxTrackSize
(名称至少与此类似)。