私の見解では、これはバグです。なぜなら、誰が次のような選択をしたいからです:
仮想ツリー ビュー コード (私の場合は v.5.1.4) で修正するには、TBaseVirtualTree.PrepareCell
メソッド (私の場合は行 25802) に移動し、このネストされたプロシージャ コードを確認します (コメントは私のものです)。
procedure DrawBackground(State: Integer);
begin
// here the RowRect represents the row rectangle and InnerRect the cell
// rectangle, so there should be rather, if the toGridExtensions is NOT
// in options set or the toFullRowSelect is, then the selection will be
// drawn in the RowRect, otherwise in the InnerRect rectangle
if (toGridExtensions in FOptions.FMiscOptions) or (toFullRowSelect in FOptions.FSelectionOptions) then
DrawThemeBackground(Theme, PaintInfo.Canvas.Handle, TVP_TREEITEM, State, RowRect, nil)
else
DrawThemeBackground(Theme, PaintInfo.Canvas.Handle, TVP_TREEITEM, State, InnerRect, nil);
end;
この問題を修正するには、コードを次のように変更します。
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
次の入れ子手続きも同様です。
私はこの問題を として報告しました。この問題Issue 376
は で修正されていrevision r587
ます。