0

TListViewでグラデーションのような複数の色をテキストに割り当てようとしています。検索してみましたが、インターネット上で見つけることができたのは単色の方法だけでした。一度に1文字ずつ描画して色を変更してみましたが、そうではありませんどちらかで動作します。これが私が試したコードです。

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;

それでも単色になります。これを達成する方法に関する提案はありますか?

ありがとう

4

1 に答える 1

2

Paintそれは可能ですが、それをうまく行うには Windowsとメソッドを引き継ぐ必要がありますPaintRegion(本物のグラデーションを使用)。

また、DefaultDraw戻る前にfalseに設定してください。そうしないと、今行ったすべての作業が上書きされます...

于 2013-07-24T05:03:15.550 に答える