![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Прогрессбар... [D7, WinXP]
Виталька 2006 © (2006-09-19 14:12:00)Здравствуйте, мастера.
У меня есть несколько модулей в которых происходит расчёт
определённых параметров. Чтобы юзер не скучал ,я сделал прогрессбар. но получается очень коряво имхо: в каждый расчётный модуль пришлось добавить uses с формочкой прогресса, а в циклах вставить строчки типа Progressbar1.Step.
Расчётная и визуальная части перемешались:(
Наверняка существет более красивый и универсальный способ добавления прогрессбара в приложение=)
Подскажите..
KyRo (2006-09-21 17:37:00) [1]
> Виталька 2006 (19.09.06 14:32) [2]
>
> Я бы сделал так:
> 1) Создал бы поток:
> TCalcThread = class(TThread)
> 2) В конструкторе добавил бы параметр в котором бы передавал
> потоку handle окна на котором лежит прогресс.
> 3) При продвижении вычислений слал бы сообщение из потока
> этому окну. В параметрах сообщения прогресс.
То есть слал бы сообщения ? Можно пример как из потока изменить значения прогрес бара на форме ?
Virgo_Style (2006-09-19 15:01:00) [2]Virgo_Style © (19.09.06 14:47) [4]
насчетprivateя явно погорячился.
Loginov Dmitry (2006-09-19 14:57:00) [3]Вариантик:
http://matrix.kladovka.net.ru/index.php?page=usersinterface#top7
Virgo_Style (2006-09-19 14:47:00) [4]Если без потоков - можно сделать callback-функцию, например, глобальную для юнита.
У формы:
private
procedure DrawProgress(Progress:Integer);
ну и реализация, ясное дело %-)
В расчетном юните:
CallBack: procedure(Progress:Integer) of object;
в OnCreate формы
CallBack := DrawProgress;
в расчетной функции(-ях) по мере выполнения:
if Assigned(CallBack) then CallBack(CurrentProgress);
С потоками, конечно, красивше, но несколько сложнее.
DVM (2006-09-19 14:44:00) [5]
> Виталька 2006 (19.09.06 14:32) [2]
Я бы сделал так:
1) Создал бы поток:
TCalcThread = class(TThread)
2) В конструкторе добавил бы параметр в котором бы передавал потоку handle окна на котором лежит прогресс.
3) При продвижении вычислений слал бы сообщение из потока этому окну. В параметрах сообщения прогресс.
Виталька 2006 (2006-09-19 14:32:00) [6]Идею понял, не совсем представляю, как это реализовать
У меня множество функций, в каждой 1 или 2 цикла.
Т.е. нужно завести глобальную переменную и в каждом цикле писать в
неё процент?
и по таймеру просто получать её значение?
DVM (2006-09-19 14:20:00) [7]
> Наверняка существет более красивый и универсальный способ
> добавления прогрессбара в приложение=)
Добавь в расчетные модули функцию, возвращающую процент выполнения.
В прогресс баре по таймеру опрашивай функцию.