У меня есть панели инструментов Джордана Рассела Toolbar2000, которые я создаю во время выполнения с помощью встроенного TFrame и закрепляю на главной форме приложения. Этот фрейм имеет встроенную панель, которая, в свою очередь, содержит другие панели и различные элементы управления. Итак, структура:
TTBDock
TTBToolbar
TFrame (align=alNone, Autosize=true)
TPanel 1 (align=alNone, Autosize=true)
TPanel 2 (align=alTop ,Autosize = false)
TPanel 3 (align=alTop ,Autosize = false)
TPanel 4 (align=alTop , Autosize = false)
Идея состоит в том, что панели 2, 3, 4 имеют явный размер высоты, а фрейм (и, следовательно, панель инструментов) затем автоматически изменяет размер, чтобы приспособиться к новому размеру.
Он работает нормально, за исключением того, что размер панели инструментов неправильный при первом отображении панели инструментов, прикрепленной к основной форме приложения. Если я принудительно изменю размер панели инструментов в этот момент (например, снова явно изменив размер высоты TPanel с помощью щелчка мыши), он будет правильным. Я пытался дважды вызвать подпрограмму для установки размера, вызвав Update, Application.ProcessMessages, ReAlign - похоже, ничего не работает, кроме как позволить основной форме рисовать, а затем снова выполнить изменение размера вручную.
Если я прервусь в конце процедуры изменения размера и проверю размер панели и размер кадра, они будут правильными, но размер панели инструментов — нет, поэтому при первом отображении кадр частично отображается на панели инструментов неправильного размера. Он появляется сразу после очередного вызова процедуры изменения размера, но только после того, как основная форма нарисовала себя.
Я мог бы придумать что-нибудь неприятное, например, явно изменить размер панелей после истечения таймера, но я бы предпочел решить проблему в ее источнике.
Любые идеи относительно того, почему это может происходить (или не происходить)?