Controls with XP Style

Тема в разделе "WASM.WIN32", создана пользователем ISM, 19 апр 2006.

  1. ISM

    ISM Серега

    Публикаций:
    0
    Регистрация:
    20 мар 2006
    Сообщения:
    23
    Адрес:
    Transnistria
    Hi, people! Подскажите plz. как мне, честному программеру, использовать XP-шный стиль для контролов? Т.е. как создать дельфийский аналог XPManifest?
     
  2. Jupiter

    Jupiter Jupiter

    Публикаций:
    0
    Регистрация:
    12 авг 2004
    Сообщения:
    532
    Адрес:
    Russia
    собственно, нужен XP Manifest в ресурсах (#24), либо отдельным файлом (AppName.exe.manifest), плюс вызов InitCommonControls в коде при инициализации UI (чем раньше, тем лучше).

    пример файла манифеста - в любой XP программе, есть проги для генерации такого манифеста (в PE Explorer'e), делфовый также подойдёт
     
  3. Bohdan200

    Bohdan200 New Member

    Публикаций:
    0
    Регистрация:
    13 сен 2005
    Сообщения:
    134
    Адрес:
    Lviv
    В ресурс-скрипте пишеш строчку

    1 24 "xpstyle.xml"



    Содержимое xpstyle.xml:



    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>

    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0]

    <assemblyIdentity

    type="win32"

    name="Masm32"

    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>
     
  4. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine


    Не нужен вызов (если InitCommonControlsEx не используешь). Достаточно связи comctl32.dll в импорте.
     
  5. Jupiter

    Jupiter Jupiter

    Публикаций:
    0
    Регистрация:
    12 авг 2004
    Сообщения:
    532
    Адрес:
    Russia
    IceStudent

    как раз в том то и дело, что нужен

    во-первых, очень часто программеры пакуют свои творения

    во-вторых, если прога VB, то без InitCommonControls не обойтись

    к тому же совсем не факт, что в проге по умолчанию есть вызовы comctl32
     
  6. masquer

    masquer wasm.ru

    Публикаций:
    0
    Регистрация:
    13 сен 2002
    Сообщения:
    890
    Адрес:
    Николаев


    пишем приложение, которое выводит только MessageBox и все, компилируем, запускаем - все по старому, ложим рядом файлик с именем программки (допустим test.exe) соотв. оформленный test.exe.manifest - оппа, стили работают. Что я делаю не так?
     
  7. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine


    PE Explorer генерирует манифест с указанным значением целевой архитектуры (x86), на XP64 это уже не заработает. "Кроссплатформенный" манифест: processorArchitecture="*". По идее, и "win32" должно быть препятствием, но это не так, работает.



    masquer



    Не знаю. Проверил - работает и так (манифест хоть рядом, хоть в ресурсах). Хотя помню, были глюки какие-то. Знаю точно, что если не указать нужный класс в InitCommonControlsEx, то прога сбойнёт (если этот класс в ресурсах диалога, то диалог не создастся).
     
  8. masquer

    masquer wasm.ru

    Публикаций:
    0
    Регистрация:
    13 сен 2002
    Сообщения:
    890
    Адрес:
    Николаев


    это уже частности и к стилям никоим боком не относится, а так да, для многих контролов, типа дерева, списка, тулбаров надо их перед созданием инициализировать с соотв. флагами.





    у меня х86 в манифесте на х64 было все со стилями в том месаджбоксе :)
     
  9. ISM

    ISM Серега

    Публикаций:
    0
    Регистрация:
    20 мар 2006
    Сообщения:
    23
    Адрес:
    Transnistria
    Thanks for info,Guys! Покапался в инфе на msdn.com - нашёл файлик http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwxp /html/xptheming.asp в котором есть общее описание манифестов. Потом нашел ещё http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shell cc/platform/commctls/userex/cookbook.asp где уже поподробнее расказано оструктуре манифеста. Осталось только поэкспериментировать . . .
     
  10. AxaNt

    AxaNt New Member

    Публикаций:
    0
    Регистрация:
    23 апр 2007
    Сообщения:
    1
    Расклад. Уроки Iczelion'а. Урок 18. Common Control'ы. Убрал "call InitCommonControls", скомпилил - ProgressBar работает. Далее. "masm32\examples\exampl05\menudemo\". Убрал "call InitCommonControls", скомпилил - все работает. Пробовал на Win2k и W'XP.
    Вопрос. Вызов InitCommonControls на что-то влияет?
     
  11. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    Влияет на линкер, который связывает библиотеку comctl32 с объектником. Линкер игнорирует неиспользуемый импорт, если ф-ю не вызывать, и не импортирует библиотеку, т.к. к ней нет ни одного вызовова. Поэтому вызывая эту ф-ю мы обманываем линкер.
    /В фасме проще - ничего можно не вызывать, а сделать вид что мы используем хоть одну ф-ю из этой библы, например/
    Код (Text):
    1.     tempVar = InitCommonControls
    И импорт будет сожержать данную ф-ю даже если мы её не используем.
     
  12. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    AxaNt
    При чём тут манифесты?