Главная страница
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.051 c
2-1158954375
BTR
2006-09-22 23:46
2006.10.08
RICHEDITOM


2-1158659877
Officeman
2006-09-19 13:57
2006.10.08
Странная ошибка в ListView1.Selected


8-1141039800
Новенький
2006-02-27 14:30
2006.10.08
Audio Capture


15-1158407045
WesT-N-GooD
2006-09-16 15:44
2006.10.08
Многоязыковая поддержка Windows-приложений


3-1154951127
Opilki_Inside
2006-08-07 15:45
2006.10.08
CachedUpdates и отмена дейтсвий