Как уменьшить мерцание PageControl в Delphi?

в Delphi 2009 я обнаружил, что мерцание PageControl-которое происходит во время изменения размера формы - может быть уменьшено путем установки его DoubleBuffered свойство true.

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

2 ответов


задание ParentBackground до False для компонентов на PageControl очень помогло. Однако это приводит к другому цвету этих компонентов панели, все они теперь имеют более темный фон. Возможно, это можно легко исправить (без потери поддержки темы).

Я также установил VCL Fix Pack, который имеет исправление QC 56252 (TPageControl мерцает много с активной тематикой).


Это далеко не идеально, но вы можете использовать это:

  protected
    procedure WMExitSize(var Message: TMessage); message WM_EXITSIZEMOVE;
    procedure WMEnterSize(var Message: TMessage); message WM_ENTERSIZEMOVE;

procedure TFormMain.WMEnterSize(var Message: TMessage);
begin
  if Assigned(PageControlView.ActivePage) then
    PageControlView.Align := alNone;
end;

procedure TFormMain.WMExitSize(var Message: TMessage);
begin
  if Assigned(PageControlView.ActivePage) then
    PageControlView.Align := alClient;
end;

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