Конференция "WinAPI" » DrawThemeBackground bug
 
  • Unknown_user (26.03.12 15:51) [0]
    DrawThemeBackground в Windows 7 непонятно по каким причинам не рисует фон выделенного элемента. Использую TVirtualTreeView. Вот код.

    Theme := OpenThemeData(Handle, 'TREEVIEW');
    DrawThemeBackground(Theme, Canvas.Handle, TVP_TREEITEM, TREIS_SELECTED, InnerRect, nil);



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

    http://www.geosystema.net/samples/DrawThemeBackgroundBug.png

    На картинке справа дерево в котором DrawThemeBackground  отрабатывает как положено. В дереве слева рисуется лишь рамка.
  • p © (26.03.12 16:15) [1]
    SetWindowTheme(Handle, 'explorer', nil);

    Theme := OpenThemeData(Handle, 'TREEVIEW');
    DrawThemeBackground(Theme, Canvas.Handle, TVP_TREEITEM, TREIS_SELECTED, InnerRect, nil);

  • Unknown user © (26.03.12 16:44) [2]
    >p

    Спасибо. Очень помогли. Оказалось, виноват TVirtualTreeView. Вот код, содержащий баг


    procedure TCustomVirtualTreeOptions.SetPaintOptions
     (const Value: TVTPaintOptions);
    ...
     if FPaintOptions <> Value then
     begin
       ToBeSet := Value - FPaintOptions;
       ToBeCleared := FPaintOptions - Value;
       FPaintOptions := Value;
       with FOwner do
         if HandleAllocated then
         begin
    {$IFDEF ThemeSupport}
           if (tsUseThemes in FStates) or (toThemeAware in ToBeSet <-- вместо этого надо использовать Value) then
             if (toUseExplorerTheme in ToBeSet <-- вместо этого надо использовать Value) and IsWinVistaOrAbove then
               SetWindowTheme(Handle, 'explorer', nil)
             else
               SetWindowTheme(Handle, '', nil);
    {$ENDIF ThemeSupport}



    Я изменял PaintOptions дерева. Когда в списке оказывался один узел я убирал toShowTreeLines. Это вызывало срабатывание

    SetWindowTheme(Handle, '', nil);



    так как в переменной ToBeSet не было toUseExplorerTheme и toThemeAware.

    Кто использует TVirtualTreeView возьмите на заметку.
  • KilkennyCat © (27.03.12 07:45) [3]
    опубликуй здесь http://code.google.com/p/virtual-treeview/. правда, они тормозят с исправлениями,  но другие прочтут.
 
Конференция "WinAPI" » DrawThemeBackground bug
Есть новые Нет новых   [134430   +4][b:0][p:0.001]