zoukankan      html  css  js  c++  java
  • Delphi ListView基本用法大全

    //增加项或列(字段)

    ListView1.Clear;
    ListView1.Columns.Clear;
    ListView1.Columns.Add;
    ListView1.Columns.Add;
    ListView1.Columns.Add;
    ListView1.Columns.Items[0].Caption := ' id' ;
    ListView1.Columns.Items[1].Caption := ' type' ;
    ListView1.Columns.Items[2].Caption := ' title' ;
    ListView1.Columns.Items[2].Width := 300;
    Listview1.ViewStyle := vsreport;
    Listview1.GridLines := true; //注:此处代码也可以直接在可视化编辑器中完成,

    也可写成以下这样

    begin
      with listview1 do
      begin
        Columns.Add;
        Columns.Add;
        Columns.Add;
        ViewStyle := vsreport;
        GridLines := true;
        columns.items[0].caption := ' 进程名' ;
        columns.items[1].caption := ' 进程ID' ;
        columns.items[2].caption := ' 进程文件路径' ;
        Columns.Items[0].Width := 100;
        Columns.Items[1].Width := 100;
        Columns.Items[2].Width := 150;
      end
    end;


    //增加记录
    with listview1.items.add do
    begin
      caption := ' 1212 ' ;
      subitems.add(' hh1' );
      subitems.add(' hh2' );
    end;

    //删除
    listview1.items.delete(0);

    //从数据库表里读取数据写入Listview

    var
      Titem: Tlistitem; //此处一定要预定义临时记录存储变量.
    begin
      ListView1.Items.Clear;
      with adoquery1 do
      begin
        close;
        sql.Clear;
        sql.Add(' select spmc, jg, sl from kcxs' );
        Open;
        ListView1.Items.Clear;
        while not eof do
        begin
          Titem := ListView1.Items.add;
          Titem.Caption := FieldByName(' spmc' ).Value;
          Titem.SubItems.Add(FieldByName(' sl' ).Value);
          Titem.SubItems.Add(FieldByName(' jg' ).Value);
          next;
        end;

    //删除
        ListView1.DeleteSelected;

    //如何取得ListView中选中行的某一列的值

    procedure TForm1.Button2Click(Sender: TObject);
    begin
      ShowMessage(ListView1.Selected.SubItems.Strings[1]); //返回选中行第三列中的值
    end;

    showMessage(listView1.Selected.Caption); //返回选中行第一列的值.

    1列的值: - - > > > ListView1.Selected.Caption
      第i列的值(i > 1): - - > > > ListView1.Selected.SubItems.Strings[i]

    ListView1.Items.Item[1].SubItems.GetText); //取得listview某行某列的值

    Edit2.Text := listview1.Items[i].SubItems.strings[0]; //读第i行第2列

    返回选中行所有子列值.是以回车符分开的,你还要从中剥离出来你要的子列的值。

    showMessage(ListView1.Selected.SubItems.GetText);

    ListView 简单排序的实现

    ListView 排序


    怎样实现单击一下按升序, 再单击一下按降序。

    function CustomSortProc(Item1, Item2: TListItem; ColumnIndex: integer): integer; stdcall;
    begin
      if ColumnIndex = 0 then
        Result := CompareText(Item1.Caption, Item2.Caption)
      else
        Result := CompareText(Item1.SubItems[ColumnIndex - 1], Item2.SubItems[ColumnIndex - 1])
    end;

    procedure TFrmSrvrMain.ListView1ColumnClick(Sender: TObject;
      Column: TListColumn);
    begin
      ListView1.CustomSort(@CustomSortProc, Column.Index);
    end;


    = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

    //增加
    i := ListView1.Items.Count;
    with ListView1 do
    begin
      ListItem := Items.Add;
      ListItem.Caption := IntToStr(i);
      ListItem.SubItems.Add(' 第 ' +IntToStr(i) + ' 行' );
      ListItem.SubItems.Add(' 第三列内容' );
    end;

    //按标题删除
    for i := ListView1.Items.Count - 1 downto 0 do
      if ListView1.Items[i].Caption = Edit1.Text then
      begin
        ListView1.Items.Item[i].Delete(); //删除当前选中行
      end;

    //选中一行
    if ListView1.Selected <> nil then
      Edit1.Text := ListView1.Selected.Caption;


    // listview1.Items[Listview1.Items.Count -1].Selected := True;
    // listview1.Items[Listview1.Items.Count -1].MakeVisible(True);

    procedure TForm1.Button2Click(Sender: TObject); // 选择第一条
    begin
      listview1.SetFocus;
      listview1.Items[0].Selected := True;
    end;

    procedure TForm1.Button1Click(Sender: TObject); // 选择最后一条
    begin
      listview1.SetFocus;
      listview1.Items[Listview1.Items.Count - 1].Selected := True;
    end;

    //这是个通用的过程

    procedure ListViewItemMoveUpDown(lv: TListView; Item: TListItem; MoveUp, SetFocus: Boolean);
    var
      DestItem: TListItem;
    begin
      if (Item = nil) or
        ((Item.Index - 1 < 0) and MoveUp) or
        ((Item.Index + 1 >= lv.Items.Count) and (not MoveUp))
        then Exit;
      lv.Items.BeginUpdate;
      try
        if MoveUp then
          DestItem := lv.Items.Insert(Item.Index - 1)
        else
          DestItem := lv.Items.Insert(Item.Index + 2);
        DestItem.Assign(Item);
        lv.Selected := DestItem;
        Item.Free;
      finally
        lv.Items.EndUpdate;
      end;
      if SetFocus then lv.SetFocus;
      DestItem.MakeVisible(False);
    end;

    //此为调用过程,可以任意指定要移动的Item,下面是当前(Selected)Item
    ListViewItemMoveUpDown(ListView1, ListView1.Selected, True, True); //上移
    ListViewItemMoveUpDown(ListView1, ListView1.Selected, False, True); //下移


    TListView组件使用方法

    引用CommCtrl单元

    procedure TForm1.Button1Click(Sender: TObject);
    begin
      ListView_DeleteColumn(MyListView.Handle, i); //i是要删除的列的序号,从0开始

    end;

    LISTVIEW显示表中的信息:

    procedure viewchange(listv: tlistview; table: tcustomadodataset; var i: integer);
    begin
      tlistview(listv).Items.BeginUpdate; {listv:listview名}
      try
        tlistview(listv).Items.Clear;
        with table do {table or query名}
        begin
          active := true;
          first;
          while not eof do
          begin
            listitem := tlistview(listv).Items.add;
            listitem.Caption := trim(table.fields[i].asstring);
    // listitem.ImageIndex:=8;
            next;
          end;
        end;
      finally
        tlistview(listv).Items.EndUpdate;
      end;
    end;



    ListView使用中的一些要点。以下以一个两列的ListView为例。
    →增加一行:
    with ListView1 do
    begin
      ListItem := Items.Add;
      ListItem.Caption := &apos; 第一列内容&apos; ;
      ListItem.SubItems.Add(&apos; 第二列内容&apos; );
    end;
    →清空ListView1
    ListView1.Items.Clear;
    →得到当前被选中行的行的行号以及删除当前行:
    for i := 0 to ListView1.Items.Count - 1 do
      if ListView1.Items[i].Selected then //i=ListView1.Selected.index
      begin
        ListView1.Items.Delete(i); //删除当前选中行
      end;
    当然,ListViewOnSelectItem事件, 可以判断选择了哪行, 用个全局变量把它赋值出来。
    →读某行某列的操作:
    Edit1.Text := listview1.Items[i].Caption; //读第i行第1列
    Edit2.Text := listview1.Items[i].SubItems.strings[0]; //读第i行第2列
    Edit3.Text := listview1.Items[i].SubItems.strings[1]; //读第i行第3列
    以次类推,可以用循环读出整列。
    →将焦点上移一行:
    for i := 0 to ListView1.Items.Count - 1 do
      if (ListView1.Items[i].Selected) and (i > 0) then
      begin
        ListView1.SetFocus;
        ListView1.Items.Item[i - 1].Selected := True;
      end;
    不过在Delphi6中,ListView多了一个ItemIndex属性,所以只要
    ListView1.SetFocus;
    ListView1.ItemIndex := 3;
    就能设定焦点了。


    Delphilistview能实现交替颜色么?

    procedure TForm1.ListView1CustomDrawItem(
      Sender: TCustomListView; Item: TListItem; State: TCustomDrawState;
      var DefaultDraw: Boolean);
    var
      i: integer;
    begin
      i := (Sender as TListView).Items.IndexOf(Item);
      if odd(i) then sender.Canvas.Brush.Color := $02E0F0D7
      else sender.Canvas.Brush.Color := $02F0EED7;
      Sender.Canvas.FillRect(Item.DisplayRect(drIcon));
    end;

    来源: < http: //blog.csdn.net/lenglengdeyu/article/details/2972804>
     




  • 相关阅读:
    Ducking
    MINITAB(二)
    JFreechart
    linux命令0424
    JAVA哈哈镜
    HTML(四)
    The 3n+1 problem
    [转载]:【读书笔记】.NET本质论
    ER图基本步骤
    [从架构到设计]第一回:设计,应该多一点(转载)
  • 原文地址:https://www.cnblogs.com/xe2011/p/3365795.html
Copyright © 2011-2022 走看看