Страница: 1 |
Страница: 1 |
Вопрос: XP Style Controls... Победа близка!
Добавлено: 06.01.06 13:27
Автор вопроса: Tamplier | ICQ: 298742928
Значица так.
Сделать почти все контролы стилизованные под ХР.
Создаем манифест с именем <Имя_программы>.exe.manifest с таким текстом:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="X86"
name="CompanyName.ProductName.YourAppName"
type="win32" />
<description>Your application description here</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="X86"
publicKeyToken="6595b64144ccf1df"
language="*" />
</dependentAssembly>
</dependency>
</assembly>
А в модуль добавляем такую весчь:
Private Type tagInitCommonControlsEx
lngSize As Long
lngICC As Long
End Type
Private Declare Function InitCommonControlsEx Lib "comctl32.dll" _
(iccex As tagInitCommonControlsEx) As Boolean
Private Const ICC_USEREX_CLASSES = &H200
Public Function InitCommonControlsVB() As Boolean
On Error Resume Next
Dim iccex As tagInitCommonControlsEx
' Ensure CC available:
With iccex
.lngSize = LenB(iccex)
.lngICC = ICC_USEREX_CLASSES
End With
InitCommonControlsEx iccex
InitCommonControlsVB = (Err.Number = 0)
On Error Goto 0
End Function
Public Sub Main()
InitCommonControlsVB
'
' Start your application here:
'
End Sub
Внимание! Необходима comctl32.dll версии 6 или выше!
Либо качаем вот отсюда http://vbaccelerator.com/home/VB/Code/Libraries/XP_Visual_Styles/Using_XP_Visual_Styles_in_VB/VB6_XP_Styles_Demonstration_-_Manifest_Resource.asp
Более подробная информация тут http://vbaccelerator.com/home/VB/Code/Libraries/XP_Visual_Styles/Using_XP_Visual_Styles_in_VB/article.asp
Подробнее о манифестах http://search.msdn.microsoft.com/search/results.aspx?qu=manifest&View=msdn&st=b
Это действует только на готовые, скомпилированные exe-файлы.
А как просмотреть как это все будет выглядеть во время дизайна? Элементарно! Создаем тот же манифест для вб6 и помещаем его в папку с программой.
Либо качаем отсюда http://www.vbaccelerator.com/home/VB/Code/Libraries/XP_Visual_Styles/Making_VB_Apply_Visual_Styles_at_Design_and_Debug_Time/VB6_IDE_Manifest.asp
Подробная информация тут http://www.vbaccelerator.com/home/VB/Code/Libraries/XP_Visual_Styles/Making_VB_Apply_Visual_Styles_at_Design_and_Debug_Time/article.asp
Но не все так прекрасно, как казалось бы.
Во-первых. Все это действует ТОЛЬКО НА СТАНДАРТНЫЕ КОНТРОЛЫ. Это раз.
Два. Во время дизайна возникают проблемы с палитрой. То есть, не отображаются цвета в палитре в свойствах.
Три. ОптионБаттоны нельзя так просто помещать во фрейм. У него будет черный фон, черный текст и изменить нельзя. Чтобы избавиться от неприятной мелочи делаем так. Во фрейм помещаем ПикчерБокс, лишаем его бордерстайла, делаем фон идентичным фрейму и ставим на него ОптионБаттоны и уже после этого делаем с ними все, что захотим.
Четыре. Сложные контролы типа ИмейджКомбо перерисовываются. Поэтому при долгом проведении по ним указателя они начинают мелькать.
Пять. Вообще во все фреймы надо ставить ПикчерБокс и только в них уже остальные контролы. Фрейм и все его содержимое будет мелькать при проведении по нему указателя. ПикчерБокс устраняет эту поблему.
Ну, вроде фсе. Кто еще что обнаружит - прошу писать сюда.
Ответы
Всего ответов: 10
Номер ответа: 1
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #1
Добавлено: 06.01.06 14:14
Я чё-то не понимаю...
Это типа новая информация, да?
Номер ответа: 2
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #2
Добавлено: 06.01.06 14:30
Номер ответа: 3
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #3
Добавлено: 06.01.06 16:25
Это типо фак, на который надо всех посылать при возникновении вопроса по теме
Номер ответа: 4
Автор ответа:
Tamplier
ICQ: 298742928
Вопросов: 58
Ответов: 340
Профиль | | #4
Добавлено: 06.01.06 17:40
ну типа так.
Повторяю, кто еще какие неприятности найдет - пишите, если хоть кто-нить будет этим пользоваться...
Номер ответа: 5
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #5
Добавлено: 06.01.06 18:01
Ну вот неприятность, к примеру. Дальше заголовка можно не читать. А можно читать.
http://support.microsoft.com/default.aspx?scid=kb;en-us;309366
Номер ответа: 6
Автор ответа:
HOOLIGAN
Вопросов: 0
Ответов: 1066
Профиль | | #6
Добавлено: 06.01.06 18:47
Неприятностей с манифестом - море.
Фак будет большой
Делаем окно без заголовка, делаем ему дочерний листвью. Цепляем манифест. Если окно не перемещать, при клике по листвью нормально определяется номер кликнутого итема, Если окно перемещать вверх - влево, номер кликнутого определяется нормально. Если окно перемещать вправо-вниз, листвью начинает путать рамсы, и выдает неправильный номер кликнутого итема
Лечится путем непрерывного вызова InvalidateRect в процессе перемещения окна. Окно постоянно колбасится при перемещении, некрасиво, но зато итем определяется правильно
Или нужно вернуть заголовок окну.
В общем, XP Style - это огромная задница.
Хочется красоты - надо рисовать ручками, а не въезжать в рай на чужом ... манифесте.
Номер ответа: 7
Автор ответа:
someone
Вопросов: 215
Ответов: 1596
Web-сайт:
Профиль | | #7
Добавлено: 06.01.06 19:38
А я делаю свои батоны и доволен Мне ХРюшный стиль не нравится
Номер ответа: 8
Автор ответа:
someone
Вопросов: 215
Ответов: 1596
Web-сайт:
Профиль | | #8
Добавлено: 06.01.06 19:41
А вообще спасибо Tamplier'у.
Инфа действительно полезная. Хоть она и общеизвестная, но я впервые виже ее в тщательно сгруппированом виде.
Номер ответа: 9
Автор ответа:
Tamplier
ICQ: 298742928
Вопросов: 58
Ответов: 340
Профиль | | #9
Добавлено: 07.01.06 10:46
Фак будет большой
Дык на то он и делался
Хочется красоты - надо рисовать ручками, а не въезжать в рай на чужом ... манифесте.
Этто естественно. Ведь каждый раз при изменении/проведении над объектом курсора программа обращаеся к манифесту, который ее посылает на comctl32.dll, и только потом все перерисовывает. А за это время еще что-то успело измениться и т.д... Это будет более менее нормально на сильных машинах.
Для идеала надо писать на с++. Вот там, я думаю, глючить ниче не будет
Номер ответа: 10
Автор ответа:
Tamplier
ICQ: 298742928
Вопросов: 58
Ответов: 340
Профиль | | #10
Добавлено: 08.01.06 09:00
Вчера в одном инсталяторе с ХРюшными рюшками углядел, что он моргает. Отсюда напрашивается вывод: без глюков не будет. Ибо карма. И майкрософт.