Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Звук, графика и видео > Перерисовка окна с DBGRidEH


Автор: AndreyZ53 20.3.2014, 09:33
Доброго времени суток дорогие форумчане!

Я обращаюсь с такой проблемой. У меня на форме (главной) на всю ширину и высоту установлен DBGridEh, в котором отображается 30-40 записей. Данная форма у меня прячется в трей, в течение дня. То есть, пользователь открыл с трея, данные обновились, он посмотрел, что необходимо и дальше ее свернул.

Вопрос заключается в том, что когда разворачиваем программу из трея, окно программы, где расположен грид, не отображается в течение 1-2 секунд, я прикладываю картинку, как у меня отображается грид. Через 2 секунды, все данные в нем обратно нормально отображаются.

Вопрос вот в чем, можно как-то сделать, чтобы при разворачивании из трея, грид сразу нормально отображался с формой, а не ждать 1-2-3-4 секунды (если компьютер работает 1-2 дня, то когда приходишь и разворачиваешь из трея, оно около 3-5 секунд перерисовывает).

user posted image

Заранее спасибо за какие-то советы, помощь и так далее!

Автор: Alexeis 20.3.2014, 10:51
  Судя по картинке это Windows XP, который страшно любит экономить оперативку, даже если ее 8 гигов будет. Как только прога улетает в трей он радостно выгружает ее из оперативы и свопит на диск. При попытке показа возникают ошибки доступа к памяти медленная операция доставания из свопа. Можно поэкспериментировать вот с этой функцией SetProcessWorkingSetSize - она позволяет менять рабочий набор программы (в оперативке) позволяя держать больше данных программы. Можно изначально задать проге побольше оперативки, а можно вместо того, чтобы сразу показывать окно, сначала вызвать SetProcessWorkingSetSize, заставив Windows загрузить бОльший рабочий набор в оперативу, а затем только вызывать у форм функцию Show. После вызова функции Hide можно напротив вызвать SetProcessWorkingSetSize с параметрами -1 -1, т.е. вернуть состояние по умолчанию. 
  А может в кешировании нуждается не сама прога, а только данные, к которым обращается грид. Т.е. для отрисовки он опрашивает свой источник данных, а источник данных не торопиться. Нет данных нечего рисовать, вот и ждет.

Автор: AndreyZ53 20.3.2014, 12:14
Alexeis, Хм, спасибо большое за совет. Действительно, я попробовал воспользоваться Вашей функцией и у меня получилось. Программа почти сразу же отрисовывает мой грид, правда она сейчас больше памяти потребляет, эдак на 10 МБ где-то.

Плюсую Вам, если что-то пойдет не так, я обращусь еще, если не против Вы

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)