Отключение анимации индикатора выполнения в Vista Aero

Я использую Delphi 2009 VCL TProgressBar как своего рода индикатор «пустой / полный».

В Vista с включенной темой Aero с ней связана анимация, которая раздражает и не подходит для датчика.

Есть ли способ отключить это (НЕ изменяя настройки темы пользователя!), Чтобы предотвратить анимацию на этом элементе управления?

Чтобы уточнить, мне нужно что-то в основном идентичное счетчику «используемого дискового пространства» в проводнике Windows. Без анимации, но с красивыми границами и эффектами затенения.

Обновлять:

Я понимаю, что мне нужен «счетчик», а не настоящий индикатор выполнения. Как можно реализовать тематический счетчик с помощью стандартной панели управления Windows?


person Roddy    schedule 24.11.2008    source источник


Ответы (5)


Согласно рекомендациям пользовательского интерфейса Vista для индикаторов выполнения, вам не следует использовать TProgressBar для таких целей вообще заявляет:

Используйте индикаторы выполнения только для прогресса. Используйте измерители, чтобы указать проценты, не связанные с прогрессом.

Существует множество сторонних компонентов (например, Abakus VCL), которые предназначены для приложений автоматизации процессов и например, может, вы могли бы использовать вместо этого один из этих элементов управления?

person mghie    schedule 24.11.2008
comment
Понятно, но там написано: Счетчики: этот шаблон не является индикатором выполнения, но он реализован с помощью элемента управления индикатором выполнения. Как я могу реализовать такой измеритель с помощью индикатора выполнения? Что касается компонентов Abakus, мое приложение должно выглядеть так, как будто оно было разработано в последние десять лет или около того. - person Roddy; 24.11.2008
comment
Я не знаю, как реализовать измеритель, и у меня нет Vista, чтобы проверить. Не могли бы вы запустить Spy ++ и взглянуть на флаги стиля Windows, установленные для этих элементов управления счетчиками? Spy ++ поставляется с MS Visual C ++. Google для бесплатного программного обеспечения spy ++, если у вас его нет. - person mghie; 24.11.2008
comment
Что касается Abakus - я вас слышу ;-) Если вам нужно, чтобы датчик хорошо смотрелся в Vista, конечно, было бы лучше найти стиль для общего элемента управления. Я просто ничего не нахожу в Platform SDK ... Посмотрите msdn.microsoft.com/en-us/library/cc656530 (VS.85) .aspx для доступного документа. - person mghie; 24.11.2008
comment
Я не нашел ничего другого относительно этих регуляторов счетчика. Конечно, есть альтернатива - создать TGraphicControl. Код для рисования индикаторов выполнения в стиле Vista с помощью GDI + можно найти, например, в codeproject. com / KB / cpp / VistaProgressBar.aspx - person mghie; 24.11.2008
comment
+1 потому что я думаю, что это правильный ответ. Батарея не разряжается и не заряжается достаточно быстро, чтобы анимация была видна. Автомобиль не сжигает бензин и не заполняется достаточно быстро, чтобы сделать анимацию важной. Единственный пример, который я могу представить, - это загрузка процессора или индикатор скорости вращения вентилятора. В конце концов, я бы подумал, что вам, вероятно, придется использовать настраиваемый элемент управления (с примененным рисунком API UxTheme) - person Ian Boyd; 04.12.2009

Вы можете попробовать отключить темы для этого элемента управления;

SetWindowTheme(ProgressBar.Handle, ' ', ' ');
person Tim Knipe    schedule 24.11.2008
comment
+1, потому что этот ответ кажется полезным - хотя я понятия не имею, работает ли он, или это правильный способ намеренно отключить тему в общем элементе управления. - person Ian Boyd; 04.12.2009
comment
я протестировал это, и он работает, функция находится в библиотеке UxTheme (msdn.microsoft.com/en-us/library/bb759827 (VS.85) .aspx) - person Remus Rigo; 10.12.2009
comment
И да и нет. Он отключает анимацию, НО он также отключает всю тематику элемента управления, поэтому вы просто получаете сплошную синюю рамку без рамки, затенения или любого другого украшения пользовательского интерфейса. Моя цель - получить что-то, совпадающее с показателями «используемого дискового пространства» в проводнике. - person Roddy; 26.02.2012

Попробуйте VistaProBar на странице http://rmklever.com/?p=203. Он НЕ иметь связанную с ним анимацию.

person Bill    schedule 05.05.2011

Я еще не пробовал, но этот вопрос, похоже, дает полезный ответ для winforms.

Как использовать индикатор выполнения в виде счетчика?

Теперь конвертируем его в Delphi ...

person Roddy    schedule 05.05.2011

Просмотрите эту ветку форума. Это единственная многообещающая ссылка, которую я нашел, и в первой публикации упоминаются различные состояния индикатора выполнения, поэтому изменение свойств Smooth, State и Style, вероятно, не поможет.

Если подсказка в последней публикации действительно является единственным способом нарисовать индикатор выполнения в стиле счетчика, то лучшим вариантом будет создание класса-потомка TProgressBar, переопределение обработчика WM_PAINT, проверка наличия Vista и включенных тем, и в этом случае case используйте функции в UxTheme, чтобы раскрасить различные части элемента управления.

person mghie    schedule 24.11.2008