【Delphi 基础知识 28】ListView控件的详细使用

文章目录

    • 控件设置
    • 增加数据
    • 删除选中的行
    • 按标题删除
    • 读取某行某列内容
    • 修改某行某列内容
    • 清空内容
    • 设置焦点
    • 上下移动条目
    • 读出选中行信息
    • 点击正反排序
    • 每行item显示不一样的颜色

控件设置

  • ViewStyle 设为vsReport
  • ReadOnly 设为True
  • GridLines 设为True
  • RowSelect 设为True
    在这里插入图片描述

增加数据

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

删除选中的行

vari : integer;
beginfor i:=ListView1.Items.Count-1 downto 0 do  //直接用to会报错if ListView1.Items[i].Selected then //i=ListView1.Selected.indexbeginListView1.Items.Delete(i); //删除当前选中行end;
end;

按标题删除

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

读取某行某列内容

beginEdit1.Text := listview1.Items[0].Caption; //读第i行第1列Edit2.Text := listview1.Items[0].SubItems.strings[0]; //读第i行第2列Edit3.Text := listview1.Items[0].SubItems.strings[1]; //读第i行第3列
end;

修改某行某列内容

begin//必须原先存在数据,才能去修改,可以用Add('')新建数据初始化listview1.Items[0].Caption:= Edit1.Text;listview1.Items[0].SubItems.strings[0]:= Edit2.Text;listview1.Items[0].SubItems.strings[1]:= Edit3.Text;
end;

清空内容

beginListView1.Clear;
end;

设置焦点

//类似手动选中某一行
beginListView1.SetFocus;ListView1.ItemIndex:=3;
end;

上下移动条目

procedure ListViewItemMoveUpDown(lv: TListView; Item: TListItem; MoveUp, SetFocus: Boolean);
varDestItem: TListItem;
beginif (Item = nil) or ((Item.Index - 1 < 0) and MoveUp) or ((Item.Index + 1 >= lv.Items.Count) and (not MoveUp)) thenExit;lv.Items.BeginUpdate;tryif MoveUp thenDestItem := lv.Items.Insert(Item.Index - 1)elseDestItem := lv.Items.Insert(Item.Index + 2);DestItem.Assign(Item);lv.Selected := DestItem;Item.Free;finallylv.Items.EndUpdate;end;if SetFocus thenlv.SetFocus;DestItem.MakeVisible(False);
end;procedure TForm3.Button8Click(Sender: TObject);
beginListViewItemMoveUpDown(ListView1, ListView1.Selected, True, True);//上移
end;procedure TForm3.Button9Click(Sender: TObject);
beginListViewItemMoveUpDown(ListView1, ListView1.Selected, False, True);//下移
end;

读出选中行信息

vari: integer;
beginif ListView1.Selected <> nil thenbeginmemo1.Lines.Add('Caption:' + ListView1.Selected.Caption);for I := 0 to ListView1.Selected.SubItems.Count-1 dobeginmemo1.Lines.Add('SubItems:' + ListView1.Selected.SubItems[i]);end;end;
end;

点击正反排序

m_bSort: boolean = false; // 控制正反排序的变量function CustomSortProc(Item1, Item2: TListItem; ParamSort: integer): integer; stdcall;
vartxt1, txt2: string;Num1, Num2: Integer;
beginif ParamSort <> 0 then  //点击subItemsbegintrytxt1 := Item1.SubItems.strings[ParamSort - 1];txt2 := Item2.SubItems.strings[ParamSort - 1];if m_bSort thenbeginResult := CompareText(txt1, txt2);end else beginResult := -CompareText(txt1, txt2);end;exceptend;endelse   //点击captionbegintxt1:= Item1.Caption;txt2:= Item2.Caption;// 将字符串转换为数字Num1 := StrToIntDef(txt1, MaxInt);Num2 := StrToIntDef(txt2, MaxInt);// 进行数字比较Result := Num1 - Num2;//如果都不是数字安装默认排序法排序if (Num1 = MaxInt) and (Num2 = MaxInt) thenResult := AnsiCompareText(txt1, txt2);if m_bSort thenbeginResult:= -Result;endend;
end;procedure TForm3.ListView1ColumnClick(Sender: TObject; Column: TListColumn);
beginListView1.CustomSort(@CustomSortProc, Column.Index);m_bSort := not m_bSort;
end;

每行item显示不一样的颜色

