XE7 & FMX 那些年我们一起上过的控件:ListView 之 (3) 加载数据时如何显示自定义样式
本文介绍一下ListView下如何加载数据、及使用进度条反馈当前进度给用户。
注意:
原创作品,请尊重作者劳动成果,转载请注明出处!!!原文永久固定地址:http://www.cnblogs.com/weii/p/4190719.html
我们先来看看效果图: 工程Demo下载

FMX异常强大,我们可以发挥想像,自定义进度样式,以下为本文参考代码:
TPie 和 TRoundRect 请注意引用 FMX.Objects

procedure TForm1.Button3Click(Sender: TObject);
var
pe: TPie; //扇形作进度
rc: TRoundRect; //矩形作背景
lb: TLabel; //标签显示百分比
begin
TThread.CreateAnonymousThread(
procedure()
var
i,j: integer;
t1,t2: cardinal;
t3: double;
begin
listView1.Items.Clear;
label1.Text:='';
i:=1000;
try
rc:=TRoundRect.Create(ListView1); //生成一个圆矩形,必须指定对象, ListView1 或 Form1
rc.Parent:=ListView1; //指定所属,必须的
rc.Width:=100; //宽
rc.Height:=100; //高
rc.Position.X:=(ListView1.Width-rc.Width)/2; //X坐标
rc.Position.Y:=(ListView1.Height-rc.Height)/2; //Y坐标
rc.Fill.Color:=TAlphaColorRec.Black; //矩形颜色
rc.Opacity:=0.4; //透明度
rc.Stroke.Thickness:=0; //边缘宽度
rc.Visible:=true; //可视
pe:=TPie.Create(rc); //生成一个扇形,必须指定对象,指定刚才的矩形
pe.Parent:=rc; //指定所属,必须的
pe.Width:=100; //宽
pe.Height:=100; //高
pe.Position.X:=0; //X坐标,指定0即可
pe.Position.Y:=-100; //Y坐标,指定-100
pe.Fill.Color:=TAlphaColorRec.Black; //扇形的颜色,由于还没有数据,所以这里设置和矩形背景一样颜色
pe.Opacity:=0.8; //透明度
pe.StartAngle:=0; //开始角度, 没有数据即为0度
pe.EndAngle:=360; //结束角度, 转一圈为360度
pe.RotationAngle:=270; //转动角度, 270度可指向12点钟方向
pe.RotationCenter.X:=1; //中心X坐标
pe.RotationCenter.Y:=1; //中心Y坐标
pe.Stroke.Thickness:=0; //边缘宽度
pe.Visible:=true; //可见
lb:=TLabel.Create(rc); //生成一个Label, 用于显示百分比进度, 必须指定对象
lb.Parent:=rc; //指定所属,必须的
lb.Width:=rc.Width; //宽度,取矩形宽度
lb.Height:=25; //高度
lb.Position.X:=0; //X坐标,由于下面设置了水平对齐,所以设0就可
lb.Position.Y:=rc.Height/2-10; //Y坐标,水平位置为矩形的一半高度,为效果显示更顺眼,减10px
lb.Align:=TAlignLayout.Horizontal; //水平对齐
lb.Text:='';
lb.TextSettings.HorzAlign:=TTextAlign.Center; //文字对齐方式,居中对齐
lb.Visible:=true; //可见
t1:=TThread.GetTickCount;
for j := 0 to i do begin //如果你是从数据库或内存表里取数据的,则应该如 for j:=0 to ClientDataSet.RecordCount-1 do 这样取
sleep(5); //停5ms,必须的,否则下面填数据时会卡菊花。这里看你CPU的强硬程度,5-20即可,手机用户需适当设置
TThread.Synchronize(TThread.CurrentThread,
procedure()
begin
ListView1.BeginUpdate; //开始写入,加入此句,可稍微提升数据填充效率,非必须
with ListView1.Items.Add do begin
text:='No: '+j.ToString;
t2:=TThread.GetTickCount;
t3:=(t2-t1)/1000;
detail:=Format('耗时:%f 秒',[t3]);
end;
ListView1.ScrollTo(j); //滚动到本行,可马上看到填充结果,非必须
ListView1.EndUpdate; //结束写入,非必须
Label1.Text:=Format('[ 进度:%d / %d ]',[j,i]);
end
);
TThread.Synchronize(TThread.CurrentThread,
procedure()
begin
pe.fill.Color := TAlphaColorRec.Aliceblue; //自定义进度开始,定义另一种颜色,可区别出进度,当然,如果扇形的透明度比矩形背景高的话也可不设置
pe.EndAngle:=j*360/i; //转动角度,转换后相当于当前进度
lb.Text:=Format('%f',[j/i*100])+'%'; //Label显示当前进度
end
);
end;
finally
lb.Visible:=false; //完成填充后,隐藏
pe.Visible:=false; //完成填充后,隐藏
rc.Visible:=false; //完成填充后,隐藏
lb.Free; //释放
pe.Free; //释放
rc.Free; //释放
end;
end).start;
end;

