如何突出显示 VST 的选定节点?
这是我的代码:
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;
但这是发生的情况:
- 我单击节点
- 整个 VST 被涂成蓝色,除了之前选定的节点
- 选定的节点是蓝色的(并且 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:
- I click the node
- Whole VST is painted blue except for the previous selected node
- The selected node is blue (and the VST is back to it's default color)
How do I avoid #2?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果您想绘制单元格,则发生错误事件 - ...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.
很简单:您正在
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 particularCellRect
to do your custom painting.