XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Общение> Hard & Soft
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
Enein
Silenced by ZlaYa1000
offline
Опыт: 43,453
Активность:
Стиль формы в Delphi 7
Те, кто работал с дельфями, наверное знают такой компонент, как XPManifest (вкладка Win32), меняющий дизайн всех остальных компонентов, расположенных на форме, на экспишный.
У меня вопрос: можно ли как-то изменить оформление формы программы (в Delphi 7) на вистовский стиль?
Старый 15.01.2009, 20:20
tysch_tysch
Работаем
online
Опыт: отключен
Flareon очевидно не юзая этот компонент ты получишь в висте стиль висты. Также ты можешь поискать стили в инете)
Старый 15.01.2009, 20:44
Enein
Silenced by ZlaYa1000
offline
Опыт: 43,453
Активность:
Цитата:
очевидно не юзая этот компонент ты получишь в висте стиль висты

дело в том что у меня XP, но я хочу стиль висты для проги
Цитата:
Также ты можешь поискать стили в инете)

а что вбивать в поисковике?
Старый 15.01.2009, 20:53
RazArt

offline
Опыт: 11,197
Активность:
Flareon, откомпелил, открыл редактором ресурсов ексешник, и добавил туда ресурс с типом "24" и именем "1" следующего содержания
» Код
Код:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity
  type="win32"
    name="DelphiApplication"
    version="1.0.0.0" 
  processorArchitecture="*"/>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity
        type="win32"
        name="Microsoft.Windows.Common-Controls"
        version="6.0.0.0"
        publicKeyToken="6595b64144ccf1df"
        language="*"
        processorArchitecture="*"/>
    </dependentAssembly>
  </dependency>
</assembly>

http://plasmon.rghost.ru/87353.image
Старый 15.01.2009, 20:57
Enein
Silenced by ZlaYa1000
offline
Опыт: 43,453
Активность:
RazArt, а ничего, что у меня на компе хрюшка, а не виста?
Старый 15.01.2009, 21:00
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
Enein
Silenced by ZlaYa1000
offline
Опыт: 43,453
Активность:
Цитата:
будет виста, то и будет тема висты, Хр, то и тема ХР

а мне нужно, чтобы был на любой винде стиль висты в проге
зы: я VB незнаю
Старый 15.01.2009, 21:14
RazArt

offline
Опыт: 11,197
Активность:
Flareon, хех ты так не сделаешь, вернее можно попытаться, но энто ужо сабклассинг нужно использовать, так что не мучай свою... а вообще тут не при чём язык програмирования, манифест 1 для всех, конечно с извенениями не большими)

А чем вызвана такая идея использования стиля XP, кста как вариант можно сделать свои контролы с твоей темой, энто не так уж сложно...
Старый 15.01.2009, 21:18
HGL
Phased out.
offline
Опыт: 25,976
Активность:
можно юзать свой стиль элементов и подогнать под висту =) вплоть до полного маразма типа замены всех элементов картинками
Старый 15.01.2009, 22:19
Enein
Silenced by ZlaYa1000
offline
Опыт: 43,453
Активность:
Цитата:
вплоть до полного маразма типа замены всех элементов картинками

а над этим я уже подумывал... наверное я так и сделаю
Старый 15.01.2009, 23:45
RazArt

offline
Опыт: 11,197
Активность:
Flareon, а зачем???
Старый 15.01.2009, 23:47
NETRAT

offline
Опыт: 83,712
Активность:
манифест в данном случае описывает используемые в приложении компоненты для того что бы выбранная тема могла применяться и к твоему приложению

если сильно хочется сделать что-то красивое пестрое, градиентное, с альфой и отливом, глянь AlphaControls (http://www.alphaskins.com/ademos.php)

впрочем, истинный признак мастерства - как раз таки отсутствие подобной хрени, полное соответствие используемых компонентов стандартным, тогда приложение органично вписывается в используемую юзером тему(скин) - обычно именно этим программист отличается от говнокодера

NETRAT добавил:
сабклассинг нихрена не поможет, он используется для того что бы вручную указать "родство" предков класса и стандартных компонентов - то есть обычно, если компонент(или его части) опознается темой некорректно, используется как раз-таки сабклассинг - а именно, создается свой класс-наследник, и оверрайдится его enum - процедура определения "типа" класса

манифест тебе вообще тут не поможет, почему - читай первую строчку моего сообщения
это нужно искать специальные тим-менеджеры (theme manager), которые будут осуществлять в рантайме отрисовку компонентов твоего приложения(включая саму форму), такой тим менеджер есть по ссылке которую я указал, но он платный, думаю, если поискать, можно найти че-то бесплатное со скином висты
Старый 16.01.2009, 12:57
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 18:29.