![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Обновление окнон программы при выполнении длинной операции. [D6, Win2k]
Саша © (2002-05-17 12:21:00)Что сделать, чтобы окна программы отрисовывались при выполнении длинной операции, а то создается ошюшение что она висит.
И еще можно ли какнибудь сделать прогрессбар при открытии Excel"я в из моей программы(я делаю в нем отчеты). Excel открываю так:CreateOleObject("Excel.Application")
Заранее благодарен.
sudiv (2002-05-17 14:05:00) [1]to Саша © (17.05.02 13:50)
Давно как то тестировал этот ProcessMessage.
Скорость падает очень незначительно.
Саша (2002-05-17 13:50:00) [2]Я уже добавил в обработку отчета processmessage. Программа встает только на открытии excel"я тут наверное без отдельного потока не обойтись, а в начале расчета отчета уже можно работать дальше, и скорость создания отчет вроде упала на пару сек. или вообще не упала.
Спасибо вам большое за помощь.
Виктор Щербаков (2002-05-17 13:32:00) [3]Саша © (17.05.02 13:24)
> А еще скажите пожалуйста целесообразно будет так сделать
> или нет.
Тут сложно ответить однозначно. Всё зависит от времени выполнения тела цикла.
В случае нескольких вложенных циклов нужно подумать куда поставить вызов aplication.processmessages. Можно поэкспериментировать стремясь к тому, чтобы processmessages вызывался как можно реже, но чтобы программа при этом своевременно реагировала на действия пользователя.
> Не будет ли это тормозить выполнение основных действий.
> Спасибо
Будет уходить время на обработку сообщений, но ведь тебе это и нужно.
Саша (2002-05-17 13:24:00) [4]А еще скажите пожалуйста целесообразно будет так сделать или нет.
for i:=1 to 1000 do begin
//какие то действия
aplication.processmessage
end;
Не будет ли это тормозить выполнение основных действий. Спасибо
Саша (2002-05-17 13:21:00) [5]Спасибо, попробую разобратся.
Виктор Щербаков (2002-05-17 12:46:00) [6]См. в хэлпе TThread
и в SDK Using Processes and Threads.
А вобщем всё начинается с File|New|Thread Object.
Саша (2002-05-17 12:26:00) [7]А как можно вынести в другой поток?
Виктор Щербаков (2002-05-17 12:24:00) [8]
> Что сделать, чтобы окна программы отрисовывались при выполнении
> длинной операции, а то создается ошюшение что она висит.
"длинную операцию" вынеси в другой поток. Иногда проще вызывать Application.ProcassMessages во время выполнения каких-либо вычислений etc.
> И еще можно ли какнибудь сделать прогрессбар при открытии
> Excel"я в из моей программы(я делаю в нем отчеты). Excel
> открываю так:CreateOleObject("Excel.Application")
А вот это вряд ли.