以上只是简单表示一下思路,各位可以发挥想像处理得更好。
谢谢关注本文。
PS:
---------------------------------------------------------------
FireMonkey移动开发可加QQ群:165232328 (本人非管理员,仅仅其中一成员,此群高手林立,期待各位Delphi爱好者共同交流)。
XE7 & FMX 那些年我们一起上过的控件:ListView 之 (3) 加载数据时如何显示自定义样式的更多相关文章
- XE7 & FMX 那些年我们一起上过的控件:StringGrid 之(1) 自定义标题样式
FMX下的Grid类控件似乎不太尽如人意,可能是和官方的资料没有跟得上它的发行版本有关系. 以下讨论StringGrid的列表头及对齐方式. 先上个效果图: FMX的列表头估计很多人都是用盒子上流传甚 ...
- 背水一战 Windows 10 (64) - 控件(WebView): 加载指定 HttpMethod 的请求, 自定义请求的 http header, app 与 js 的交互
[源码下载] 背水一战 Windows 10 (64) - 控件(WebView): 加载指定 HttpMethod 的请求, 自定义请求的 http header, app 与 js 的交互 作者: ...
- Winform开发框架之客户关系管理系统(CRM)的开发总结系列4-Tab控件页面的动态加载
在前面介绍的几篇关于CRM系统的开发随笔中,里面都整合了多个页面的功能,包括多文档界面,以及客户相关信息的页面展示,这个模块就是利用DevExpress控件的XtraTabPage控件的动态加载实现的 ...
- 控件WebView网页的加载
Android:控件WebView网页的加载 WebView可以使得网页轻松的内嵌到app里,还可以直接跟js相互调用. webview有两个方法:setWebChromeClient 和 setWe ...
- 重新想象 Windows 8.1 Store Apps (81) - 控件增强: WebView 之加载本地 html, 智能替换 html 中的 url 引用, 通过 Share Contract 分享 WebView 中的内容, 为 WebView 截图
[源码下载] 重新想象 Windows 8.1 Store Apps (81) - 控件增强: WebView 之加载本地 html, 智能替换 html 中的 url 引用, 通过 Share Co ...
- Swift - 网页控件(UIWebView)加载本地数据,文件
使用UIWebView加载本地数据或资源有如下三种方式: 1,使用loadHTMLString方法加载HTML内容 2,使用loadRequest方法加载本地资源(也可用于加载服务器资源) 3,先将内 ...
- easyui中 combogrid控件的loadData方法加载本地数据
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- android 自定义控件之NetWorkImageView 处理listview等控件中的图片加载乱序问题
0.调用: BaseAdapter中设置方法 holder.iv.loadImage(url); adapter_xxx.xml 中 控件需要用 xxx.NetWorkImageView 1 NetW ...
- ActiveX 控件和 Web 浏览器加载项
百度ActiveX的概念. 如何从零开始写一个 Chrome 扩展 360极速浏览器应用开发平台.
随机推荐
- Java中方法的重写
★★前提:方法的重写建立在继承关系上★★ 在Java程序中,类的继承关系可以产生一个子类,子类继承父类,它具备了父类所有的特征,继承了父类所有的方法和变量. 所谓方法的重写是指子类中的方法与父类中继承 ...
- RTTI(运行时类型识别)
运行时类型识别(Run-time type identification , RTTI),是指在只有一个指向基类的指针或引用时,确定所指对象的准确类型的操作.其常被说成是C++的四大扩展之一(其他三个 ...
- 基于稀疏表(Sparse Table)的RMQ(区间最值问题)
在RMQ的其他实现方法中,有一种叫做ST的算法比较常见. [构建] dp[i][j]表示的是从i起连续的2j个数xi,xi+1,xi+2,...xi+2j-1( 区间为[i,i+2j-1] )的最值. ...
- MySQL中的联结表
使用联结能够实现用一条SELECT语句检索出存储在多个表中的数据.联结是一种机制,用来在一条SELECT语句中关联表,不是物理实体,其在实际的数据库表中并不存在,DBMS会根据需要建立联结,且会在查询 ...
- 子数整数(P1151&NOIP水题测试(2017082301))
题目链接:子数整数 水题,不解释,自己看代码: #include<bits/stdc++.h> using namespace std; int main(){ int k; scanf( ...
- JS高级-***Function- ***OOP
1. ***Function 作用域(scope): 什么是: 一个变量的使用范围 为什么: 避免函数内外的变量间互相影响 包括: 2种: 1. 全局作用域: window 保存着全局变量: 随处可用 ...
- 20175316盛茂淞-Java第1周学习总结
20175316盛茂淞 2018-2019-2 <Java程序设计>第1周学习总结 教材学习内容总结 Java入门 1.Java简介(地位,特点) 2.安装JDK,设置系统环境 3.编译J ...
- django之content_type
什么是content type:django内置的一个组件,这个组件帮忙做连表的操作.(混搭连表) 适用场景:适用于一张表与多张表同时做关联的时候.直接导入就可以使用了. 关联数据库说有的表:让我们可 ...
- kvm虚拟化平台搭建
一.虚拟化 虚拟化是指计算机元件在虚拟的基础上而不是真实的基础上运行.虚拟化技术可以扩大硬件的容量,简化软件的重新配置过程.CPU的虚拟化技术可以单CPU模 拟多CPU并行,允许一个平台同时运行多个操 ...
- 微信小程序的新的
app.request.get('http://ele.kassing.cn/v1/pois',this.data.city).then(res=>{ console.log(res) this ...