Современное оформление приложений на VB6 под XP

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

Современное оформление приложений на VB6 под XP

Сообщение Dany » 15.10.2008 (Ср) 23:02

Есть ли средства позволяющие программно преобразовывать все элементы стиля 98 под XP. Варианты рассмотренные в книге "VB6 на практике" не всегда работают - вероятность запуска и нормальной работы приложения в стиле XP 11% из 100%. Помогите найти средства для решения этой проблемы.

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

Re: Современное оформление приложений на VB6 под XP

Сообщение Хакер » 16.10.2008 (Чт) 0:15

Преобразование элементов из стиля 98 в XP — бред. Т.е. не преобразование бред, а сама фраза бред.

Есть такое явление как DLL Hell — это когда множество разных приложений используют различные версии одной и той же библиотеки. И при установке каждое наровит установить необходимую ему версию, заменив оригинальный файл. Таким образом, все приложения получают ту версию dll-шки, которая нужна последнему установленному приложению.

Чтобы решить эту проблему придумали технологию Side-by-Side: когда при установке приложение хочет заменить какую-то уже имеющуюся библиотеку библиотекой иной версии, система не даёт этого сделать, а помещает вторую библиотеку в WinSxS repository. При запуске такого приложения, в АП процесса подгружается не та библиотека, которую требует процесс, а особая версия из WinSxS. Таким образом, каждое приложение получает ровно ту библиотеку, которую хочет, при том, не портя оригинальную библиотеку и не мешая друг-другу. Конфликт версий решён.

Когда придумали XP, создали новую версию comctl32.dll — версию с красивыми контроллами. Но предполагая возможные проблемы у старых приложений с новым библиотеками, основную comctl32.dll оставили не тронутой (т.е. в system32 лежит старая угловатая comctl32.dll), а для того, чтобы приложение могло использовать новую версию решили использовать технологию Side-by-Side.

Манифест, который мы кладем в ресурсы или рядом с программой, это фишка Side-By-Side: при создании процесса в его АП подгружается не \system32\comctl32.dll, а \WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.2982_x-ww_ac3f9c03\comctl32.dll.

Вот в этом и заключается фишка использование визуального стиля XP. Если манифест есть и если приложение написано правильно — всё будет работать. Если у тебя не работает — значит оно написано неправильно. Это правило работает вне зависимости от выбранного языка и средства разработки.

У VB6, однако же, имеются свои проблемы с визуальными стилями. Большинство VB6-программистов не хотят пользоваться comctl32.dll напрямую, а пользуются ею через COM-обертку, которую подключают в "Compontents".

Элементу управления, созданные таким образом в окне, находятся не в этом окне, а в окне-контейнере, который находится в окне. Окно-контейнер просто необходимо COM-обертке, ибо коммон-контроллы сообщают о свех своих событиях с помощью оконных сообщений, отсылаемых своему паренту. Если бы не было промежуточного контейнера, COM-обертке бы пришлось каким-то образом ловить сообщения, отправленные чужому окну. Так что использование промежуточного контейнера совершенно оправдано.

Другое дело, что использовать промежуточный контейнер решили ещё тогда, когда визуальных стилей XP не существовало в природе. И с появлением визуальных стилей эти контейнеры дали о себе знать, как минимум своей непрозрачностью, а как максимум, отсутсивем многих функций.

Прикладывается картинка из одного топика-спора на тему использования COM-оберток над comctl32.dll:

Изображение
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Williams
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1280
Зарегистрирован: 06.05.2008 (Вт) 18:35
Откуда: System.Reflection.Williams (увидел себя в зеркале :))

Re: Современное оформление приложений на VB6 под XP

Сообщение Williams » 16.10.2008 (Чт) 0:27

Хакер, очень интересно рассказал про DLL Hell, репозиторий и визуальные стили. Полезная информация.
И вы думаете, что вас оставят в живых после прочтения этого поста?

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: Современное оформление приложений на VB6 под XP

Сообщение SLIM » 16.10.2008 (Чт) 14:12

