【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;我猜…

Kubernetes的有状态应用示例:使用StatefulSet部署Cassandra

文章目录 环境概述准备为Cassandra创建headless service验证Cassandra StatefulSet修改Cassandra StatefulSet清理Cassandra容器环境变量参考 环境 RHEL 9.3Docker Community 24.0.7minikube v1.32.0 概述 本例展示了如何在Kubernetes上运行Apache Cassandra。Cassandra是一…

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年新版基于阿里云搭建幻兽帕鲁服…

如何做餐饮业满意度调研

餐饮满意度调研是一种评估顾客对餐厅服务、菜品口感、环境和服务等方面满意度的重要手段。随着餐饮市场竞争的日益激烈&#xff0c;顾客满意度成为了餐饮企业竞争力的重要指标之一。通过这种调研&#xff0c;餐厅可以了解顾客的需求和期望&#xff0c;从而改进服务质量&#xf…

「Kafka」消费者篇

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

docker 离线安装镜像

一、导出镜像 下载完镜像后&#xff0c;我们需要将其导出为tar文件&#xff0c;以便在离线环境中使用。 执行以下命令导出镜像&#xff1a; docker save -o <保存路径>/<镜像名>_<版本>.tar <镜像名>:<版本>其中&#xff0c;<保存路径>是…

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…

【日常总结 - java】list 与 字符串(用逗号隔开)相互转换

一、list 转 字符串 第一种&#xff1a;使用谷歌Joiner方法 (推荐) 第二种&#xff1a;循环插入逗号 第三种&#xff1a;stream流 (推荐) 第四种&#xff1a;lambda表达式遍历并加入逗号 二、字符串 转 list 方法一&#xff1a;使用split()方法 方法二&#xff1a;使用C…

algo-桶排序

桶排序 桶排序是一种分布排序&#xff0c;将元素数组分到多个桶内&#xff0c;然后每个桶再分别进行排序。 其计算复杂度取决于对桶内排序所用算法、使用桶数量以及输入均匀度。 主要流程如下 建立空桶数组将原始数组发布到各桶中对非空桶进行排序按照顺序从非空桶里面收集…

一文讲透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 中断报警…

linux时钟类型

背景&#xff1a;在线程中使用wait时&#xff0c;中间修改了系统时间&#xff0c;线程一直阻塞&#xff0c;并未向下执行。 原因分析&#xff1a;wait等待时间采用了系统时间去等待&#xff0c;系统时间向后修改后&#xff0c;无法等到相应的时间点&#xff0c;从而导致线程阻…

解决Django应用部署时激活链接缺少端口号的问题

引言 在当今技术迅速发展的时代&#xff0c;前后端分离已经成为现代Web开发的一项标准实践。然而&#xff0c;当我们将这些先进的架构部署到生产环境时&#xff0c;常常会遇到一些预料之外的挑战。 问题说明 在一个典型的例子中&#xff0c;我在Windows环境下开发了一个采用…

离线环境怎么下载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给子…