Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Длительное выполнение программы


Автор: chiffa 25.7.2007, 12:45
Всем привет. Столкнулся с такой проблемкой. Программа вставляет в еклесь данные  по 4 столбца, окло 80-т строчек, вкаждый лист книги, всего 100 листов. при этом программа на долго задумывается. как сделать что бы пользователь не подумал что прога висит?

Автор: sentry 25.7.2007, 12:51
Либо использовать ProgressBar, либо просто в окошке просить пользователя подождать.

Автор: ALeXandrK 25.7.2007, 12:58
Используй ProgressBar, тем более, что ты знаешь объем работы, который должна выполнить программа.

Код

ProgressBar.Max := 80*4*100; //Кол-во объектов
ProgressBar.Min  := 0; //Стоит по умолчанию, так что менять не нужно
ProgressBar.Step := 1; //Размер шага, т.е. сколько объектов ты вставляешь за раз


А где-нибудь в своем алгоритме, который вставляет твои объекты в Excel, напиши после самой вставки:

Код

ProgressBar.StepIt; //значение ProgressBar.Position измениться на твой ранее выставленный шаг


P.s.: и еще... чтобы программа подавала признаки жизни, вставь в алгоритме строку
Код

Application.ProcessMessages;


Автор: chiffa 25.7.2007, 14:34
Пасиба! а могу ли я как то поменять дизайн ProgressBar?

Добавлено через 5 минут и 37 секунд
И еще могу ли я как то выводит что то вроде. "Обработа листов:" их количество которое меняется.

Автор: sentry 25.7.2007, 15:14
Цитата(chiffa @  25.7.2007,  14:34 Найти цитируемый пост)
Пасиба! а могу ли я как то поменять дизайн ProgressBar?

Тогда поищи красивый сторонний компонент. Или посмотри на вкладке Samples компонент Gauge.

Цитата(chiffa @  25.7.2007,  14:34 Найти цитируемый пост)
И еще могу ли я как то выводит что то вроде. "Обработа листов:" их количество которое меняется.

Можешь. В своей программе делаешь переменную(Count), в которой хранишь количество заполненных листов. 
То есть, например, заполнил лист, увеличил переменную на 1, изменил надпись "Обработано столько-то", посчитал процент Count/100 * 100 = Count и все.

Автор: chiffa 25.7.2007, 16:26
пасиба. будем пробывать smile

Автор: ALeXandrK 25.7.2007, 18:12
Если хочешь серьезный ProgressBar, то советую две библиотеку Globus
или http://jvcl.sourceforge.net/, в которой тоже есть компоненты из библиотеки Globus, 
плюс своих ещё полно smile 

Так вот! В этом ProgressBar можно задавать и цвет заливки, причем
и фона и заполнения, и текст можно вставлять какой хочешь и много еще
чего полезного есть.

Вообщем, я пока лучшую замену стандартному не нашел smile 

Автор: pseud 25.7.2007, 18:16
IMHO достаточно взять со страницы Samples стандартный компонент Gauge

Автор: chiffa 26.7.2007, 08:42
ALeXandrK, пасиба! а как его подключить и использовать?....

Автор: ALeXandrK 26.7.2007, 11:59
Качаешь, например http://jvcl.sourceforge.net/ отсюда, последнюю версию.
Обязательно включая библиотеки JCL. То есть название должно быть примерно таким:
JVCL332CompleteJCL1100-Build2646.zip .

Дальше всё просто:
  • Разархивируешь все в нужную папку. Желательно чтобы путь не содержал пробелов и русских букв.
  • Заходишь в разархивированную папку, а там в папку JCL.
  • Находишь там файл Install.bat и запускаешь его.
  • Откроется окно, в котором все будет понятно. Выберешь там папку для bpl и dcp файлов.
  • Жмем Install. 
  • Теперь тоже проделываем в папке JVCL. Только с той разницей, что в окне установки можно
    будет выбрать нужные компоненты.
Вот и все.

Не обещаю, что всё пройдет гладко, но на мой взгяд, оно того стоит smile 
Если что-то не получется, то почитай Install.txt в каждой из папок. Там всё пошагово описано.
Возможно только одна проблема - пути с пробелами или русскими буквами, т.к. bat файлы с ними не дружат smile 

Удачи.

