Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.25;
Скачать: 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 вся ветка

Текущий архив: 2004.02.25;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.022 c
8-80032
Shadow of Image
2003-10-21 20:30
2004.02.25
Исследование методов соединения точек контура изобр.


8-80044
Демон
2003-10-24 23:36
2004.02.25
Плейлист


14-80098
Maxim Vetera
2004-02-03 12:11
2004.02.25
Дианетика!!!


9-79521
Гарри Поттер
2003-08-15 18:46
2004.02.25
DelphiX не компилится, выдает кучу ошибок


14-80112
N169
2004-02-02 16:32
2004.02.25
Программист назвал сына версией 2.0 :)