Интересный топик. Речи нет интересен. Хотя краток. Предлагаю в таком стиле и подробней на главную страницу выложить, или еще лучше здесь на форме
Пишите жизнь на чистовик.....переписать не удастся.....

Dany
Начинающий
Начинающий
 
Сообщения: 24
Зарегистрирован: 22.08.2008 (Пт) 11:11

Re: Современное оформление приложений на VB6 под XP

Сообщение Dany » 25.10.2008 (Сб) 16:07

' предлагаемый в книге фрагмент кода. Работает с ошибками - которые могут возникнуть в любой момент!!! :o
'пишется код манифеста в блокноте и сохраняется в формате имя приложения.exe.manifest . Мой пример должен выполняться для приложения Project1

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:shemas-microsoft-com:asm.v1" manifestVersion="2.0">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="X86"
name="Project1"
type="win32/"
<dependency>
<DependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="X86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>
Вложения
Стиль элементов.rar
Программа в которой возникает ошибка с ее кодом
(61.54 Кб) Скачиваний: 298

mihlon
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 29.10.2008 (Ср) 23:57

Re: Современное оформление приложений на VB6 под XP

Сообщение mihlon » 05.11.2008 (Ср) 0:21

А можно на примере показать как использовать comctl32.dll напрямую без COM-обертки.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Современное оформление приложений на VB6 под XP

Сообщение Денис » 05.11.2008 (Ср) 10:03

mihlon писал(а):А можно на примере показать как использовать comctl32.dll напрямую без COM-обертки.

Да. Как-то был разговор и Antonariy выложил здесь на форуме готовые кирпичики. Спроси у него.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: Современное оформление приложений на VB6 под XP

Сообщение SLIM » 05.11.2008 (Ср) 12:24

Да. Как-то был разговор и Antonariy выложил здесь на форуме готовые кирпичики. Спроси у него.

Лучше бы он статью написал
Пишите жизнь на чистовик.....переписать не удастся.....

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Современное оформление приложений на VB6 под XP

Сообщение Antonariy » 05.11.2008 (Ср) 14:26

Лучше бы кто-то MSDN прочёл. Там все написано.
Лучший способ понять что-то самому — объяснить это другому.

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: Современное оформление приложений на VB6 под XP

Сообщение SLIM » 05.11.2008 (Ср) 15:07

Antonariy писал(а):Лучше бы кто-то MSDN прочёл. Там все написано.

Так тогда зачем форум нам(ламерам) нужен. Чтобы кто-то доступно по людски объяснил
Пишите жизнь на чистовик.....переписать не удастся.....

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Современное оформление приложений на VB6 под XP

Сообщение Antonariy » 05.11.2008 (Ср) 16:25

Если инфа из MSDN для тебя не доступна, то не будет доступна и статья.
Лучший способ понять что-то самому — объяснить это другому.

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: Современное оформление приложений на VB6 под XP

Сообщение SLIM » 05.11.2008 (Ср) 22:37

Antonariy писал(а):Если инфа из MSDN для тебя не доступна, то не будет доступна и статья.

Ага, еще скажи что MSDN реально самое понятно что есть на белом свете.....что за злость необузданная
Пишите жизнь на чистовик.....переписать не удастся.....

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Современное оформление приложений на VB6 под XP

Сообщение iGrok » 05.11.2008 (Ср) 22:52

SLIM писал(а):
Antonariy писал(а):Если инфа из MSDN для тебя не доступна, то не будет доступна и статья.

Ага, еще скажи что MSDN реально самое понятно что есть на белом свете.....что за злость необузданная

Реально самое понятное, что есть на белом свете - это азбука. Всё остальное требует определённого уровня знаний.

З.Ы. А в MSDN действительно всё разжёвано.
label:
cli
jmp label

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Современное оформление приложений на VB6 под XP

Сообщение alibek » 06.11.2008 (Чт) 9:52

SLIM писал(а):Ага, еще скажи что MSDN реально самое понятно что есть на белом свете.....что за злость необузданная

