Enein
Silenced by ZlaYa1000
offline
Опыт:
43,531Активность: |
Стиль формы в Delphi 7
Те, кто работал с дельфями, наверное знают такой компонент, как XPManifest (вкладка Win32), меняющий дизайн всех остальных компонентов, расположенных на форме, на экспишный. У меня вопрос: можно ли как-то изменить оформление формы программы (в Delphi 7) на вистовский стиль? |
15.01.2009, 20:20 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
tysch_tysch
Работаем
online
Опыт: отключен
|
Flareon очевидно не юзая этот компонент ты получишь в висте стиль висты. Также ты можешь поискать стили в инете)
|
15.01.2009, 20:44 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Enein
Silenced by ZlaYa1000
offline
Опыт:
43,531Активность: |
Цитата:
дело в том что у меня XP, но я хочу стиль висты для проги Цитата:
а что вбивать в поисковике? |
||
15.01.2009, 20:53 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
RazArt
offline
Опыт:
11,197Активность: |
Flareon, откомпелил, открыл редактором ресурсов ексешник, и добавил туда ресурс с типом "24" и именем "1" следующего содержания
» Код Код:
http://plasmon.rghost.ru/87353.image |
15.01.2009, 20:57 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Enein
Silenced by ZlaYa1000
offline
Опыт:
43,531Активность: |
RazArt, а ничего, что у меня на компе хрюшка, а не виста?
|
15.01.2009, 21:00 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
RazArt
offline
Опыт:
11,197Активность: |
Энто без разници, вообще эта операция просто заменяет тему формы и контролов "Microsoft.Windows.Common-Controls", т.е будет виста, то и будет тема висты, Хр, то и тема ХР, щас поищу на 1 форуме, правда он про VB, но мб чего-нибудь узнаешь...
» Вот, тоже мб пригодится Преобразование элементов из стиля 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: RazArt добавил: Или просто помести файл (<имя твоего приложения>.exe.manifest) этогоже содержания в папку в программой |
15.01.2009, 21:09 | #6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Enein
Silenced by ZlaYa1000
offline
Опыт:
43,531Активность: |
Цитата:
а мне нужно, чтобы был на любой винде стиль висты в проге зы: я VB незнаю |
|
15.01.2009, 21:14 | #7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
RazArt
offline
Опыт:
11,197Активность: |
Flareon, хех ты так не сделаешь, вернее можно попытаться, но энто ужо сабклассинг нужно использовать, так что не мучай свою... а вообще тут не при чём язык програмирования, манифест 1 для всех, конечно с извенениями не большими)
А чем вызвана такая идея использования стиля XP, кста как вариант можно сделать свои контролы с твоей темой, энто не так уж сложно... |
15.01.2009, 21:18 | #8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
HGL
Phased out.
offline
Опыт:
25,976Активность: |
можно юзать свой стиль элементов и подогнать под висту =) вплоть до полного маразма типа замены всех элементов картинками |
15.01.2009, 22:19 | #9
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Enein
Silenced by ZlaYa1000
offline
Опыт:
43,531Активность: |
Цитата:
а над этим я уже подумывал... наверное я так и сделаю |
|
15.01.2009, 23:45 | #10
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
RazArt
offline
Опыт:
11,197Активность: |
Flareon, а зачем???
|
15.01.2009, 23:47 | #11
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
NETRAT
offline
Опыт:
83,712Активность: |
манифест в данном случае описывает используемые в приложении компоненты для того что бы выбранная тема могла применяться и к твоему приложению
если сильно хочется сделать что-то впрочем, истинный признак мастерства - как раз таки отсутствие подобной хрени, полное соответствие используемых компонентов стандартным, тогда приложение органично вписывается в используемую юзером тему(скин) - обычно именно этим программист отличается от говнокодера NETRAT добавил: сабклассинг нихрена не поможет, он используется для того что бы вручную указать "родство" предков класса и стандартных компонентов - то есть обычно, если компонент(или его части) опознается темой некорректно, используется как раз-таки сабклассинг - а именно, создается свой класс-наследник, и оверрайдится его enum - процедура определения "типа" класса манифест тебе вообще тут не поможет, почему - читай первую строчку моего сообщения это нужно искать специальные тим-менеджеры (theme manager), которые будут осуществлять в рантайме отрисовку компонентов твоего приложения(включая саму форму), такой тим менеджер есть по ссылке которую я указал, но он платный, думаю, если поискать, можно найти че-то бесплатное со скином висты |
16.01.2009, 12:57 | #12
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|