我正在尝试在TListView中为文本分配多种颜色,如渐变,我尝试搜索但在互联网上所有我能找到的是单色方法,我尝试一次绘制一个字符并改变颜色但这也不起作用。这是我试过的代码。
procedure TForm1.lvMainAdvancedCustomDrawItem(Sender: TCustomListView; Item: TListItem; State: TCustomDrawState; Stage: TCustomDrawStage; var DefaultDraw: Boolean);
var txtWidth: Integer;
Rct: TRect;
begin
Rct := item.DisplayRect(drBounds);
lvMain.Canvas.Font.Color := clRed;
DrawText(lvMain.Canvas.Handle, 'asd', 3, Rct, DT_SINGLELINE);
Canvas.Refresh;
lvMain.Canvas.Font.Color := clBlack;
txtWidth := Canvas.TextWidth('asd');
Rct.Left := Rct.Left + txtWidth;
DrawText(lvMain.Canvas.Handle, 'b', 1, Rct, DT_SINGLELINE);
lvMain.Canvas.Font.Color := clBlue;
txtWidth := Canvas.TextWidth('b');
Rct.Left := Rct.Left + txtWidth;
DrawText(lvMain.Canvas.Handle, 'sa', 2, Rct, DT_SINGLELINE);
end;
它仍然会产生单一颜色。关于如何实现这一目标的任何建议?
由于
答案 0 :(得分:2)
这是可能的,但您必须接管Windows Paint
和PaintRegion
方法才能做得很好(使用真正的渐变)。
此外,在您返回之前将 DefaultDraw
设置为false,否则您刚刚完成的所有工作都将被覆盖...