| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: WinAPI и системное программирование > Как изменить стиль PROGRESSBAR после создания |
| Автор: mes 16.1.2006, 02:32 | ||||
| Здравствуйте. У меня сложилась следующая ситуация : Если при создании PROGRESSBAR устанавливаю стили, то потом эти стили визуально отображаются:
Если же я хочу установить эти стили после создания, то никакой реакции нету. Т.е флаг стиля устанавливается, но визуально PROGRESSBAR остаётся прежним.
Может кто сталкивался, подскажите, пожалуйста, как заставить PROGRESSBAR "принять" новый стиль? |
| Автор: Girder 16.1.2006, 12:10 |
| Тебе надо включить XP стили(XPMan в uses добавь). А для прогресс бара сбросить его SetWindowTheme(PB.Handle,'',''); . И только в ентом случаи у тебя будут работать енти стили в XP. |
| Автор: mes 16.1.2006, 14:06 | ||
| Спасибо за совет. Попробовал, пока ничего не получилось, точнее при вызове ф-ции пропрамма прерывается из-за критической ошибки. Буду пробовать еще , однако смущает один момент: Эти стили у меня работают, только стиль установленый при создании потом я не могу сменить. Делаю я это с ф-цией:
Попробовал с флагом ws_Visible. Всё работает корректно. т.е не работает изменение именно флагов : pbs_Smooth , pbs_Vertical. |
| Автор: mes 16.1.2006, 15:18 |
| Спасибо. Твой код работает. Будем иследовать Только вот размер файла значительно увеличивается. Но это уже мелочи. |
| Автор: mes 16.1.2006, 19:40 |
| Кстати нашел интерсную особеность, может кому пригодится: если пишите на WINAPI c XP-стилями и не хотите чтоб размер файла сильно увеличивался добавьте вместо uses XPMAN ,строчку {$R WindowsXP.res} ( всего 1Кбайт!) Надеюсь кому-нибудь это поможет. |
| Автор: mes 16.1.2006, 20:03 |
| После изучения кода всё же главный вопрос остался нерешеным. Наблюдения: 1) Если я подключаю XP-стили то при изменинии флага pbs_Vertical, ProgressBar визуально меняется. 2) Ф-ция SetWindowTheme(PB,'','') сбрасывает темы однако реакция на флаг от неё не зависит. Вопрос: Неужели нельзя добиться реакции на флаг pbs_Vertical , не подлючая эти стили, ведь при создании она воспринимает же этот флаг. |
| Автор: Girder 17.1.2006, 04:09 | ||||
Добавлено @ 04:10 Хотя... можеш в "классику" переключиться... там работать должно |
| Автор: mes 17.1.2006, 10:39 | ||
Ты удивишься, но изменение флагов происходит не от вышеназваной ф-ции. Как только я подключаю файл WindowsXp.res, ProgressBar начинает реагировать на флаги (на флаг pbs_Smooth он не реагирует так как у XP-Progressbar нет такого стиля) ф-ция SetWindowTheme приводит только к изменению темы. Ho Если я не подключу WindowsXP.res, то от сброса темы ничего не зависит. Ho в Windows 98 как то же работают эти стили!? Чтоб не углубляться я перефразирую свой вопрос. Если программа составлена для Windows98 и в ней используется изменение стиля после его создания,то эта программа будет некоректно работать в среде XP? Можно ли указать программе что она предназначена для 98 чтоб стили коректно раболи в XP?. |
| Автор: mes 17.1.2006, 12:23 |
| А как это сделать? |
| Автор: Girder 18.1.2006, 10:29 | ||||
Должно работать как в W98... так и XP: 1. подключай WindowsXP.res 2. Динамически грузи uxtheme.dll 3. Если загрузилась... то сбрасывай(SetWindowTheme) для прогрессбара(можеш для всех элементов сбросить... что бы не отличался внешний вид). Если не загрузилась или не нашлась функциия SetWindowTheme(Ну мало... ли что 4. Изменяй флаги... через SetWindowLong |