Так и есть. Мало какая документация может сравниться с MSDN по качеству.
Lasciate ogni speranza, voi ch'entrate.

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: Современное оформление приложений на VB6 под XP

Сообщение SLIM » 06.11.2008 (Чт) 21:27

alibek писал(а):Так и есть. Мало какая документация может сравниться с MSDN по качеству.

Возможно это я не уделял должного внимания MSDN. Исправлюсь. Ищвините за неправоту возможную.... :(
Пишите жизнь на чистовик.....переписать не удастся.....

Dany
Начинающий
Начинающий
 
Сообщения: 24
Зарегистрирован: 22.08.2008 (Пт) 11:11

Re: Современное оформление приложений на VB6 под XP

Сообщение Dany » 12.11.2008 (Ср) 19:48

Народ - помогите, может вы загрузили пример который я приложил в программе - у меня ни черта не работает по рецептам книги!!! 8)

pronto
Постоялец
Постоялец
 
Сообщения: 597
Зарегистрирован: 04.12.2005 (Вс) 6:20
Откуда: Владивосток

Re: Современное оформление приложений на VB6 под XP

Сообщение pronto » 13.11.2008 (Чт) 4:50

ни черта не работает по рецептам книги!!!

Фтопку такую книгу! Если серьезно, то в интернете полно примеров решения этой задачи. С этим оформлением под XP есть несколько моментов. (конкретно для VB)
1. Увидеть изменения можно в откомпилированном виде программы
2. Если OptionButton'ы разместить на Frame, то они чернеют (это лечится размещением их на PictureBox (см. вложение))
3. Оформление применяется к базовым контролам и контродам из Microsoft Windows Common Controls 5.0 (SP2) (это если будешь использовать в программе ProgressBar или Slider или ListView или TabStrip)
4. Вытекает из 3-го пункта. Контролы из этой библиотеки не предоставляют стандартных интефейсов для их расширенного управления и настроек. То есть некоторые вещи придется делать с использованием WinAPI через отправление сообщений или хук.
Вложения
styleXP.rar
(7.01 Кб) Скачиваний: 319
Последний раз редактировалось pronto 13.11.2008 (Чт) 16:22, всего редактировалось 1 раз.
O, sancta simplicitas!

werbersoft
Новичок
Новичок
Аватара пользователя
 
Сообщения: 31
Зарегистрирован: 09.11.2008 (Вс) 17:13
Откуда: Ростова-на-Дону

Re: Современное оформление приложений на VB6 под XP

Сообщение werbersoft » 13.11.2008 (Чт) 7:37

Если всё объяснить коротко, то это выглядет так:
1. Создаёшь манифест (его текст дан в начале темы)
2. В первой загружаемой форме при Form_Initialize вызываешь Api-шку InitCommonControlsEx (ниже код её объявления в модуле)
Код: Выделить всё
Public Declare Function InitCommonControlsEx Lib "comctl32.dll" (lpInitCtrls As INITCOMMONCONTROLSEX_TYPE) As Long

3. В программе учитываешь, что она должна завершаться ExitProcess-ом (лично у меня без него программа выключалась криво).
Код: Выделить всё
Public Declare Sub ExitProcess Lib "kernel32" Alias "ExitProcess" (ByVal uExitCode As Long)

4. Компилируешь программу в exe.
[Viper] :: А ничего, что правильный ответ в этой теме дан уже многократно? Хочется показать, что тоже знаешь ответ?
Мирный программист, помогающий другим. Нехочу никого обижать и грубить.

mihlon
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 29.10.2008 (Ср) 23:57

Re: Современное оформление приложений на VB6 под XP

Сообщение mihlon » 13.11.2008 (Чт) 12:49

pronto, а данный пример будет работать на VIste?

pronto
Постоялец
Постоялец
 
Сообщения: 597
Зарегистрирован: 04.12.2005 (Вс) 6:20
Откуда: Владивосток

Re: Современное оформление приложений на VB6 под XP

Сообщение pronto » 13.11.2008 (Чт) 16:18

