Delphi中TListView控件使用


本文整理自网络,侵删。

 




要点:

1.代码备注的超级详细,如下:

unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls;
type
  TForm1 = class(TForm)
    lv1: TListView;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Button7: TButton;
    Button8: TButton;
    Button9: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure lv1CustomDrawItem(Sender: TCustomListView; Item: TListItem;
      State: TCustomDrawState; var DefaultDraw: Boolean);
    procedure lv1ColumnClick(Sender: TObject; Column: TListColumn);
    procedure FormCreate(Sender: TObject);
    procedure Button8Click(Sender: TObject);
    procedure Button9Click(Sender: TObject);
  private
  public
  procedure 分组(Sender: TObject);
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
{风格}
procedure TForm1.Button1Click(Sender: TObject);
begin
  lv1.Clear; //清空
  lv1.Columns.Clear;
  //lv1.ViewStyle := lv1
{增加3项列表头}
  lv1.Columns.Add;
  lv1.Columns.Add;
  lv1.Columns.Add;
  lv1.Columns.Items[0].Caption:='时间';
  lv1.Columns.Items[1].Caption:='地点';
  lv1.Columns.Items[2].Caption:='人物';
  lv1.Columns.Items[0].Width:=100;
  lv1.Columns.Items[1].Width:=100;
  lv1.Columns.Items[2].Width:=300;
{设置属性}
  lv1.ViewStyle:=vsreport; //报表模式
  lv1.GridLines:=true;     //表格线
  //lv1.RowSelect := True;  //选中一整行
end;

{}

{插入数据方法1}
procedure TForm1.Button2Click(Sender: TObject);
begin
  with lv1.items.add do
  begin
  caption:='2013';
  subitems.add('上海');
  subitems.add('田攀');
  end;
end;

{插入数据方法2}
procedure TForm1.Button3Click(Sender: TObject);
var
  Titem:Tlistitem;//存储临时记录.
begin
  Titem := lv1.Items.add;
  Titem.Caption := '201314';
  Titem.SubItems.Add('广州');
  Titem.SubItems.Add('God');
end;

{删除行}
procedure TForm1.Button4Click(Sender: TObject);
begin
  lv1.DeleteSelected; //删除选中行
  lv1.Items.Item[2].Delete;//删除某一行
  lv1.Items.Clear;//清除所有数据
end;

{按标题内容删除}
procedure TForm1.Button6Click(Sender: TObject);
var
  I: Integer;
begin
  for I := 0 to lv1.Items.Count - 1 do
  begin
    if lv1.Items[I].Caption = '田攀2013' then //如果标题为 '田攀2013'
    lv1.Items.Item[I].Delete();//删掉
  end;
end;
{选择某行}
procedure TForm1.Button7Click(Sender: TObject);
begin
  lv1.SetFocus;//获取焦点
  lv1.Items[lv1.Items.Count - 1].Selected := True;//选中
end;

procedure TForm1.Button8Click(Sender: TObject);
begin
   分组(Sender);
end;



