Вниз
Скачать: CL | DM;

Отрисова формы по ходу обработки данных   Найти похожие ветки 

 
SergeyV   (2004-02-13 14:30) [0]

Уважаемые Гуру, ну просветите пожалуйста "молодого" как это вы пишите хорошие программы :))

В программе идет длительная обработка данных (обрабтка больших массивов в математике или выполнение хранимых процедур в базе данных). Обработка разбита на несколько этапов.
На главной форме есть Memo в который выводятся комментарии по ходу решения. проблема в том что если пользователь запустив расчет, свернул окно, то развернув его прочитать комментарии уже не удасться.
Форма просто не успевает отрисовываться.

Пробовал разместить на форме Label и Timer чтобы писать время по ходу решения. В начале делаю
StartTime := Time;
а на обработчик таймера вешаю
StopTime := Time;
label.Caption:=TimeToStr(StartTime-StopTime)
и опять форма (а точнее Label на ней) не отрисовывается.


 
Семен Сорокин ©   (2004-02-13 14:32) [1]

В программе идет длительная обработка данных (обрабтка больших массивов в математике или выполнение хранимых процедур в базе данных). Обработка разбита на несколько этапов.
вытаскивай обработку в поток (TThread) а по окончании этапа отрисовывай через Synhronize.


 
olookin ©   (2004-02-13 14:32) [2]

Добавьте после всего этого Application.ProcessMessages


 
Семен Сорокин ©   (2004-02-13 14:32) [3]

если без потоков тогда Application.ProcessMessages надо добавить.


 
Тимохов ©   (2004-02-13 14:33) [4]

Используй Application.ProcessMessages - вызывай по ходу дела все будет отрисовываться. Или у окна c сообщением вызывай refresh.


 
VLAD-MAL   (2004-02-13 14:33) [5]

Application.ProcessMessages;
в каждой итерации цикла пробовал вызывать?


 
Тимохов ©   (2004-02-13 14:34) [6]


> VLAD-MAL (13.02.04 14:33) [5]

Если попробует в каждой итерации, то следующий его вопрос будет - почему дельфи такая медленная.

Автору. Не вызывай application.processmessages слишком часто - если у тебя большой цикл, то вызывай на каждые 100 итераций, 1000 или еще как - установи экспериментом.


 
YurikGl   (2004-02-13 15:44) [7]

Я делал Form.Repaint после каждого изменения содержания формы и все работало.


 
Тимохов ©   (2004-02-13 15:45) [8]


> Repaint

Логично - это тот же refresh


 
YurikGl   (2004-02-13 15:46) [9]

Кстати, а различие у них есть?


 
Alexey_85   (2004-02-13 15:47) [10]

To: YrikGI
ProcessMessages её вызовет...
RePaint толку не даст если я захочу перетащить форму во время выполнения трудоемкого кода?


 
YurikGl   (2004-02-13 15:48) [11]

Действительно, не перетаскивается. :(


 
Тимохов ©   (2004-02-13 15:49) [12]


>
> Alexey_85 (13.02.04 15:47) [10]

Точно не даст.
Repaint просто принудительно все перерисовывает. Но никаких сообщений при этом не обрабатывается.


 
KSergey ©   (2004-02-14 10:52) [13]

Автору: почитайте еще обсуждение здесь

http://delphimaster.net/view/1-1076405195/

А вообще вопрос освещен во всех факах по дельфи.


 
Anatoly Podgoretsky ©   (2004-02-14 11:05) [14]

ProcessMessages не вызывает заметного замедления, замедление вызывает обработка сообщений, если такие есть, но он то для того и предназначен, чтобы было можно обработать накопленные сообщения, например перерисовки, перемещения, нажатия клавиш и т.д.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.026 c
3-79683
vict
2004-01-30 10:54
2004.02.25
exec xp_subdirs


14-80200
Emik
2004-02-05 17:35
2004.02.25
Установка компонентов


14-80128
ИМХО
2004-02-01 02:20
2004.02.25
Сколько нот: 7 или 14


1-79961
jeka_t
2004-02-13 18:06
2004.02.25
Как переименовать файл используя Делфи?


1-79980
Zvr@b
2004-02-13 15:05
2004.02.25
Как построить график функции




   Наверх