Disable XP GUI Style

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Arcady_XQST
Обычный пользователь
Обычный пользователь
 
Сообщения: 85
Зарегистрирован: 17.09.2007 (Пн) 1:27
Откуда: Russia, Bryansk

Disable XP GUI Style

Сообщение Arcady_XQST » 11.11.2007 (Вс) 2:30

Приветствую! У меня возник вопрос по поводу графического интерфейса программы: как можно отключить поддержку XP-стиля в программе? В ресурсах программы (exe-файла) находится Manifest. Пробовал просто не инициализировать стиль, так еще до показа окон программа выдает: "Out of memory"! В случае инициализации все работает отлично, но, разумеется, в стиле XP.
// тили-тили, трали-вали
if (jsLoaded) {
// это дело мне по силе, откажусь теперь едва ли
} else {
// это мы не проходили, это нам не задавали
}

Lumen
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 841
Зарегистрирован: 03.12.2005 (Сб) 16:09
Откуда: Брянск

Сообщение Lumen » 11.11.2007 (Вс) 3:01

А использовать внешний манифест и если не нужна поддержка стиля XP, то просто переименовывать файл манифеста, не подойдет?
Подпись проходит рефакторинг

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 11.11.2007 (Вс) 7:16

Arcady_XQST
Ты поправил подпись так, что теперь она вновь занимает полстраницы форума?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Arcady_XQST
Обычный пользователь
Обычный пользователь
 
Сообщения: 85
Зарегистрирован: 17.09.2007 (Пн) 1:27
Откуда: Russia, Bryansk

Сообщение Arcady_XQST » 11.11.2007 (Вс) 15:19

Lumen, спасибо, но так не пойдет. Манифест находится в ресурсах.
Хакер, так это ты мне ее изменил? Я думал это глюк на форуме был... :) Сделаю поменьше. Может есть что-нибудь по теме? :roll:
// тили-тили, трали-вали
if (jsLoaded) {
// это дело мне по силе, откажусь теперь едва ли
} else {
// это мы не проходили, это нам не задавали
}

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 11.11.2007 (Вс) 17:11

Arcady_XQST
Не кажется, что больно уж интеллектуально для глюка? :)
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Lumen
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 841
Зарегистрирован: 03.12.2005 (Сб) 16:09
Откуда: Брянск

Сообщение Lumen » 11.11.2007 (Вс) 18:51

Вот, нарыл у себя где-то код, по-моему это то, что надо.
Код: Выделить всё
Private Declare Function SetWindowTheme Lib "uxtheme.dll" (ByVal hWnd As Long, ByVal pszSubAppName As Long, ByVal pszSubIdList As Long) As Long

Private Sub RemoveTheme(ByVal hWnd As Long)
   On Error Resume Next
   Dim lR As Long
   lR = SetWindowTheme(hWnd, StrPtr(" "), StrPtr(" "))
   On Error GoTo 0
End Sub

hWnd - это хэндл контрола, которого надо "лишить" стиля XP. Если надо, приведу код, как вернуть стиль XP.

Т.о чтобы "отключить" стиль XP для всех контролов на форме надо написать что-то типа:

Код: Выделить всё
Dim i As Control
For Each i In Me.Controls
    RemoveTheme i.hWnd
Next
Подпись проходит рефакторинг

Arcady_XQST
Обычный пользователь
Обычный пользователь
 
Сообщения: 85
Зарегистрирован: 17.09.2007 (Пн) 1:27
Откуда: Russia, Bryansk

Сообщение Arcady_XQST » 11.11.2007 (Вс) 19:55

Хакер, на таком интеллектуальном форуме возможно все! :lol:

Во-о-т! Lumen, то что надо! Спасибо большое! :D
Вот, если кому надо (автор не я):
Код: Выделить всё
Private Declare Function ActivateWindowTheme Lib "uxtheme.dll" Alias "SetWindowTheme" (ByVal hwnd As Long, Optional ByVal pszSubAppName As Long = 0, Optional ByVal pszSubIdList As Long = 0) As Long
Private Declare Function DeactivateWindowTheme Lib "uxtheme.dll" Alias "SetWindowTheme" (ByVal hwnd As Long, Optional ByRef pszSubAppName As String = " ", Optional ByRef pszSubIdList As String = " ") As Long
// тили-тили, трали-вали
if (jsLoaded) {
// это дело мне по силе, откажусь теперь едва ли
} else {
// это мы не проходили, это нам не задавали
}

Arcady_XQST
Обычный пользователь
Обычный пользователь
 
Сообщения: 85
Зарегистрирован: 17.09.2007 (Пн) 1:27
Откуда: Russia, Bryansk

