Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.48 MB
Время: 0.059 c
15-1158060195
Real
2006-09-12 15:23
2006.10.08
Реален ли CMP - Crimea Mastak Party?


2-1158914441
kyn66
2006-09-22 12:40
2006.10.08
Как сослаться на компонент, зная его TAG ?


3-1155100048
ANB
2006-08-09 09:07
2006.10.08
Как достучаться к БД FB, если файл на сетевой диске ?


15-1158561725
Ega23
2006-09-18 10:42
2006.10.08
Вчера смотрел выпуск новостей


6-1147765014
M@D
2006-05-16 11:36
2006.10.08
Отправка файла по почте.