添加AdvancedCustomDrawItem事件

procedure TForm3.ListView1AdvancedCustomDrawItem(Sender: TCustomListView; Item: TListItem;State: TCustomDrawState; Stage: TCustomDrawStage; var DefaultDraw: Boolean);
beginif Odd(Item.Caption.ToInteger)  thenbeginSender.Canvas.Font.Color := clWindowText;Sender.Canvas.Font.Name := '宋体';Sender.Canvas.Font.Size := 12;Sender.Canvas.Brush.Color := $d0d0f2;endelsebeginSender.Canvas.Font.Color := clWindowText;Sender.Canvas.Font.Name := '宋体';Sender.Canvas.Font.Size := 12;Sender.Canvas.Brush.Color := $e6c8c8;end
end;

最后上个Demo合照,点击下载Demo源码
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/668641.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《Redis核心技术与实战》学习笔记0——开篇词 | 这样学Redis,才能技高一筹

开篇词 | 这样学Redis&#xff0c;才能技高一筹 文章目录 开篇词 | 这样学Redis&#xff0c;才能技高一筹为什么懂得了一个个技术点&#xff0c;却依然用不好 Redis&#xff1f; 作为键值数据库&#xff0c;Redis 的应用非常广泛&#xff0c;如果你是后端工程师&#xff0c;我猜…

RCS-YOLO复现

复现结果–Precision&#xff1a;0.941&#xff0c;Recall&#xff1a;0.945&#xff0c;AP 50 _{50} 50​&#xff1a;0.941&#xff0c;AP 50 : 95 _{50:95} 50:95​&#xff1a;0.693&#xff0c;误差在5个点内&#xff0c;可以接受 感想 第5篇完全复现的论文

Palworld幻兽帕鲁自建服务器32人联机开黑!

玩转幻兽帕鲁服务器&#xff0c;阿里云推出新手0基础一键部署幻兽帕鲁服务器教程&#xff0c;傻瓜式一键部署&#xff0c;3分钟即可成功创建一台Palworld专属服务器&#xff0c;成本仅需26元&#xff0c;阿里云服务器网aliyunfuwuqi.com分享2024年新版基于阿里云搭建幻兽帕鲁服…

「Kafka」消费者篇

「Kafka」消费者篇 Kafka 消费方式 Kafka 消费者工作流程 消费者总体工作流程 新版本&#xff08;0.9之后&#xff09;的 offset 保存在 kafka 的 Topic 里&#xff0c;持久化到磁盘&#xff0c;可靠性有保障。 老版本&#xff08;0.9之前&#xff09;的 offset 保存在 Zook…

uniapp中配置开发环境和生产环境

uniapp在开发的时候&#xff0c;可以配置多种环境&#xff0c;用于自动切换IP地址&#xff0c;用HBuilder X直接运行的就是开发环境&#xff0c;用HBuilder X发布出来的&#xff0c;就是生产环境。 1.使用HBuilder X创建原生的uniapp程序 选择vue3 2.什么都不改&#xff0c;就…

机器学习复习(8)——基本概念

目录 "benchmark"和"baseline"的定义和区别 R1 score概念 LoRA微调概念 "benchmark"和"baseline"的定义和区别 在计算机视觉领域的论文中&#xff0c;"benchmark"和"baseline"这两个术语经常被使用&#xff0…

一文讲透ast.literal_eval() eval() json.loads()

文章目录 一文讲透ast.literal_eval() eval() json.loads()1. ast.literal_eval()2. eval()3. json.loads()4. 总结 一文讲透ast.literal_eval() eval() json.loads() 在Python库中&#xff0c;我们经常会遇到需要将字符串转换为相应对象或数据结构的情况。在这种情况下&#…

ShardingSphere 5.x 系列【5】Spring Boot 3 集成并实现读写分离

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Spring Boot 版本 3.1.0 本系列ShardingSphere 版本 5.4.0 源码地址&#xff1a;https://gitee.com/pearl-organization/study-sharding-sphere-demo 文章目录 1. 概述2. 使用限制3. 案例演示3.…

ReactNative实现文本渐变

我们直接上图&#xff0c;可以看到上面文本的效果&#xff0c;使用SVG实现 1.首先还是要引入react-native-svg库 2.使用该库下面的LinearGradient和Text 好&#xff0c;话不多说&#xff0c;我们看具体代码 <Svg width{422} height{30} viewBox{0 0 422 30}><Defs&…

