Спасибо, что поделились своим вариантом решения и примером!
По поводу описанного вами артефакта с «проскальзыванием» страницы и прыганием окон — это можно скорректировать настройками самих окон:
Зафиксируйте координаты и размер: Задайте для всех этих окон абсолютно одинаковый размер, одинаковые координаты появления по X и Y, запретите перетаскивание и выставите одинаковое позиционирование, например, по центру.
В этом случае окна будут открываться строго в одних и тех же координатах и перестанут «разбегаться» по экрану при переключении.
Что касается «проскальзывания» фоновой страницы — скорее всего, при текущем огромном размере окна (во весь экран) этот дефект и происходит постоянно, так как движку тяжело каждый раз перерисовывать такую большую область. Если же уменьшить размер окон, то этот эффект проявится только при самом первом открытии/загрузке. После этого графический кэш подтянется. Переключение станет абсолютно бесшовным и дефект полностью пропадёт.
Использовал вот такой код для переключения окон, с ним точно открытия перестают «проскальзывать»:
begin
// Закрываем все окна вкладок у кликнувшего клиента
GeneralSettingPOU25.CloseClient(GetClientName);
ProductSupplySettingPOU25.CloseClient(GetClientName);
TankSettingPOU25.CloseClient(GetClientName);
TemperatureSettingPOU25.CloseClient(GetClientName);
// Открываем то окно, за которое отвечает нажатая кнопка (по её Tag)
case Sender.Tag of
1: GeneralSettingPOU25.ShowClient(GetClientName);
2: ProductSupplySettingPOU25.ShowClient(GetClientName);
3: TankSettingPOU25.ShowClient(GetClientName);
4: TemperatureSettingPOU25.ShowClient(GetClientName);
end;
end.