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