2013-07-24 5 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 false로 당신이 반환하기 전에, 아니면 그냥 덮어 씁니다 않은 모든 작업 ...

+0

어떤 모범을? 또는 하나에 링크?. 감사 –