Сообщение Arcady_XQST » 11.11.2007 (Вс) 22:33

Блин, сложно так все окна обрабатывать! :( + Сообщения (MsgBox) выводятся в XP-стиле. Нужен способ полного отключения XP-стиля в приложении, как если бы в ресурсах небыло манифеста. В пример могу поставить Sound Forge.
// тили-тили, трали-вали
if (jsLoaded) {
// это дело мне по силе, откажусь теперь едва ли
} else {
// это мы не проходили, это нам не задавали
}

Lumen
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 841
Зарегистрирован: 03.12.2005 (Сб) 16:09
Откуда: Брянск

Сообщение Lumen » 11.11.2007 (Вс) 23:53

В каком SoundForge? В седьмом я вообще манифеста не нашёл...
Подпись проходит рефакторинг

Cytron
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 266
Зарегистрирован: 15.02.2007 (Чт) 21:09

Сообщение Cytron » 12.11.2007 (Пн) 3:49

Код: Выделить всё
Private Declare Sub SetThemeAppProperties Lib "UxTheme" (dwFlags As Long)

Private Sub Form_Initialize()
SetThemeAppProperties 0
End Sub


Работает на всю прогу, делая как будто бы манифеста не было. Код вообще не запустится ни в чем кроме XP и позже.
Если надо во всем - LoadLibrary и CallWindowProc
ВАЖНО! Должно стоять в Initialize!

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 12.11.2007 (Пн) 8:48

Cytron
От чего же не запустится? Запустится, но выдаст ошибку. Если поставить On Error Resume Next, то не выдаст.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Arcady_XQST
Обычный пользователь
Обычный пользователь
 
Сообщения: 85
Зарегистрирован: 17.09.2007 (Пн) 1:27
Откуда: Russia, Bryansk

Сообщение Arcady_XQST » 12.11.2007 (Пн) 16:17

Ох нефига, аж VB стал в standard-style! :) Cytron, спасибо!!

P.S.: Lumen, Sound Forge 9.0
Последний раз редактировалось Arcady_XQST 12.11.2007 (Пн) 16:28, всего редактировалось 1 раз.
// тили-тили, трали-вали
if (jsLoaded) {
// это дело мне по силе, откажусь теперь едва ли
} else {
// это мы не проходили, это нам не задавали
}

Arcady_XQST
Обычный пользователь
Обычный пользователь
 
Сообщения: 85
Зарегистрирован: 17.09.2007 (Пн) 1:27
Откуда: Russia, Bryansk

Сообщение Arcady_XQST » 12.11.2007 (Пн) 16:25

Если надо во всем - LoadLibrary и CallWindowProc
Во всем - это на сколько? Все оформление в целом? Малехо не понял про способ вызова, почему оно так заработает. :roll:
// тили-тили, трали-вали
if (jsLoaded) {
// это дело мне по силе, откажусь теперь едва ли
} else {
// это мы не проходили, это нам не задавали
}

Lumen
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 841
Зарегистрирован: 03.12.2005 (Сб) 16:09
Откуда: Брянск

Сообщение Lumen » 12.11.2007 (Пн) 21:26

Да, всё оформление в целом.
Способ вызова - стандартный для вызова API без декларации:
LoadLibrary (или GetModuleHandle)
GetProcAddress
CallWindowProc...
Подпись проходит рефакторинг

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 12.11.2007 (Пн) 21:29

Внимание вопрос: зачем её вызывать без декларации?
Изображение

Lumen
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 841
Зарегистрирован: 03.12.2005 (Сб) 16:09
Откуда: Брянск

Сообщение Lumen » 12.11.2007 (Пн) 22:31

Хороший вопрос. Может щас так модно? :)
Подпись проходит рефакторинг

Arcady_XQST
Обычный пользователь
Обычный пользователь
 
Сообщения: 85
Зарегистрирован: 17.09.2007 (Пн) 1:27
Откуда: Russia, Bryansk

Сообщение Arcady_XQST » 12.11.2007 (Пн) 22:35

Да, это именно те функции в которых я ОЧЕНЬ плохо разбираюсь... :cry:

Может кто-нибудь одарит примерчиком (по теме)? :oops:
// тили-тили, трали-вали
if (jsLoaded) {
// это дело мне по силе, откажусь теперь едва ли
} else {
// это мы не проходили, это нам не задавали
}

Lumen
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 841
Зарегистрирован: 03.12.2005 (Сб) 16:09
Откуда: Брянск

Сообщение Lumen » 12.11.2007 (Пн) 23:16

За примерами обращайся к поиску, он почти всегда чем-нить одаривает.
Подпись проходит рефакторинг


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, Yandex-бот и гости: 86

    TopList