Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.045 c
14-80197
syte_ser78
2004-01-30 11:49
2004.02.25
Задорнов


1-79720
Серёга
2004-02-11 15:11
2004.02.25
Подключение dll


1-79801
AleksandrKu
2004-02-11 15:27
2004.02.25
Работа с Excel-ом


7-80321
KommandorDi
2003-12-03 18:06
2004.02.25
Ошибка при автозагрузке вместе с Windows


3-79601
Merry
2004-02-02 13:05
2004.02.25
запрос SQL





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский