- Итак, у меня есть приложение, которое загружает разные плагины и создает новая вкладка в 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); If ChildHandle > 0 Then 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 (Да, хотя я знаю, что это очень не так)
- Прозрачный: = False (даже переопределение для редактирования ControlState)
Любые идеи?