如何突出显示 VST 的选定节点?

发布于 2024-11-05 13:21:21 字数 490 浏览 0 评论 0原文

这是我的代码:

procedure TfrmMain.vstListPaintText(Sender: TBaseVirtualTree;
  const TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex;
  TextType: TVSTTextType);
begin
  if vsSelected in Node.States then
    begin
      TargetCanvas.brush.color := clBlue;
      TargetCanvas.FillRect(targetcanvas.ClipRect);
    end;
end;

但这是发生的情况:

  1. 我单击节点
  2. 整个 VST 被涂成蓝色,除了之前选定的节点
  3. 选定的节点是蓝色的(并且 VST 恢复到默认颜色)

如何避免#2?

This is my code:

procedure TfrmMain.vstListPaintText(Sender: TBaseVirtualTree;
  const TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex;
  TextType: TVSTTextType);
begin
  if vsSelected in Node.States then
    begin
      TargetCanvas.brush.color := clBlue;
      TargetCanvas.FillRect(targetcanvas.ClipRect);
    end;
end;

But this is what happens:

  1. I click the node
  2. Whole VST is painted blue except for the previous selected node
  3. The selected node is blue (and the VST is back to it's default color)

How do I avoid #2?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

嘿咻 2024-11-12 13:21:21

如果您想绘制单元格,则发生错误事件 - ...PaintText 用于设置颜色和字体样式。

尝试其他事件(OnBeforeCellPaint),您将自动获得单元格的 TRect。

wrong event if you want to paint the cell - ...PaintText is for setting color and font styles.

Try other events instead (OnBeforeCellPaint) and you will get TRect for the cell automatically.

旧时浪漫 2024-11-12 13:21:21

很简单:您正在FillRect填充整个画布。不要那样做。使用 OnAfterCellPaint 或 OnAfterItemPaint。在这些事件中,您将获得特定的 CellRect 来进行自定义绘制。

Simple: you're FillRect-ing the whole canvas. Don't do that. Use OnAfterCellPaint or OnAfterItemPaint. In these events, you get the particular CellRect to do your custom painting.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文