Главная страница
    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.46 MB
Время: 0.044 c
3-1154940837
yard83
2006-08-07 12:53
2006.10.08
Сообщения драйвера БД на английском.


15-1158565419
Gorlum
2006-09-18 11:43
2006.10.08
Аудиокниги


2-1158864988
vegarulez
2006-09-21 22:56
2006.10.08
Запись результата select`a в переменную...


2-1158931301
jjj
2006-09-22 17:21
2006.10.08
Как очистить все ячейки в ValueListEditor?


4-1148801284
Хочу_все_знать
2006-05-28 11:28
2006.10.08
Как узнать во время работы программы что запустили другую





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский