2013-07-24 35 views
0

我想分配多种颜色像梯度文本在TListView中,我试图搜索,但在互联网上,我能找到的是单色方法,我试图一次绘制一个字符并改变颜色,但也不起作用。这是我试过的代码。德尔福:着色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; 

它仍然导致单一颜色。有关如何实现这一目标的任何建议?

感谢

回答

2

这是可能的,但你必须要接管的Windows PaintPaintRegion方法把它做好(带正版梯度)。

此外,设置DefaultDraw假你回来之前,或者你只是没有将被覆盖的工作...

+0

任何的例子吗?或链接到一个?谢谢 –