![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| DarkProg |
|
|||
![]() Законченный романтик ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1784 Регистрация: 11.3.2009 Где: Земля Репутация: 2 Всего: 19 |
В общем проблема наверное корректно назвать с перерисовкой, хотя может ошибаюсь - щас объясню.
У меня есть форма которая динамически создаётся. Почти все компоненты DevExpress, кроме панелек на коорых это всё расположено. Панельки - обычные TPanel. Смотрю профилировщиком AQTimePro время выполнения строчек. И оно невероятно долгое при создании компонентов и их настройке. Внутри своего кода вижу что наибольшее по времени занимают такие действия как изменение координат компонента, т.е. TControl.Top:=XTop занимает почти всё время выполнения процедуры создания компонента. А на втором месте по длительности выполнения стоит изменение высоты компонетов. Поставил у всех TPanel FullRepaint в False - эффект ноль. Пробовал использовать LockWindowUpdate - эффект ноль, к тому же добавилось время выполнение блокировки. Я даже не знаю что ещё попробовать. Форма тоже блокируется, но ничего не помогает... Я даже пробовал создавать все компоненты не показывая форму, т.е. по идее перерисовываться в этом момент ничего не должно - эффект ноль. Кто-нибудь может подсказать в чём проблема? P.S. Такие проблемы наблюдаются как у TPanel, так и у Других компонентов. -------------------- "И твоя голова всегда в ответе за то куда сядет твой зад..." "Я студент - скажите с какого я ВУЗа..." |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
у формы и у панелей попробуй включить DoubleBuffered
Добавлено через 5 минут и 11 секунд http://delphiblog.ru/2007/double-buffering-delphi/ но не факт, что поможет |
|||
|
||||
| tikskit |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 17.5.2008 Репутация: нет Всего: нет |
А попробуйте, в качестве эксперимента, у формы (на которой все находится) перекрыть метод AlignControls и оставить его пустым:
Будет ли все создаваться так же долго? Добавлено через 55 секунд Имею в виду ту форму, которая создается у вас динамически |
|||
|
||||
| ivan219 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1121 Регистрация: 19.11.2005 Где: Планета земля Репутация: 2 Всего: 12 |
Во время создания в Create сделать все контролы не видимыми.
После в Show сделать видимыми. Если не помогает значит дело в чём то другом. |
|||
|
||||
| DarkProg |
|
|||
![]() Законченный романтик ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1784 Регистрация: 11.3.2009 Где: Земля Репутация: 2 Всего: 19 |
А разве то что форма не отображается это не одно и тоже? -------------------- "И твоя голова всегда в ответе за то куда сядет твой зад..." "Я студент - скажите с какого я ВУЗа..." |
|||
|
||||
| CROTishka |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 192 Регистрация: 30.7.2009 Репутация: 1 Всего: 2 |
а не проще WM_PAINT "хавать" во время загрузки? |
|||
|
||||
| ivan219 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1121 Регистрация: 19.11.2005 Где: Планета земля Репутация: 2 Всего: 12 |
Не знаю. Но когда создаёшь контролы с Visible := False; а потом когда всё создано и настроено делаешь True то процес ускорялся. + ко всему если в контролы нужно занести какую то информацию скажем в Memo то это то же тормозит если контрол видим. |
|||
|
||||
| tikskit |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 17.5.2008 Репутация: нет Всего: нет |
По-моему, вы зря думаете, что дело в перерисовке. Уверен, что дело в лавинообразном позиционировании компонентов. Миллионы рекурсивных вызовов всяких RequestAlign, AlignControls, или что-то вроде того.
Вы пробовали перекрыть AlignControls, как я предлагал? Или перекройте не у формы, а у TPanel (наследника напишите), на котором все лежит. |
|||
|
||||
| DarkProg |
|
|||
![]() Законченный романтик ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1784 Регистрация: 11.3.2009 Где: Земля Репутация: 2 Всего: 19 |
Я вчера ковырял исходники делфи - основная проблема в том, что все методы связанные с изменением высоты, ширины, координат вообще чихать хотели на свойство Visible и будут работать в любом случае.
Выход я нашёл - раньше я пытался изначально нормально расставлять все компоненты - как результат долго и тяжело, а теперь я на это забил и выполняю расстановку один раз - куда эффективнее. И смысл? Я думал насчёт того чтобы не давать полностью выполняться функции SetTop и подобным ей, написав наследника, но к сожалению это в данный момент не актуально. К тому же это касается не только Panel. Компонент сам перерисовывается и заставляет перерисоваться родителей. Включение различных свойств и отключение их заметной прибавки не даёт(это профилировщиком если смотреть по числам, а временами даже становится хуже). -------------------- "И твоя голова всегда в ответе за то куда сядет твой зад..." "Я студент - скажите с какого я ВУЗа..." |
|||
|
||||
| tikskit |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 17.5.2008 Репутация: нет Всего: нет |
Смысл в том, что у вас не перерисовка тормозит, а позиционирование. Вы можете настроить профайлер так, чтобы он покрывал не только ваш код, но и VCL? Нужно проследить откуда в подавляющем большинстве вызывается метод SetBounds. Только сделайте резервную копию исходников VCL, на всякий случай. Это сообщение отредактировал(а) tikskit - 16.1.2012, 19:07 |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |