Главная страница
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.086 c
3-1154770856
_RusLAN
2006-08-05 13:40
2006.10.08
Передача 3-мерного масива строк в ХП. D7. Firebird. IBX.


9-1135469233
Аццкий_рыцарь:)
2005-12-25 03:07
2006.10.08
ГЛЮЧНОСТЬ В DELPHIX


2-1158321256
DmiSb
2006-09-15 15:54
2006.10.08
Как узнать какое поля ввода потеряло фокус ?


2-1159097526
Серый
2006-09-24 15:32
2006.10.08
Кнопка


15-1157486758
Konstantin555
2006-09-06 00:05
2006.10.08
Как в С++ правильно работать с функциями?!