{分组效果}
procedure TForm1.分组(Sender: TObject);
begin
   with lv1 do
   begin
     AllocBy := 0;                                //设置总共的项数量,省去每次添加开辟内存空间
     Checkboxes := False;                         //项左边出现复选框,vsList or vsReport有效
     Color := clWindow;                           //背景颜色
     ColumnClick := True;                         //列头能否点击
     with Columns.Add do                          //增加列
     begin
       Alignment := taLeftJustify;                //左对齐
       Caption := '田攀';
       ImageIndex := -1;
       Width := 100;
     end;
     with Columns.Add do                          //增加列
     begin
       Caption := '2013';
       ImageIndex := -1;
       Width := 50;
     end;
     Ctl3D := True;
     DoubleBuffered := False;                     //双缓冲
     Enabled := True;
     FlatScrollBars := False;                     //平滑滚动条
     FullDrag := False;                           //允许拖动列头
     GridLines := False;                          //表格线
     GroupHeaderImages := nil;                    //分组头关联图像列表
     with Groups.Add do                           //增加分组
     begin
       BottomDescription := '说明文字';
       ExtendedImage := -1;                       //关联 GroupHeaderImages图像列表,only on Windows Vista
       Footer := '页脚文本';
       FooterAlign := taLeftJustify;              //页脚文本对齐
       GroupID := 0;                              //组ID号
       Header := '页首文本';
       HeaderAlign := taLeftJustify;
       State := [                                 //分组状态,一些状态只应用于VISTA系统
                 lgsNormal,                       //所有分组展开
                 lgsHidden,                       //分组隐藏
                 lgsCollapsed,                    //分组折叠 Windows Vista only.
                 lgsNoHeader,                     //页首不可见 Windows Vista only.
                 lgsCollapsible,                  //分组可折叠 Windows Vista only.
                 lgsFocused,                      //分组有键盘焦点 Windows Vista only.
                 lgsSelected,                     //分组被选择 Windows Vista only.
                 lgsSubseted,                     //只有分组的一个子集显示出来 Windows Vista only.
                 lgsSubSetLinkFocused             //分组的子集有键盘焦点  Windows Vista only.
                ];
        SubsetTitle := '子集标题';
        Subtitle := '子标题';
        TitleImage := -1;                         //关联 GroupHeaderImages图像列表,only on Windows Vista
        TopDescription := '顶部的说明文字';
     end;
     with Groups.Add do
     begin
       GroupID := 1;
       Header := '分组标题';
     end;
     GroupView := True;                            //打开或关闭分组视图
     HideSelection := True;                        //失去焦点时,项不再保持被选择状态
     HotTrack := False;                            //指定是否鼠标移过项进行高亮
     HotTrackStyles := [
                    //  htHandPoint,               //手势
                    //  htUnderlineCold,           //非热点下划线
                    //  htUnderlineHot             //下划线热点
                       ];
     HoverTime := -1;                              //鼠标在项上暂停时间,除非HotTrack为True
     with IconOptions do                           //确定如何排列图标,vsIcon or vsSmallIcons 有效
     begin
       Arrangement := iaTop;                       //项在顶部从左到右对齐,iaLeft在左部从上到下对齐
       AutoArrange := False;                       //图标自动重新排列
       WrapText := True;                           //图标标题是否折行
     end;
     with Items.Add do                             //增加项
     begin
       Caption := '张三';
       ImageIndex := -1;                           //关联 LargeImages or SmallImages图像列表
       StateIndex := -1;                           //关联StateImages图像列表
       GroupID := 0;                               //关联分组ID号
       SubItems.Add('广州');                   //添加第二列
     end;
     with Items.Add do
     begin
       Caption := '李四';
       GroupID := 1;
       SubItems.Add('上海');
     end;
     LargeImages := nil;                            //大图标图像列表
     MultiSelect := False;                          //多选
     OwnerData := False;                            //指定列表视图控件是否是虚拟的
     OwnerDraw := False;                            //自绘项
     ParentColor := False;                          //继承父控件颜色
     ReadOnly := False;                             //只读
     RowSelect := False;                            //整行选择
     ShowColumnHeaders := True;                     //显示列头,vsReport有效
     ShowWorkAreas := False;                        //显示工作区,vsIcon or vsSmallIcon有效,不支持 OwnerData
     SmallImages := nil;                            //小图标图像列表
     SortType := stNone;                            //确定列表项如何自动排序
     StateImages := nil;                            //状态图像列表
     ViewStyle := vsReport;                         //视图风格,vsIcon、vsSmallIcon、vsList、vsReport
   end;
end;


{初始化,TList分组}
procedure TForm1.FormCreate(Sender: TObject);
begin

end;

{显示和隐藏列表头}
procedure TForm1.Button9Click(Sender: TObject);
var
  IsShow : Boolean;
begin
  IsShow := lv1.ShowColumnHeaders;//是否隐藏列表头
  lv1.ShowColumnHeaders := not IsShow;//取反
end;

{每2行交叉换颜色}
procedure TForm1.lv1CustomDrawItem(Sender: TCustomListView; Item: TListItem;
  State: TCustomDrawState; var DefaultDraw: Boolean);
begin
   if Item.Index mod 2 = 0 then//如果序号是2的倍数
    Sender.Canvas.Brush.Color :=clSkyBlue //蓝色
   else
    Sender.Canvas.Brush.Color :=clWhite;  //白色
end;
{读取数据}
procedure TForm1.Button5Click(Sender: TObject);
begin
  ShowMessage(lv1.Items[2].Caption) ; //读取某条数据标题
  ShowMessage(lv1.Items[2].SubItems.strings[1]) ;//读取第二行的第二子列(也就是第三列)
  ShowMessage(lv1.Items[2].SubItems.CommaText); //显示全部内容
  end;

{排列函数}
function CustomSortProc(Item1, Item2: TListItem; ColumnIndex: integer): integer; stdcall;
begin
  if ColumnIndex = 0 then //第0行
   Result := CompareText(Item1.Caption,Item2.Caption) //返回
  else
   Result := CompareText(Item1.SubItems[ColumnIndex-1],Item2.SubItems[ColumnIndex-1]);
end;
{点击每列头重新排列列表}
procedure TForm1.lv1ColumnClick(Sender: TObject; Column: TListColumn);
begin
  lv1.CustomSort(@CustomSortProc,Column.Index); //点击每行第一个排列
end;

end.

https://www.cnblogs.com/GodPan/p/3391193.html

相关阅读 >>

Delphi processid, process handle, window handle 之间的互相转换

Delphi 调用外部程序并等待其运行结束

Delphi fmx播放m4a声音文件

Delphi 监控系统文件操作

如何让dbgrid显示序号?

Delphi中禁止webbrowser右键的方法

Delphi 拼接文件路径

检测是否按下键盘或鼠标,如果超过5分钟没有操作则认为用户已经离开

dededl安卓中保持屏幕常亮

Delphi android检查互联网连接

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...