Не знаю, Висту не использую.
O, sancta simplicitas!

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Современное оформление приложений на VB6 под XP

Сообщение Antonariy » 13.11.2008 (Чт) 18:23

Ага, и особого смысла ее использовать уже нет. На подходе Windows 7, которая на висте основана, но гораздо шустрее. Похоже висту ожидает судьба Millenium.
Лучший способ понять что-то самому — объяснить это другому.

BION
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 259
Зарегистрирован: 24.01.2005 (Пн) 21:05

Re: Современное оформление приложений на VB6 под XP

Сообщение BION » 13.11.2008 (Чт) 21:47

mihlon писал(а):pronto, а данный пример будет работать на VIste?


Будет.
Буээ!

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Re: Современное оформление приложений на VB6 под XP

Сообщение tyomitch » 19.11.2008 (Ср) 19:56

Хакер писал(а):Элементу управления, созданные таким образом в окне, находятся не в этом окне, а в окне-контейнере, который находится в окне. Окно-контейнер просто необходимо COM-обертке, ибо коммон-контроллы сообщают о свех своих событиях с помощью оконных сообщений, отсылаемых своему паренту. Если бы не было промежуточного контейнера, COM-обертке бы пришлось каким-то образом ловить сообщения, отправленные чужому окну.

То, что такой механизм существует, документирован, и используется в т.ч. в comctl, выпущено из виду нарочно?
Я про рефлексию сообщений.
Изображение

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Современное оформление приложений на VB6 под XP

Сообщение Денис » 20.11.2008 (Чт) 15:34

Antonariy писал(а):Похоже висту ожидает судьба Millenium.

Не совсем так. На миллениуме тестировались новые фишечки под платформу 9х. Буквально через год от этой платформы отказались и милениум остался наедине со своими глюками. Висту будет ожидать подобная судьба, только если ms откажется от платформы NT (а от нее она вряд-ли откажется, потому что платформа вышла довольно успешная и технически и коммерчески). Висту ожидает череда сервиспаков, в результате которых она станет максимально идентична будущей семерке. ИМХО.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Современное оформление приложений на VB6 под XP

Сообщение Antonariy » 20.11.2008 (Чт) 16:23

Не выгодно постоянно патчить не сильно распространенную систему. Имхо.
Лучший способ понять что-то самому — объяснить это другому.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Современное оформление приложений на VB6 под XP

Сообщение Денис » 20.11.2008 (Чт) 16:37

Antonariy писал(а):Не выгодно постоянно патчить не сильно распространенную систему. Имхо.

Ну так это ж пока. Висту ставят и ставят на новые компы. С каждой секундой их становится все больше! А до семерки еще ой как далеко...
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Re: Современное оформление приложений на VB6 под XP

Сообщение Alexanbar » 20.11.2008 (Чт) 17:51

Денис писал(а):Висту ставят и ставят на новые компы. С каждой секундой их становится все больше!


В этом -то и беда.

nekeda
Постоялец
Постоялец
 
Сообщения: 710
Зарегистрирован: 10.04.2005 (Вс) 23:20

Re: Современное оформление приложений на VB6 под XP

Сообщение nekeda » 21.11.2008 (Пт) 12:43

В этом -то и беда.


ой ли?

PhoenixBird
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 23
Зарегистрирован: 05.10.2008 (Вс) 22:25
Откуда: от верблюда

Re: Современное оформление приложений на VB6 под XP

Сообщение PhoenixBird » 18.12.2008 (Чт) 18:38

Я не могу понять способа "экспистизации" проги на VB6. :? Подскажите мне способ применения стиля XP к проге на VB6 SP6 в ЛС. :roll:
PS:Опыта работы с системой не имею, а что такое "манифест" не знаю. Помогите новичку :cry:
C:\>format C:_

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: Современное оформление приложений на VB6 под XP

Сообщение Viper » 19.12.2008 (Пт) 8:28

PhoenixBird, а прочитать это топик в нчала не удалось? Все разжевано до мелочи.
Весь мир матрица, а мы в нем потоки байтов!

След.

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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

    TopList