Конференция "WinAPI" » Контролы в теме
 
  • p © (12.03.13 17:20) [0]
    Здравствуйте

    Делаю для проводника shell extension, по нажатию пункта меню появляется моя форма, но в Windows XP контролы на ней отображаются не в "теме", в 7 все нормально, добавление манифеста не помагает

    Подскажите как сделать контролы на форме в "теме", DXE2
  • Cobalt © (13.03.13 16:13) [1]
    А контролы стандартные Дельфовые?
  • Rouse_ © (13.03.13 16:47) [2]
    манифест подключи след образом:

    resources.rc
    #define RT_MANIFEST  24
    #define ISOLATIONAWARE_MANIFEST_RESOURCE_ID  2
    ISOLATIONAWARE_MANIFEST_RESOURCE_ID RT_MANIFEST "manifest.xml"



    manifest.xml
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <assemblyIdentity
       name="Microsoft.Windows.Shell.desk"
       processorArchitecture="x86"
       version="5.1.0.0"
       type="win32"/>
    <description>Windows Shell</description>
    <dependency>
       <dependentAssembly>
           <assemblyIdentity
               type="win32"
               name="Microsoft.Windows.Common-Controls"
               version="6.0.0.0"
               processorArchitecture="x86"
               publicKeyToken="6595b64144ccf1df"
               language="*"
           />
       </dependentAssembly>
    </dependency>
    </assembly>



    не забудь у манифеста правильную кодировку выставить.
  • p © (14.03.13 16:53) [3]

    > Rouse_ ©   (13.03.13 16:47) [2]


    Не помогает

    Ни как не получается, буду наверно DevExpress скины использовать
  • clickmaker © (14.03.13 17:22) [4]
    достаточно в папку с myapp.exe положить файл myapp.exe.manifest с вышеуказанным содержимым
  • p © (14.03.13 17:41) [5]

    > clickmaker ©   (14.03.13 17:22) [4]


    Форма внутри dll, не .exe
  • clickmaker © (14.03.13 17:48) [6]
    > Форма внутри dll

    по барабану
  • clickmaker © (14.03.13 17:50) [7]
    а, это же "для проводника shell extension"... Так по идее, там темы должны подхватываться... Ну или как Розыч говорит. Проверь, скомпилился ли вообще манифест внутрь dll
  • p © (14.03.13 18:20) [8]

    > clickmaker ©   (14.03.13 17:50) [7]


    Смотрел в редакторе ресурсов, манифест в dll есть, пробовал в опциях отключать Runtime Themes
  • p © (14.03.13 18:21) [9]
    Жесть ни как не хочет
  • Rouse_ © (14.03.13 18:21) [10]
    Проверь, вот это работает или нет?
    Если работает значит делаешь что-то не то.
    Правда там реализация отрисовки немного не правильная, но работать должно.
    http://rouse.drkb.ru/winapi.php#propsheet

    ЗЫ: у себя сейчас проверил - работает как надо
  • Rouse_ © (14.03.13 18:31) [11]
    А кстати чуть не забыл, под семеркой этого не требуется но вот в ХР были проблемы с активизацией контекста манифеста. Чтобы он подключился к твои контролам используй ActivateActCtx.
    Смотри использование в примере по ссылке выше в модуле ActivationCotext
  • p © (14.03.13 18:33) [12]

    > Rouse_ ©   (14.03.13 18:21) [10]


    Рисуются в теме, буду смотреть исходник
  • p © (14.03.13 19:38) [13]
    Александр Спасибо Большое

    Проблема решается так

    {$R resources.res}

    uses ActivationCotext.pas

    var
     ThemedActContext: TThemedActContext;
    begin  
     ThemedActContext := TThemedActContext.Create;
     try
       ThemedActContext.Activate := True;
       MessageBox(0, '', '', MB_YESNOCANCEL);
     finally
       ThemedActContext.Free;
     end;
    end;



    Отключить Runtime Themes

    Ресурсы и ActivationCotext.pas http://yadi.sk/d/TezGbF6D3HsLm
  • p © (14.03.13 19:43) [14]
    Неправильная ссылка в предедущем посте

    Ресурсы и ActivationCotext.pas http://yadi.sk/d/tj7UGUMH3HsqS
  • Rouse_ © (14.03.13 21:14) [15]
    Проверь на семерке обязательно, там с этим были проблемы (избыточность вызова и падение с AV в shell32)
 
Конференция "WinAPI" » Контролы в теме
Есть новые Нет новых   [134430   +4][b:0][p:0.002]