linux i2c驱动实例之ISL29035

目录 概述 1 认识ISL29035 1.1 ISL29035特征 1.2 ISL29035工作电路 1.3 ISL29035工作时序分析 1.4 ISL29035相关的寄存器 1.4.1 COMMAND-1( 0x00 ) 1.4.2 COMMAND-11&#xff08;0x01&#xff09; 1.4.3 DATA寄存器&#xff08;0x02和0x03&#xff09; 1.4.4 中断报警…

离线环境怎么下载python依赖包

公司内网环境无网络&#xff0c;运行自动化脚本需要安装python模块 1、脚本依赖包及其版本获取&#xff0c;记录在requirements.txt中 pipreqs ./script --encodingutf8 requirements.txt注意&#xff0c;这里是将./script 里的python模块自动扫描并写入到requirements.txt中…

假期刷题打卡--Day23

1、MT1190分数乘法 输入5组分数&#xff0c;对他们进行乘法运算&#xff0c;输出结果。不考虑分母为0等特殊情况。 格式 输入格式&#xff1a; 输入整型&#xff0c;每组一行&#xff0c;如样例所示。 输出格式&#xff1a; 输出计算结果实型&#xff0c;如样例所示。 样…

[Vue3]父子组件相互传值数据同步

简介 vue3中使用setup语法糖&#xff0c;父子组件之间相互传递数据及数据同步问题 文章目录 简介父传子props传递值 使用v-bind绑定props需要计算toRefcomputed emit传递方法 使用v-on绑定 子传父expose v-model总结 父传子 props传递值 使用v-bind绑定 父组件通过props给子…

Python基础知识:Python与序列相关的内置函数

与序列相关的内置函数如表所示。 与序列相关的内置函数 函数的作用 len(seq) 计算序列的长度&#xff08;包含多少个元素&#xff09; max(seq) 查找序列中的最大元素 min(seq) 查找序列中的最小元素 list(seq) 将序列转换为列表&#xff0c;注意不能转换字典 str(se…

openGauss学习笔记-214 openGauss 性能调优-确定性能调优范围

文章目录 openGauss学习笔记-214 openGauss 性能调优-确定性能调优范围214.1 性能因素214.2 调优范围确定 openGauss学习笔记-214 openGauss 性能调优-确定性能调优范围 数据库性能调优通常发生在用户对业务的执行效率不满意&#xff0c;期望通过调优加快业务执行的情况下。正…

两种方式实现文本超出指定行数显示展开收起...

需要实现这样一个功能 默认高度下文本超出隐藏&#xff0c;点击展开可查看所有内容&#xff0c;点击收起可折叠 方法一&#xff1a;通过html和css实现 代码部分 html:<div className"expand-fold"><input id"check-box" type"checkbox&qu…

Camunda会签、或签、比例签

&#x1f496;专栏简介 ✔️本专栏将从Camunda(卡蒙达) 7中的关键概念到实现中国式工作流相关功能。 ✔️文章中只包含演示核心代码及测试数据&#xff0c;完整代码可查看作者的开源项目snail-camunda ✔️请给snail-camunda 点颗星吧&#x1f618; &#x1f496;说在前面 …

EasyX图形库学习(二、文字输出)

目录 一、文字绘制函数 字体属性结构体:logfont 文字输出 outtextxy 在指定位置输出字符串。 ​编辑 但如果直接使用,可能有以下报错&#xff1a; 三种解决方案&#xff1a; 将一个int类型的分数,输出到图形界面上 如果直接使用&#xff1a; 会把score输入进去根据A…

ROS从入门到精通4-1:Docker安装与常用命令总结

目录 0 专栏介绍1 Docker与机器人应用2 Docker安装步骤3 Docker常用命令3.1 创建与启动容器3.2 暂停与删除容器3.3 容器文件拷贝3.4 构建镜像与上下文 0 专栏介绍 本专栏旨在通过对ROS的系统学习&#xff0c;掌握ROS底层基本分布式原理&#xff0c;并具有机器人建模和应用ROS进…

【文件增量备份系统】前端项目构建

文章目录 创建项目安装项目依赖引入element plus组件下载组件在main.js中使用组件测试 整合路由router下载组件创建路由管理器index.js使用路由App.vue上面使用 <router-view />测试 整合axios下载组件工具类axiosRequest.js工具类使用 创建项目 damwangrunqindeMBP dev…