2013-12-17 3 views
6

Когда я использую toUseExplorerTheme в TVirtualStringTree.PaintOptions рисует выбор так:Виртуального TreeView с toUseExplorerTheme

Illustration of selection with toUseExplorerTheme

Обратите внимание, что выбор простирается от левой стороны элемента управления положением крайней правой степени любого заголовка узла; выбор имеет одинаковую ширину.

Я хочу, чтобы это выглядело, как на этом изображении (someone else's project, с помощью Virtual TreeView), где выбор охватывает только текст заголовка узла:

enter image description here

Если не регресс в Virtual TreeView (Я использую 5.2.2), тогда это должно быть возможно, но я не могу найти правильную комбинацию опций.

Вот мой установка код:

fTree := TVirtualStringTree.Create(Self); 
fTree.Parent   := Self; 
fTree.Align    := alClient; 

fTree.OnGetText   := TreeGetText; 
fTree.OnInitNode  := TreeInitNode; 
fTree.OnInitChildren := TreeInitChildren; 
fTree.OnChange   := TreeSelectionChange; 
fTree.RootNodeCount  := 1; 
fTree.DrawSelectionMode := smBlendedRectangle; 

fTree.TreeOptions.PaintOptions  := fTree.TreeOptions.PaintOptions 
             + [toUseExplorerTheme]; 
fTree.TreeOptions.SelectionOptions := fTree.TreeOptions.SelectionOptions 
             + [toMultiSelect]; 
+0

Ragged edge on multi-select? Yikes .... Вкусы разные, я думаю, но это будет выглядеть, ну ... неряшливо? +1 За хорошо поставленный вопрос. –

+0

@Marjan, разнообразие - это пряность жизни :-) – TLama

+0

@MarjanVenema Альтернатива выборам в стиле Explorer, которые охватывают всю ширину, но тогда более сложно/невозможно щелкнуть за пределами выделения, чтобы отменить выбор всех. Во всяком случае, мне нравится рваный правый край. –

ответ

6

К сожалению, that was my fault. В заявлении я предложил в this issue должно быть достаточно:

procedure DrawBackground(State: Integer); 
begin 
    // if the full row selection is disabled or toGridExtensions is in the MiscOptions, draw the selection 
    // into the InnerRect, otherwise into the RowRect 
    if not (toFullRowSelect in FOptions.FSelectionOptions) or (toGridExtensions in FOptions.FMiscOptions) then 
    DrawThemeBackground(Theme, PaintInfo.Canvas.Handle, TVP_TREEITEM, State, InnerRect, nil) 
    else 
    DrawThemeBackground(Theme, PaintInfo.Canvas.Handle, TVP_TREEITEM, State, RowRect, nil); 
end; 

То же самое относится и к следующей вложенной процедуре DrawThemedFocusRect. Теперь исправление зафиксировано на revision r587, поэтому, пожалуйста, обновите свое виртуальное дерево. Спасибо @joachim за сотрудничество!

+2

Я только что исправил исправление в редакции 586. –

+0

@Joachim, ничего себе, это было быстро. Однако, можете ли вы сделать аналогичную процедуру с помощью «DrawThemedFocusRect», пожалуйста? Сегодня я собираюсь подать вопрос, так как вчера был занят. Благодарю вас и жалею об этом! – TLama

+0

Спасибо. Я нашел это в свой первый час использования Virtual TreeView и не мог серьезно поверить, что нашел ошибку, которую никто другой не заметил! Оказывается, я на этот раз ошибся ;-) Не уверен, что мой вопрос заслуживает такого же количества голосов, хотя ... Virtual TreeView должен быть кошмаром для тестирования с таким количеством настраиваемых параметров. –

Смежные вопросы