Как я могу заставить свою форму изменить размеры более гладко?

Да это будет работать хорошо. Однако в любом случае действительно необходимо поместить другую запись в перечисление, определяющее значение количества объектов:

enum ButtonState {
    BUTTON_NORMAL,
    BUTTON_PRESSED,
    BUTTON_CLICKED,
    STATE_COUNT
};

Тогда можно определить массив как

Color colors[STATE_COUNT];

иначе, это - путаница для хранения суммы состояний синхронной с размером массива. Перечисления будут всегда запускаться с нуля, если не иначе инициализированный, и затем каждой дополнительной записи присвоят значение один выше предыдущего, если не иначе инициализированный. Конечно, также не причинило бы боль при помещении нуля явно, если Вы хотите. Если бы Вы не возражаете против дополнительного кода, я обернул бы доступ к необработанному массиву с помощью функции как

Color & operator[](ButtonState state) {
    return array[state];
}

Или эквивалент getColor функция, передающая запрос. Это запретило бы непосредственно индексацию массива с некоторым целым числом, которое почти наверняка в какой-то момент перестанет работать, потому что каждый понимает индексы превратно.

21
задан Rob Kennedy 21 September 2009 в 16:43
поделиться

4 ответа

procedure TForm1.WMEnterSizeMove(var Message:TWMMove);
begin
  Self.DisableAlign;
end;

procedure TForm1.WMExitSizeMove(var Message:TWMMove);
begin
  Self.EnableAlign;
end;
16
ответ дан 29 November 2019 в 21:35
поделиться

Попробуйте использовать WM_SETREDRAW ( не LockWindowUpdate ).

Вы также можете посмотреть DeferWindowPos .

5
ответ дан 29 November 2019 в 21:35
поделиться

Сложные формы часто состоят из вложенных панелей, и процесс перерисовки может вызвать мерцание. Если это так с вашим проектом, есть два простых решения, которые могут помочь:

  1. Отключите свойство FullRepaint на ваших панелях.
  2. Включите свойство DoubleBuffered в вашей форме. Вы не найдете это свойство в инспекторе объектов, поэтому поместите DoubleBuffered: = true; в FormCreate.
5
ответ дан 29 November 2019 в 21:35
поделиться

Я обошел это следующим образом:

  1. В событии «OnResize» формы имейте процедуру, чтобы скрыть все дочерние элементы управления, а затем запустить таймер с тиком около 500 мс.
  2. Когда сработает таймер, отключите его, а затем установите все дочерние элементы управления как видимые.

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

Bri

1
ответ дан 29 November 2019 в 21:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: