TListview CustomDrawItem更改字体

时间:2012-09-21 07:16:59

标签: delphi delphi-7 vcl

我有一个listview,如果用户双击它,想要将项目的字体颜色更改为clRed。但是,如果用户双击另一个项目,则所有其他项目应返回到黑色字体颜色,新双击项目将更改为clRed - 依此类推。

我这里有这个代码:

var
 CurrentProfile : String; // Global var that stores the caption of the double clicked item.


procedure TForm1.ListView1DblClick(Sender: TObject);
begin
 if ListView1.Selected <> NIL then CurrentProfile := ListView1.Selected.Caption;
end;

procedure TForm1.ListView1CustomDrawItem(
Sender: TCustomListView; Item: TListItem; State: TCustomDrawState;
var DefaultDraw: Boolean);
begin
 if item.Caption = CurrentProfile then begin
  Sender.Canvas.Font.Color := clRed;
 end else begin 
  Sender.Canvas.Font.Color := clBlack; // if not change it back to black
 end;
end;

使用此代码,每个双击项目都保持clRed。为什么它不会改回clBlack?请帮忙。提前谢谢。

PS。:我使用的是delphi7。

1 个答案:

答案 0 :(得分:2)

双击事件处理程序需要强制重绘。在该处理程序的末尾调用ListView1.Invalidate。这将强制列表视图上的绘制周期。

procedure TForm1.ListView1DblClick(Sender: TObject);
begin
  if ListView1.Selected <> NIL then 
  begin
    CurrentProfile := ListView1.Selected.Caption; 
    ListView1.Invalidate;
  end;
end;