Delphi7中Listview的一些常用功能

偶尔使用Listview的过程中总是要改一些默认的设置,现在把它们集中写出来,以备用。

MultiSelect := True; 使
Listview可以同时选择多行

GridLines := True;
使Listview显示格线

ViewStyle := vsReport; 显示数据项的详细列表

HideSelection := True; 使listview失去焦点时,选中行不高亮


//设置颜色
procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
  Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
var
  subRect, itemRect: TRect;
  i, SubItem: Integer;
begin
  DefaultDraw := False;
  if Item.Selected then begin
    Sender.Canvas.Font.Color := clRed; //选中行字体颜色
    Sender.Canvas.Brush.Color := clgray;  //clGreen; 选中行高亮颜色
  end else begin
    Sender.Canvas.Font.Color := clNavy; //正常行字体颜色
    Sender.Canvas.Brush.Color := clWhite; //正常行高亮颜色
  end;
  itemRect := Item.DisplayRect(drLabel);
  subRect := itemRect;
  for SubItem := 0 to (Sender as TListView).Columns.Count - 1 do
  begin
    subRect.Left := itemRect.Left;
    for i := 1 to SubItem do
    begin
      subRect.Left := subRect.Left + (Sender as TListView).Column[i - 1].Width;
      subRect.Right := subRect.Right + SubRect.Left + (Sender as TListView).Column[i].Width;
    end;
    if SubItem = 0 then
    begin
      subRect.Right := subRect.Right + 2;
      Sender.Canvas.TextRect(subRect, subRect.Left, subRect.Top, Item.Caption);
    end else
      Sender.Canvas.TextRect(subRect, subRect.Left, subRect.Top, Item.SubItems[SubItem - 1]);
  end;
end;

 

 

//排序功能
  private
    { Private declarations }
    SortCol: Integer;
    SortWay: Integer;
 
procedure TForm1.ListView1ColumnClick(Sender: TObject;
  Column: TListColumn);
begin
  SortCol := Column.Index;
  if (SortWay = 1) then SortWay := -1 else SortWay := 1;
  (Sender as TCustomListView).AlphaSort;
end;

procedure TForm1.ListView1Compare(Sender: TObject; Item1, Item2: TListItem;
  Data: Integer; var Compare: Integer);
var
  t: Integer;
begin
  if (SortCol = 0) then
  begin
    Compare := SortWay * CompareText(Item1.Caption, Item2.Caption);
  end else
  begin
    t := SortCol - 1;
    Compare := SortWay * CompareText(Item1.SubItems[t], Item2.SubItems[t]);
  end;
end;

//这个功能有个问题:数字排序会按字符类似排,例如:1,10,102,3,34,356......

 




posted on 2014-07-16 17:24  evil39c  阅读(195)  评论(0编辑  收藏  举报

导航