Форум: "Основная";
Текущий архив: 2004.02.25;
Скачать: [xml.tar.bz2];
ВнизОтрисова формы по ходу обработки данных Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.032 c