Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.10.08;
Скачать: [xml.tar.bz2];

Вниз

Прогрессбар...   Найти похожие ветки 

 
Виталька 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.067 c
2-1158637631
Alex_AA
2006-09-19 07:47
2006.10.08
Копирование массива чисел в поле таблицы


1-1156420633
DelphiLexx
2006-08-24 15:57
2006.10.08
В TMyPanel сделать свойсво Canvas public om


2-1158521523
Aleksandr
2006-09-17 23:32
2006.10.08
Delphi7 и html


2-1158833275
Evgenii
2006-09-21 14:07
2006.10.08
Как обнулить время компонента TMonthCalendar


15-1158293590
DemoN__
2006-09-15 08:13
2006.10.08
Какой прокси лучше поставить на dsl в инет кафе?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский