Попробовал переделать свои приложения, чтобы они отображали контролы в XP стиле. Т.е. добавил .manifest файл.
Вроде все ок, да проблема возникла с ProgressBar'ом.
Если помещенный на форму прогрессбар сузить в дизайнере до минимально возможной высоты, то в рантайм он отображается как-то странно: примерно треть длины прогрессбара темно-серая, еще треть — белая, а последняя часть — светло-серая.
При этом, если сделать высоту чуть побольше — то отображается нормально.
Может кто знает, в чем дело?
Юзаю Framework 1.1 если это имеет значение.
Проблемы с ProgressBar в XP Style
От:
Аноним
Дата:
10.01.06 04:37
Оценка:
была у меня подобная проблема с этим баром (правда он у меня был на статус баре). я сделал следующее: добавил статусу бару после прогресс бара еще один контрол (ну, например, лабель) и сделал визибл в фолс — помогло.
Здравствуйте, Gordon, Вы писали:
G>была у меня подобная проблема с этим баром (правда он у меня был на статус баре). я сделал следующее: добавил статусу бару после прогресс бара еще один контрол (ну, например, лабель) и сделал визибл в фолс — помогло.
Увы у меня ProgressBar не на StatusBar'е, поэтому такое решение не применимо.
Здравствуйте, XpandeR, Вы писали:
XR>Здравствуйте, mihailik, Вы писали:
M>>Там не нужен манифест. Вызывай в методе Main:
M>>
M>>Application.EnableVisualStyles();
M>>Application.DoEvents();
M>>Application.Run( new MyForm1() );
M>>
XR>Это тоже пробовал, но вид прогрессбара остается прежним
Так а почему бы не сделать его стандартной высоты? В стилях на самом то деле не тока вид но и размеры регламентируются. Так что если хотите чтобы потдерживался везде и всегда, советую использовать стандартный размер.
Здравствуйте, XpandeR, Вы писали:
XR>Если помещенный на форму прогрессбар сузить в дизайнере до минимально возможной высоты, то в рантайм он отображается как-то странно: примерно треть длины прогрессбара темно-серая, еще треть — белая, а последняя часть — светло-серая.
Проблема в том что Windows XP натягивая шкурку на контрола прогресса рассчитывает размер изображения, исходя из его размеров.
Соответственно размер изображения у элементов шкурки может быть БОЛЬШЕ чем тот минимальный размер который Вы задаете (можно посмотреть
размеры этих изображений и сами изображения открыв редактором ресурсов файл темы *.msstyle — это обычный ресурсный Win32 PE файл, например
"BLUE_PROGRESSTRACK_BMP" — изображение неактивной части прогресса).
Вот и "ошибается" менеджер тем рассчитывая координаты "натягивания" шкурки на ваш маленький контрол (на самом деле деле совсем он не
ошибается а правильно растягивает картинку в зависимости от коэфициента высоты контрола / высоту картинки).
Кстати — дизайнер такую "особенность" контрола прогресса прекрасно понимает и не позволяет "легальным способом" уменьшить высоту
контрола, т.е. уменьшить высоту с помощью мыши. Минимальная высота — 10 пикселей. Если установить насильно меньшь — скажем 9 пикселей, начинаются глюки.
Здравствуйте, XpandeR, Вы писали:
XR>Если помещенный на форму прогрессбар сузить в дизайнере до минимально возможной высоты, то в рантайм он отображается как-то странно: примерно треть длины прогрессбара темно-серая, еще треть — белая, а последняя часть — светло-серая.
Вся проблема в том что если размер контрола прогресса меньше определенного размера картинки из ресурсов текущей темы (файл *.msstyle — например luna.msstyle, можно открыть с помощью любого редактора ресурсов в том числе и MS Visual Studio) менеджер тем Windows XP при
"натягивании" картинки "ошибаеться" и неверно вычисляет коэффициент для масштабирования картинки.
Кстати — присмотрись к дизайнеру Visual Studio. Он "знает" про эту "особенность" прогреса и не позволяет легальным способом (с помощью мыши) изменить высоту контрола меньше минимальной (10 пикселей). Если изменять с помощью редакторов свойств высоту "насильно" — например поставить 9 пикселей, уже ползут глюки.