Версия для печати


TProgressBar с поддержкой скинов
http://www.delphikingdom.com/asp/viewitem.asp?catalogID=1303

Петр Смирнов
дата публикации 16-02-2007 02:46

TProgressBar с поддержкой скинов
Многим из программистов приходилось отображать прогресс выполнения не некоторого абстрактного процесса, а реального, например - заполнения емкости с жидкостью. Ряд программ используют специализированные компоненты для отображения прогресса, достаточно взглянуть на известный всем WinRAR.
В интернете есть огромное количество компонентов, которые позволяют сделать TProgressBar похожим на используемые в известных программах ProgressBarы. Примеры можно найти здесь (прямая ссылка для скачивания). Все компоненты распространяются бесплатно, подробности можно посмотреть на сайте.
Тем не менее, в ряде вопросов, например »вопрос КС №37317« (требуется красивый ProgressBar) »вопрос КС №37051« »вопрос КС №39981« (желательно визуальное сходство с физическим прибором) возникают проблемы, связанные с нехваткой подобных компонентов. Мне тоже требовался "градусник" в виде градусника простите за тавтологию, я не нашел ничего лучшего, чем создать свой собственный компонент, который я собственно и предлагаю на рассмотрение.

Возможности:

скриншот примера, который Вы можете скачать

Описание образцов:

  1. "Занавес", картинки не используются, только цвета.
  2. Заполнение снизу вверх "колбы". Используется маска и оба типа картинок (активный и неактивный).
  3. "Эквалайзер" - один из тех "столбиков", что показывают интенсивность сигнала на многих музыкальных центрах. Создать такое с помощью стандартных компонентов за столь малое время (~3-5 минут) затруднительно.
  4. Для примера - стандартный TGauge. Единственный плюс - отображает прогресс в числовом виде, в моем компоненте это не реализовано, так как за образец был взят TProgressBar
  5. Эллиптический стиль, вращение против часовой стрелки, вновь использованы только цвета, близкие к стандартным
  6. Вновь эллиптический стиль, вращение по часовой стрелке, но теперь использована фоновая картинка и маска. Активная область выделяется синим цветом.
  7. Эллиптический стиль, вращение против часовой стрелки, все остальное - как в образце 2
  8. Стандартный "круглый" TGauge. TProgressBar даже не умеет быть круглым.
  9. Простой линейный прогресс, раскрашенный под 16-цветную палитру.
  10. стандартный TProgressBar, не выдерживающий конкуренции по сравнению с моим компонентом для красивых приложений.
Демонстрация показывает, как я сам предлагаю использовать его. Плохое качество использованных картинок обусловлено желанием сделать небольшой размер исполняемого файла (плюс к тому я плохой дизайнер), компонент успешно работает и с картинками с глубиной цвета 32 бита. При создании компонента не были использованы сторонние компоненты, а также чужой исходный код. Полупрозрачность в демонстрациях не используется, так как я не считал, что это свойство вообще должно было присутствовать, но решил показать, как ее можно сделать очень простым способом - использованием TransparentBlt. По умолчанию компонент выставляет свойство TransparentColor в clNone, что соответствует выключенной полупрозрачности.

Внимание! Вполне очевидный недостаток, связанный с полупрозрачностью таится, если цвет TransparentColor присутствует внутри заполняемой части рисунка. Дело в том, что весь рисунок, заполненный TransparentColor просто не отображается (и это нормально), но если компонент заполняется неоднократно, то... уже заполненная область, покрытая активной картинкой и, соответственно, отображенная, больше никогда не сотрется (до перерисовки компонента-родителя TPictureBar, как правило, это форма). Например, пусть у нас есть колба и она заполняется, а мы сделали TransparentColor=clWhite. Первый раз все будет замечательно, а потом мы не увидим заполнения. Почему? Все просто. Дело в том, что белый цвет, которым должна по первоначальному замыслу заполниться колба при сбросе является полупрозрачным и не отображается. А на канве остается старый - синий цвет. Это очень опасный момент использования полупрозрачности - следите за этим. Конечно, можно сделать еще и запоминание задника и перерисовку его, когда это потребуется, но это приведет к неоправданному усложнению компонента.

Компонент полностью бесплатен для любого использования.

С удовольствием выслушаю Ваши пожелания относительно расширения функциональности компонента.



К материалу прилагаются файлы: