Есть ли способ временно приостановить стили 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;