Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как программно изменить стиль окон и кнопок в XP [D5, Win95/98]


Страницы:   1 2 3

AndreyProg ©   (2005-05-25 21:57:00) 

Помогите!
Мне нужно, чтобы окна программы, написанной под Windows98 в Delphi5, при запуске в WindowsXP отображались тоже в классическом стиле.
Как это сделать программно? С помощью API или манифестов? Способ?
Заранее спасибо.


AndreyProg   (2005-05-27 20:43:00) [21]


> Gero ©   (26.05.05 23:16) [27]


Повторяю: SetWindowTheme(Handle, '', '');  работает не так как нужно. Да, она отменяет все темы, но всё же заголовок окна (TForm) остается того же размера, что и при теме "стиль WindowsXP". Мне же нужно, чтобы размеры оставались такими же, что и при запуске в Windows98.

А темы я хочу отключить лишь постольку-поскольку не найду иного решения проблемы.


Gero   (2005-05-26 23:16:00) [22]


> Игорь Шевченко ©   (26.05.05 23:06)

Да, я имел ввиду то же.

> Относительно того, как можно помочь автору

Вызов SetWindowTheme(Handle, '', ''); — отключит тему для любого произвольного окна.
Динамическая загрузка UxTheme.dll уже реализована в модуле UxTheme.pas, в нем же в комментариях можно найти краткое описание всех входщих в него функций.

Но судя по [24] автор хочет вовсе отключить темы.


Игорь Шевченко   (2005-05-26 23:06:00) [23]

Вот и я добрался до XP. При включенных темах неклиентская часть Popup и Overlapped окон, а также скроллбары в дочерних элементах управления отображаются в соответствии с текущей темой вне зависимости от манифеста. Значит, я неправильно понял пост Gero относительно окон верхнего уровня и мы говорили об одном и том же.

Относительно того, как можно помочь автору - попробовать использовать в его приложении вызов функции SetThemeAppProperties (0) из UxTheme.dll, не знаю, поможет или нет, попробовать уже нет возможности. Вызывать, естественно, нужно с динамической загрузкой UxTheme.Dll при условии, что операционная система - XP. Для того, чтобы проверить, используются ли темы в его приложении, можно вызвать функцию IsAppThemed из той же DLL.


Gero   (2005-05-26 22:38:00) [24]


> А мне-то что делать?

Я тебе привел готовый код.

> Мне надо, чтобы и заголовки окон были в классическом стиле.
> У них размеры другие.

Твоих окон?

> Всё же, как с помощью WinAPI поменять глобальный стиль системы?
> Как  вызвать ту же проц/функ, которая меняет стиль через
>  Панель управления/Оформление/Окна и кнопки?

Не советую тебе такое делать, для этого есть пользователь.
Если же уверен, что твоим пользователям это понравится, то:
http://www.experts-exchange.com/Programming/Programming_Languages/Delphi/Q_21172764.html


AndreyProg   (2005-05-26 20:50:00) [25]


> Gero
,

> Игорь Шевченко
,

> alpet


Классно вы тут поговорили! А мне-то что делать?
SetWindowTheme работает не так как надо.
Мне надо, чтобы и заголовки окон были в классическом стиле. У них размеры другие.

Всё же, как с помощью WinAPI поменять глобальный стиль системы? Как  вызвать ту же проц/функ, которая меняет стиль через  Панель управления/Оформление/Окна и кнопки?


Gero   (2005-05-26 19:30:00) [26]


> Во втором сервис-паке ничего не изменилось ?

Нет, ни один сервис-пак на стили никак не повлиял.
По крайней мере, я не замечал никаких изменений.


Gero   (2005-05-26 19:24:00) [27]


> Факт - это тот, что окно приложения, собранного без манифеста,
> при установленной теме XP отображается в классическом стиле  ?

Нет, отображается с темами как с манифестом, так и без него.
Если темы включены, ессно.


Игорь Шевченко   (2005-05-26 18:57:00) [28]

alpet ©   (26.05.05 18:45) [20]

Во втором сервис-паке ничего не изменилось ? Потому как у меня осталось впечатление, что в нем приложения по умолчанию как раз отобразаются в текущем стиле. В первом XP, без сервис-паков они совершенно точно отображались в классическом стиле.


alpet   (2005-05-26 18:45:00) [29]

Два куска с той же страницы:

By default, all applications running under the Windows XP operating system use version 5 to maintain compatibility with earlier versions of ComCtl32.dll.

По умолчанию значит все...

If you want your application to use ComCtl32.dll version 6, you must addan application manifest that indicates that version 6 should be used if it is available. Version 6 includes some new controls and new options for other controls, but the biggest change is support for the Windows XP visual styles architecture. See the Using Windows XP Visual Styles for information on how to create application manifests.

То есть если не использовать манифест, система по идее обязана подключить 5 версию. Можно проверить версию загруженной библиотеки, для этого случая.


Игорь Шевченко   (2005-05-26 18:44:00) [30]

Gero ©   (26.05.05 18:38) [18]

Факт - это тот, что окно приложения, собранного без манифеста, при установленной теме XP отображается в классическом стиле ?


Gero   (2005-05-26 18:38:00) [31]


> Игорь Шевченко ©   (26.05.05 18:34)

Нет, не может.

Это не баг, это фича.
Зачем ее ввели — непонятно, но факт остается фактом.


Игорь Шевченко   (2005-05-26 18:34:00) [32]

Gero ©   (26.05.05 18:33) [16]

От сервис-пака не может зависеть ? (XP сейчас под рукой нет, могу только дома посмотреть)


Gero   (2005-05-26 18:33:00) [33]


> Игорь Шевченко ©   (26.05.05 18:29)

Окна верхнего уровня — нет.


Игорь Шевченко   (2005-05-26 18:29:00) [34]

Gero ©   (26.05.05 18:28) [13]

Без манифеста окно отображается в соответсвии с выбранной пользователем темой.


Gero   (2005-05-26 18:28:00) [35]


> А в манифесте убрать common controls ?

Нет никакого манифеста.

> alpet ©   (26.05.05 18:05)

Да кто ж спорит.
Вероятно, этому есть какое-то разумное обьяснение.
Наверное это последствие того, что XP перекрывает WindowProc всех топовых окон.


Игорь Шевченко   (2005-05-26 18:28:00) [36]

alpet ©   (26.05.05 18:05) [12]

"a visual style can define the overall appearance of controls, and enable an ISV to configure the visual interface to coordinate with their application interface. Additionally, visual styles provide a mechanism for all Windows-based applications to apply visual styles.

....

End users choose how they want the desktop controls to appear by making selections on the Appearance tab of the display option in Control Panel."

И ни слова про необходимость манифеста...


alpet   (2005-05-26 18:05:00) [37]

Gero ©   (26.05.05 17:59) [10]
Это странное поведение ОС, она не должна применять визуальный стиль к приложению не использующему манифест.


Игорь Шевченко   (2005-05-26 18:04:00) [38]

А в манифесте убрать common controls ?


Gero   (2005-05-26 17:59:00) [39]


> alpet ©   (26.05.05 17:53)

Не только заголовок, а все элементы окна верхнего уровня рисуются с темами.
Вот о них-то и речь.


alpet   (2005-05-26 17:53:00) [40]

У меня по крайней мере так, только заголовок окон остается скругленным, в случае не использования манифеста.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо