2

Delphi 7 で TTNTListView を使用しています。vsReport に設定されています。OnCustomDrawSubItem イベントで、次のコードを使用します。

procedure TForm.ListViewCustomDrawSubItem(Sender: TCustomListView;
   Item: TListItem; SubItem: Integer; State: TCustomDrawState;
   var DefaultDraw: Boolean);
begin
   if SubItem = 2 then
      if (Item.SubItems.Strings[1] = Text1) or (Item.SubItems.Strings[1] = Text2) then
         Sender.Canvas.Font.Color := clGreen
      else
         Sender.Canvas.Font.Color := clRed;
end;

問題は、すべてのサブアイテム >= 3 がサブアイテム 2 と同じ色で描画されることです。サブアイテム >= 3 の Sender.Canvas.Font.Color は clBlack ですが、clRed と clGreen で描画されます。私のコードに問題がある場合は、修正方法を教えてください。バグの場合は、誰かが回避策を知っている可能性があります。ありがとうございました。

4

1 に答える 1

1

他の場合は、色を明示的に設定するだけでよいと思います。そうしていないので、キャンバスの状態は持続します。これを試して:

procedure TForm.ListViewCustomDrawSubItem(Sender: TCustomListView;
   Item: TListItem; SubItem: Integer; State: TCustomDrawState;
   var DefaultDraw: Boolean);
var
  Color: TColor;
begin
  if SubItem = 2 then
    if (Item.SubItems.Strings[1] = Text1) or (Item.SubItems.Strings[1] = Text2) then
      Color := clGreen
    else
      Color := clRed;
  else
    Color := clBlack;
  Sender.Canvas.Font.Color := Color;
end;
于 2011-10-08T12:00:22.580 に答える