Ситуация такая. Я хочу отобразит некий фрейм с кучей компонентов с использованием плавного проявления (анимация свойства Opacity)
Если анимировать на прямую, то объекты фрейма проявляются не равномерно, и вообще выглядит не красиво.
Выход: Сделать скриншот фрейма, плавно и красиво его показать, потом скрыть и на его место поместить целевой фрейм.
Скриншот делаю с помощью MakeScreenshot. Однако в результате получаю картинку фрейма на момент последнего появления на экране, а если он еще не был отрисован, то пустую картинку. Но ведь мне надо снять сриншот до отрисовки.
Пробовал делать MakeScreenshot в событии onPaint фрейма, и там же его скрыть сразу. Действует, но периодически получается моргание, из-за того, что фрейм все же на долю секунды появляется на экране.
Пробовал делать Repaint рекурсивно для фрейма и всех дочерних элементов перед снятием скриншота:
procedure Repchild(aCtr: TControl);
var
xA: SmallInt;
begin
aCtr.Repaint;
for xA := 0 to aCtr.ChildrenCount - 1 do if aCtr.Children[xA] is TControl then Repchild(Tcontrol(aCtr.Children[xA]));
end;
без результатно.
Подскажите, как отрисовать TContro без вывода на экран?