P.s.: про использовать... да так же как обычный. Лежит он на вкладке JVCLGlobus1, а называется TjvgProgress smile 
Я думаю в свойствах разобраться труда не составит.

Автор: aktuba 26.7.2007, 16:15
Цитата

на мой взгяд, оно того стоит


А на мой - не стоит использовать в простейших случаях сторонние компоненты. И программа разрастаеться и привычка вырабатывается нехорошая  smile 

Автор: ALeXandrK 26.7.2007, 17:41
Цитата

А на мой - не стоит использовать в простейших случаях сторонние компоненты. И программа разрастаеться и привычка вырабатывается нехорошая.


Я тоже сначала хотел написать, что нужно хорошенько подумать, а стоит ли оно того, чтобы
применять сторонние компоненты. Но мне кажется, новичку будет полезно поиметь такой опыт
использования сторонних компонентов.
А там он и сам решит и всё поймёт smile 

chiffa: Так что, если ты учишься и постигаешь, то устанавливай, если нужно что-то сделать в срок, то не парься smile 

Автор: Yanis 26.7.2007, 19:06
Цитата(sentry @  25.7.2007,  13:51 Найти цитируемый пост)
Либо использовать ProgressBar, либо просто в окошке просить пользователя подождать.

Я бы выбрал второй вариант. Можно ещё анимашку влепить. Юзеры писают кипятком.
А вот постоянно обновлять ProgressBar и менять его положение в одном с алгоритмом потоке я бы не стал. 
Просто всё будет работать дольше!

Автор: ALeXandrK 26.7.2007, 19:26
Ну мы начинаем уже углубляться в design. Тогда уже нужно подходить по полной программе - с анализом ситуации smile 
Посмотреть на сколько твой процесс добавления тянеться, если не очень долго, то я бы поставил анимашку, как
посоветовал Yanis, если же долго, то прикрутил бы StatusBar, чтобы по скорости приближения к завершению процесса,
пользователь оценил - успеет ли он за это время чайку попить или в кино сходить smile 

Автор: chiffa 27.7.2007, 09:20
Цитата(ALeXandrK @  26.7.2007,  19:26 Найти цитируемый пост)
успеет ли он за это время чайку попить или в кино сходить


ЖЕСТЬ! а с анимашкой это как?....

Автор: pseud 27.7.2007, 10:27
Цитата(aktuba @  26.7.2007,  16:15 Найти цитируемый пост)
А на мой - не стоит использовать в простейших случаях сторонние компоненты. И программа разрастаеться и привычка вырабатывается нехорошая    


поддерживаю

потом переставим винду, дельфи
или занесем етот проект на другой комп
откроем проект и начинается:
  - нам надо побыстрому изменить алгоритм експорта в ёхель (основная часть)
  - а нифига не фачит, потому что надо теперь искать и устанавливать етого красавчика прогрессбара кульного.

Автор: ALeXandrK 27.7.2007, 12:18
Цитата

а с анимашкой это как?....


Ну простейший способ:
  • берешь gif анимированный
  • в нужное место кидаешь TImage
  • в него грузишь этот gif
  • а дальше ... прячешь или показываешь
 

Вообще это уже другой вопрос.
А правила гласят: одна тема = один вопрос smile 

А вообще, включи фантазию... задачка то детская smile 

Автор: Yanis 5.8.2007, 12:39
Цитата(ALeXandrK @  27.7.2007,  13:18 Найти цитируемый пост)
Ну простейший способ:

Простейший?
Из-за твоих слов человек может заблуждаться.
Сам же говорил, что надо помогать.

Анимашка это легко.
Достаточно бросить на форму TAnimate с Win32 и выбрать через свойство CommonAVI подходящую анимашку или, если таковой не нашлось, запихнуть туда свою.

Автор: ALeXandrK 5.8.2007, 13:49
 smile 
Цитата

Цитата(ALeXandrK @  27.7.2007,  13:18 )
Ну простейший способ:


Простейший?
Из-за твоих слов человек может заблуждаться.
Сам же говорил, что надо помогать.


Про TAnimate я просто забыл smile 

Автор: Yanis 5.8.2007, 14:07
ALeXandrK
Да и вообще добавить gif картинку в проект нетривиальная задача, если разобраться, если по хорошему.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)