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

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

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

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

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

Обновлять:

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


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


Ответы (5)


arrow_upward
11
arrow_downward

Согласно рекомендациям пользовательского интерфейса 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

arrow_upward
10
arrow_downward

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

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

arrow_upward
3
arrow_downward

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

person Bill    schedule 05.05.2011

arrow_upward
1
arrow_downward

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

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

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

person Roddy    schedule 05.05.2011

arrow_upward
0
arrow_downward

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

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

person mghie    schedule 24.11.2008