Ограничение размера компонентов во время разработки

StackOverflow https://stackoverflow.com/questions/1640922

Вопрос

Я пытаюсь наследовать от TButton, чтобы предоставить некоторые возможности с учетом размера, где кнопки могут изменять свой размер и/или размер шрифта (в пределах определенных ограничений), чтобы разрешить изменения в тексте.

например

| малый |

или

| это действительно долгий |
| предложение на кнопке |

К счастью, это может быть та же кнопка в той же форме, все, что я сделал, это сбросил текст, и кнопка сама справляется с изменением размера.

Я реализовал все функции измерения текста, и функциональность работает. в точку.

я создал новые свойства maxHeight, minHeight, defaultHeight и т. д. для ширины и шрифта.

Когда пользователь меняет высоту по умолчанию, мой компонент времени разработки изменится и отразит эту новую высоту по умолчанию.

Однако когда пользователь использует обычные свойства высоты и ширины (или перетаскивает угол), я не знаю, как привязать их к высоте и ширине по умолчанию.

Я перехватил 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 (названия как минимум похожи на это).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top