本文介绍一下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) 加载数据时如何显示自定义样式的更多相关文章

  1. XE7 & FMX 那些年我们一起上过的控件:StringGrid 之(1) 自定义标题样式

    FMX下的Grid类控件似乎不太尽如人意,可能是和官方的资料没有跟得上它的发行版本有关系. 以下讨论StringGrid的列表头及对齐方式. 先上个效果图: FMX的列表头估计很多人都是用盒子上流传甚 ...

  2. 背水一战 Windows 10 (64) - 控件(WebView): 加载指定 HttpMethod 的请求, 自定义请求的 http header, app 与 js 的交互

    [源码下载] 背水一战 Windows 10 (64) - 控件(WebView): 加载指定 HttpMethod 的请求, 自定义请求的 http header, app 与 js 的交互 作者: ...

  3. Winform开发框架之客户关系管理系统(CRM)的开发总结系列4-Tab控件页面的动态加载

    在前面介绍的几篇关于CRM系统的开发随笔中,里面都整合了多个页面的功能,包括多文档界面,以及客户相关信息的页面展示,这个模块就是利用DevExpress控件的XtraTabPage控件的动态加载实现的 ...

  4. 控件WebView网页的加载

    Android:控件WebView网页的加载 WebView可以使得网页轻松的内嵌到app里,还可以直接跟js相互调用. webview有两个方法:setWebChromeClient 和 setWe ...

  5. 重新想象 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 ...

  6. Swift - 网页控件(UIWebView)加载本地数据,文件

    使用UIWebView加载本地数据或资源有如下三种方式: 1,使用loadHTMLString方法加载HTML内容 2,使用loadRequest方法加载本地资源(也可用于加载服务器资源) 3,先将内 ...

  7. easyui中 combogrid控件的loadData方法加载本地数据

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. android 自定义控件之NetWorkImageView 处理listview等控件中的图片加载乱序问题

    0.调用: BaseAdapter中设置方法 holder.iv.loadImage(url); adapter_xxx.xml 中 控件需要用 xxx.NetWorkImageView 1 NetW ...

  9. ActiveX 控件和 Web 浏览器加载项

    百度ActiveX的概念. 如何从零开始写一个 Chrome 扩展 360极速浏览器应用开发平台.

随机推荐

  1. Python数据库工具类MySQLdb使用

    MySQLdb模块用于连接mysql数据库. 基本操作 # -*- coding: utf-8 -*-       #mysqldb       import time, MySQLdb       ...

  2. 采用JavaMelody监控Tomcat服务——安装手册

    #1.获取安装包 .zip mv probe.war <tomcat dir>/webapps #3.设置tomcat用户信息 vi <tomcat dir>/conf/tom ...

  3. $(QTDIR);$(QTDIR)\include\QtCore;$(QTDIR)\include;

    $(QTDIR); 在系统环境变量中定义即可  vs属性中设置头文件路径

  4. Python之路(第十三篇)time模块、random模块、string模块、验证码练习

    一.time模块 三种时间表示 在Python中,通常有这几种方式来表示时间: 时间戳(timestamp) : 通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量.(从 ...

  5. Clover相关知识

    -f 重建驱动缓存 darkwake=4 有深度睡眠有关的设置,不懂 kext-dev-mode=1 启用第三方驱动,比较重要. dart=0 修复因开启 VT-d 导致系统启动时SMC五国错误,系统 ...

  6. Linux学习笔记:JDK安装

    系统为CentOS 7,安装Oracle jdk1.8 卸载系统自带的Openjdk(若无可跳过这一步,可以通过 java -version 查看),步骤是:查找Openjdk,卸载Openjdk r ...

  7. response输出随机图片、定时刷新网页

    第一招:利用response向浏览器输出图片: //获取验证码 在<img />标签内的src属性设为请求路径/verifyCode?goodsId=xxx&token=xxxxx ...

  8. CSS-弹性布局-伪类选择器-复杂选择器

    1.定位 1.堆叠顺序 一旦将元素变为已定位元素的话,元素们则有可能出现堆叠的效果. 如何改变堆叠顺序? 属性:z-index 取值:无单位的数字,数字越大越靠上. 注意: 1.父子元素间,z-ind ...

  9. keras框架的CNN手写数字识别MNIST

    参考:林大贵.TensorFlow+Keras深度学习人工智能实践应用[M].北京:清华大学出版社,2018. 首先在命令行中写入 activate tensorflow和jupyter notebo ...

  10. Mysql导入excel数据,解决某些特殊字符乱码问题

    问题 做项目需要从excel表格导入到mysql的数据库表中,excel表格中的“规格”字段的“×”符号导入数据库表中,会出现部分数据的“×”这个符号会乱码,成“?”的形式. 解决方法 打开excel ...