gpt4 book ai didi

delphi - 带有 UseExplorerThemes 的 VirtualTreeView

转载 作者:行者123 更新时间:2023-12-03 15:46:35 26 4
gpt4 key购买 nike

我刚刚发现使用 Option toUseExplorerTheme 可以为 VirtualStringTree 生成一个漂亮的选择矩形。但是,如果设置了 Option toGridExtensions 并且树中有多个列,则不会为内部单元格绘制所选内容的垂直边框,并且圆角也会丢失。仅正确绘制了最左列和最右列的最外边缘和角。看起来好像选择矩形是在最外面的列之间绘制的,而未选定列的背景只是绘制在选择矩形上。

关闭 toGridExtensions 会产生正确的选择矩形,但我更喜欢打开它,因为只能通过在标准模式下单击文本(而不是单击文本旁边的空白区域)来选择单元格.

Delphi 7 和 XE2 会出现此问题,其他版本也可能会出现此问题。

要重现,将 TVirtualStringTree 添加到表单,显示标题,向标题添加几列,然后激活选项 toGridExtensions (MiscOptions)、toUseExplorerTheme (PaintOptions)、toExtendedFocus (SelectionOptions),运行程序并单击任意单元格。

最佳答案

在我看来这是一个错误,因为谁会想要这样的选择:

enter image description here

要在虚拟 TreeView 代码(在我的例子中为 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;

您将得到如下选择:

enter image description here

这同样适用于下一个 DrawThemedFocusRect 嵌套过程。

我已将此问题报告为 Issue 376 ,固定在 revision r587 .

关于delphi - 带有 UseExplorerThemes 的 VirtualTreeView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19030376/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com