Есть ли способ временно приостановить стили VCL при перерисовке формы?

Я работаю с этим унаследованным приложением Delphi, которое претендует на то, чтобы сделать его более современным с помощью стилей VCL. Одна из форм вызывает проблему с выставочной остановкой.

Эта проблемная форма динамически создает элементы управления из спецификации. Не только это, но это не создает все элементы управления одновременно. Он имеет иерархическую организацию с элементами управления, нарисованными на групповых полях, и щелчок флажка или переключателя может привести к созданию нового вложенного группового блока с новыми элементами управления в нем. По крайней мере, часть времени все элементы управления в форме сохраняют свои состояния, удаляются, а затем восстанавливаются и восстанавливаются их состояния. Это приемлемо работает с элементами управления старой школы (например, Windows NT 3.51), но при добавлении стилей VCL для перерисовки этой формы может потребоваться больше минуты.

Я думаю, что происходит то, что стилизация вызывает события Windows, на которые отвечает устаревший код рисования форм, заставляя его повторять то, что уже сделано. Мне интересно, есть ли способ временно отключить стилизацию, чтобы эта форма полностью прорисовывалась перед применением любых изменений, которые будут сделаны стилем.

Обречен ли я на разочарование?

Изменить: это с Delphi XE3.

1 ответ

Использование Vcl.Themes.TStyleManager чтобы переключить стиль для использования, либо Windows (имеется в виду нормальный стиль) или Vcl style вы выбрали как в следующем тест-коде:

uses ..., Vcl.Themes;

TForm11 = class(TForm)
// ... 
private
  StylesDisabled: boolean;
// ...
end;

procedure TForm11.Button1Click(Sender: TObject);
begin
  StylesDisabled := not StylesDisabled;

  if StylesDisabled then
    TStyleManager.SetStyle('Windows')
  else
    TStyleManager.SetStyle('Amethyst Kamri');
end;
Другие вопросы по тегам