【问题标题】:TListview CustomDrawItem change fontTListview CustomDrawItem 改变字体
【发布时间】:2012-09-21 07:16:59
【问题描述】:

我有一个列表视图,如果用户双击它,我想将项目的字体颜色更改为 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。

【问题讨论】:

    标签: delphi delphi-7 vcl


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-09
      • 2021-02-15
      • 2010-09-18
      • 2020-10-14
      • 1970-01-01
      • 1970-01-01
      • 2016-10-23
      相关资源
      最近更新 更多