![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Фрейм мелькает
REA © (2007-09-21 14:47:00)Создаю в run-time фрейм с выравниваением alClient, устанавливаю Parent := Panel. Фрейм сначала появляется на панели и только потом выравнивается. Из за этого получается мелькание. Эксперименты с Visible ни к чему не привели. Как избавиться от мелькания?
REA (2007-10-05 15:18:00) [1]Да нет конечно, но конкретно эта функция влияет и на другие приложения похоже.
Котик Б (2007-09-26 15:05:00) [2]
> LockWindowUpdate это тяжелая артилерия. Одно окно может
> быть только заблокировано и я опасаюсь эту функцию использовать.
>
У тебя во время смены фреймов что-то рисуется ?
У меня нет - да и при показе нового фрейма стараюсь ничего не считать.
А если бы нужно было что-то пересчитывать - то засунул бы в паралельный поток.
REA (2007-09-26 14:35:00) [3]LockWindowUpdate это тяжелая артилерия. Одно окно может быть только заблокировано и я опасаюсь эту функцию использовать.
Котик Б (2007-09-26 11:14:00) [4]Я делал так:
// На начало операции в главное окно выведен фрейм с Align = alClient
// И создан дополнительный фрейм которым нужно заменить текущий активный
// Используется в главной форме property ActiveFrame: TFrame read FActiveFrame write FActiveFrame;
// У всех фреймов установлен Align = alClient независимо от того какого размера они в design-time
LockWindowUpdate(Parent.Handle); // Тут хендл окна куда будем выводить активный фрейм
ActiveFrame.Hide(); // Прячем текущий
Sleep(100); // Впринципе не нужен - но этим достигается приятное психологическое восприятие, оптимальный диапазон 50-150
---
тут несколько опраторов для переназначения активного фрейма и назначения парентов - если не указал ранее
---
ActiveFrame.Show(); // Уже новый активный фрейм - старый сохранён в стеке
LockWindowUpdate(0);
REA (2007-09-26 10:27:00) [5]Может пригодиться - если есть информация, давай
Котик Б (2007-09-26 10:15:00) [6]Еще актуально ?
REA (2007-09-25 10:41:00) [7]Наткнулся тут еще на трюк - при создании делают изначально нулевой размер (фрейма, панели и т.п.)
Суслик (2007-09-21 16:44:00) [8]вообще не должно мелькать то.
у меня все в динамике - ничего не мелькает.
REA (2007-09-21 16:29:00) [9]До этого хотел сделать TPageControl с динамически пересоздаваемыми страницами - вообще ужасно мелькает даже без фреймов. Помучался, отказался от этой идеи. Может с формой и не самая абсурдная мысль.
REA (2007-09-21 16:27:00) [10]Ну это действительно зверски... я как то уже сделал как в [1]. Приемлемо вроде. WM_ERASEBKGND перехватил для панели на которой рисуется - так поменьше заметно мелькание
homm (2007-09-21 15:04:00) [11]Вот демка в тему:
http://kolmck.net/demos/DemoNoFlicks.zip
homm (2007-09-21 15:01:00) [12]> [2] REA (21.09.07 14:54)
> А запретить ему мелькать никак на время выравнивания?
Есть зверски оригинальное решение, подходящее в твоем случае. Создаешь форму, размерами такими-же как твоя, делаешь поверх своей основной, потом создаешь фрейм, уничтожаешь форму. Фишка в том, что-бы перехватывать все сообщения WM_PAINT WM_ERASEBKGND для этой формы, и на ней ничего не бцдет рисоватся.
Ega23 (2007-09-21 14:56:00) [13]
> А запретить ему мелькать никак на время выравнивания?
Пожалуй никак.
REA (2007-09-21 14:54:00) [14]Да вроде можно, но придется еще одну панель тогда сделать (потому как на той не один этот фрейм). Уже была такая мысль.
А запретить ему мелькать никак на время выравнивания?
DVM (2007-09-21 14:50:00) [15]
> Как избавиться от мелькания?
попробуй вручную задать размер равный размеру панели и лишь потом выравнивание