Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запрет перерисовки компонентов 
:(
    Опции темы
DarkProg
Дата 12.1.2012, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Законченный романтик
***


Профиль
Группа: Завсегдатай
Сообщений: 1784
Регистрация: 11.3.2009
Где: Земля

Репутация: 2
Всего: 19



В общем проблема наверное корректно назвать с перерисовкой, хотя может ошибаюсь - щас объясню.

У меня есть форма которая динамически создаётся. Почти все компоненты DevExpress, кроме панелек на коорых это всё расположено. Панельки - обычные TPanel.

Смотрю профилировщиком AQTimePro время выполнения строчек. 
И оно невероятно долгое при создании компонентов и их настройке. Внутри своего кода вижу что наибольшее по времени занимают такие действия как изменение координат компонента, т.е. TControl.Top:=XTop занимает почти всё время выполнения процедуры создания компонента. А на втором месте по длительности выполнения стоит изменение высоты компонетов. 

Поставил у всех TPanel FullRepaint в False - эффект ноль. Пробовал использовать LockWindowUpdate - эффект ноль, к тому же добавилось время выполнение блокировки. Я даже не знаю что ещё попробовать. Форма тоже блокируется, но ничего не помогает...
Я даже пробовал создавать все компоненты не показывая форму, т.е. по идее перерисовываться в этом момент ничего не должно - эффект ноль.

Кто-нибудь может подсказать в чём проблема?

P.S. Такие проблемы наблюдаются как у TPanel, так и у Других  компонентов.


--------------------
"И твоя голова всегда в ответе за то куда сядет твой зад..."

"Я студент - скажите с какого я ВУЗа..."

 smile  smile  smile 
PM MAIL   Вверх
Akella
Дата 13.1.2012, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



у формы и у панелей попробуй включить DoubleBuffered

Добавлено через 5 минут и 11 секунд
http://delphiblog.ru/2007/double-buffering-delphi/

но не факт, что поможет
PM MAIL   Вверх
tikskit
Дата 13.1.2012, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 17.5.2008

Репутация: нет
Всего: нет



А попробуйте, в качестве эксперимента, у формы (на которой все находится) перекрыть метод AlignControls и оставить его пустым:


Код

procedure TForm1.AlignControls(AControl: TControl; var ARect: TRect);
begin
//  inherited;

end;


Будет ли все создаваться так же долго?

Добавлено через 55 секунд
Имею в виду ту форму, которая создается у вас динамически
PM MAIL WWW   Вверх
ivan219
Дата 15.1.2012, 00:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 2
Всего: 12



Во время создания в Create сделать все контролы не видимыми. 
После в Show сделать видимыми.
Если не помогает значит дело в чём то другом.
PM MAIL ICQ   Вверх
DarkProg
Дата 15.1.2012, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Законченный романтик
***


Профиль
Группа: Завсегдатай
Сообщений: 1784
Регистрация: 11.3.2009
Где: Земля

Репутация: 2
Всего: 19



Цитата(ivan219 @  15.1.2012,  01:08 Найти цитируемый пост)
Во время создания в Create сделать все контролы не видимыми. 
После в Show сделать видимыми.
Если не помогает значит дело в чём то другом. 

А разве то что форма не отображается это не одно и тоже?


--------------------
"И твоя голова всегда в ответе за то куда сядет твой зад..."

"Я студент - скажите с какого я ВУЗа..."

 smile  smile  smile 
PM MAIL   Вверх
CROTishka
Дата 16.1.2012, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 30.7.2009

Репутация: 1
Всего: 2



Цитата

Во время создания в Create сделать все контролы не видимыми. 
После в Show сделать видимыми.
Если не помогает значит дело в чём то другом. 

а не проще WM_PAINT "хавать" во время загрузки?
PM MAIL   Вверх
ivan219
Дата 16.1.2012, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 2
Всего: 12



Цитата(DarkProg @  15.1.2012,  12:15 Найти цитируемый пост)
А разве то что форма не отображается это не одно и тоже?

Не знаю. 
Но когда создаёшь контролы с Visible := False; а потом когда всё создано и настроено делаешь True то процес ускорялся.
+ ко всему если в контролы нужно занести какую то информацию скажем в Memo то это то же тормозит если контрол видим.
PM MAIL ICQ   Вверх
tikskit
Дата 16.1.2012, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 17.5.2008

Репутация: нет
Всего: нет



По-моему, вы зря думаете, что дело в перерисовке. Уверен, что дело в лавинообразном позиционировании компонентов. Миллионы рекурсивных вызовов всяких RequestAlign, AlignControls, или что-то вроде того.

Вы пробовали перекрыть AlignControls, как я предлагал? Или перекройте не у формы, а у TPanel (наследника напишите), на котором все лежит.
PM MAIL WWW   Вверх
DarkProg
Дата 16.1.2012, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Законченный романтик
***


Профиль
Группа: Завсегдатай
Сообщений: 1784
Регистрация: 11.3.2009
Где: Земля

Репутация: 2
Всего: 19



Я вчера ковырял исходники делфи - основная проблема в том, что все методы связанные с изменением высоты, ширины, координат вообще чихать хотели на свойство Visible и будут работать в любом случае.

Выход я нашёл - раньше я пытался изначально нормально расставлять все компоненты - как результат долго и тяжело, а теперь я на это забил и выполняю расстановку один раз - куда эффективнее.

Цитата(tikskit @  16.1.2012,  19:09 Найти цитируемый пост)
Вы пробовали перекрыть AlignControls, как я предлагал?

И смысл?

Я думал насчёт того чтобы не давать полностью выполняться функции SetTop и подобным ей, написав наследника, но к сожалению это в данный момент не актуально. К тому же это касается не только Panel. Компонент сам перерисовывается и заставляет перерисоваться родителей. Включение различных свойств и отключение их заметной прибавки не даёт(это профилировщиком если смотреть по числам, а временами даже становится хуже).


--------------------
"И твоя голова всегда в ответе за то куда сядет твой зад..."

"Я студент - скажите с какого я ВУЗа..."

 smile  smile  smile 
PM MAIL   Вверх
tikskit
Дата 16.1.2012, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 17.5.2008

Репутация: нет
Всего: нет



Цитата(DarkProg @  16.1.2012,  18:55 Найти цитируемый пост)
И смысл?


Смысл в том, что у вас не перерисовка тормозит, а позиционирование.

Вы можете настроить профайлер так, чтобы он покрывал не только ваш код, но и VCL? Нужно проследить откуда в подавляющем большинстве вызывается метод SetBounds. Только сделайте резервную копию исходников VCL, на всякий случай.

Это сообщение отредактировал(а) tikskit - 16.1.2012, 19:07
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0620 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.