Вниз
Скачать: 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.017 c
3-79610
Zilog
2004-02-01 17:52
2004.02.25
Создание алиаса и таблицы


1-79897
Anderson
2004-02-10 09:50
2004.02.25
MessagesBox вопрос банальный )))


1-79971
Dmitriy_G
2004-02-13 16:11
2004.02.25
Время выполнения процедуры


1-79875
saska
2004-02-10 11:01
2004.02.25
TStringGrid с TComboBox ами в ячейках


14-80133
miwa
2004-02-05 06:51
2004.02.25
А вот есть ли такая программа?




   Наверх