Заголовки TLabel и TGroupbox мерцают при изменении размера

  • Итак, у меня есть приложение, которое загружает разные плагины и создает новую вкладку в TPageControl для каждого из них .
  • Каждая DLL имеет связанный с ней TForm.
  • Формы создаются со своим родительским hWnd в качестве нового TTabSheet.
  • Поскольку TTabSheets не является родительским элементом формы, что касается VCL ( не хотел использовать динамический RTL, и плагины, созданные на других языках ), мне приходится обрабатывать изменения размеров вручную. Я делаю это, как показано ниже:

     var 
    ChildHandle: DWORD; 
    begin 
    If Assigned (pcMain.ActivePage) Then 
    begin 
    ChildHandle : = FindWindowEx (pcMain.ActivePage.Handle, 0, 'TfrmPluginForm', nil); 
    Если ChildHandle> 0 Тогда 
    begin 
    SetWindowPos (ChildHandle, 0, 0, 0, pcMain.ActivePage.Width, pcMain.ActivePage.Height, SWP_NOZORDER + SWP_NOACTIVATE + SWP_NOCOPYBITS); 
    end; 
    end; 
     

Теперь моя проблема в том, что когда приложение изменяется размер, все TGroupBoxes и TLabels внутри TGroupBoxes мерцают. TLabels, которые не находятся внутри TGroupboxes, в порядке и не мерцают.

То, что я пробовал:

  • WM_SETREDRAW, за которым следует RedrawWindow
  • ParentBackground в TGroupBoxes и TLabels, для которых установлено значение False
  • DoubleBuffer: = True
  • LockWindowUpdate ( Да, хотя я знаю это очень неправильно )
  • Transparent: = False ( даже переопределение create для редактирования ControlState )

Есть идеи?

21
задан LU RD 9 November 2011 в 00:24
поделиться