【发布时间】:2016-08-02 09:45:16
【问题描述】:
我的目标是在VST中绘制一个自定义动画进度条
我的目标是绘制与下图类似的结果,我尝试做这样的事情OnBeforeCellPaint:
procedure TForm2.VTs1BeforeCellPaint(Sender: TBaseVirtualTree;
TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex;
CellPaintMode: TVTCellPaintMode; CellRect: TRect; var ContentRect: TRect);
var
NewRect : TRect;
xOff, yOff : Integer;
ProgressBarRect: TRect;
Percents: Real;
DrawProgressBar: Boolean;
begin
//draw progress
Percents := 10; // 40%
// progressBar on Column 3
begin
// draw progressbar
ProgressBarRect.Left := 0;
ProgressBarRect.Top := CellRect.Top + 1;
ProgressBarRect.Right := round((CellRect.Right - CellRect.Left) * Percents) + CellRect.Left;
ProgressBarRect.Bottom := CellRect.Bottom - 1;
if (ProgressBarRect.Right - ProgressBarRect.Left) > 0 then
begin
TargetCanvas.Brush.Color := RGB(179,255,102);
TargetCanvas.FillRect(ProgressBarRect);
end;
// ProgressBarRect
inc(ProgressBarRect.Left);
inc(ProgressBarRect.Top);
dec(ProgressBarRect.Right);
dec(ProgressBarRect.Bottom);
if (ProgressBarRect.Right - ProgressBarRect.Left) > 0 then
begin
TargetCanvas.Brush.Color := RGB(221,255,187);
TargetCanvas.FillRect(ProgressBarRect);
end;
end;
end;
但我无法获得与下图相同的结果并达到相同的方法:
这就是我在编码中得到的结果:
进度条出现在不在它旁边的节点上,它的设计与图像中显示的不同我在上面发布的动画图像的设计。
【问题讨论】:
-
“但是我不能做同样的结果,也不能达到同样的图像处理方法” 为什么不呢?有什么不同,什么不起作用以及以什么方式?
-
添加了有问题的结果图片
-
这是在单元格绘制之前,因此实际的单元格绘制可能会覆盖您正在执行的操作。那么,你不需要修改 var ContentRect 吗?
-
我创建了新的矩形以在节点名称左侧显示进度条,并且设计出来的形状完全不像图像。我正在尝试对动画 gif 图像做同样的结果
-
但是你的矩形宽度是单元格宽度的百分比。当然应该是百分比单元格高度和固定宽度?
标签: delphi delphi-xe8 virtualtreeview tvirtualstringtree