本文介绍一下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. Nowcoder OI赛制测试2 F 假的数学题 - 斯特林公式 + 二分

    Description 给定$X$, 找到最小的$N$ 使得$N! > X^X$ 数据范围:  $x <= 1e11$ Solution $X^X$ 太大, 高精也存不过, 所以取对数 : ...

  2. ES6 中 let and const

    let 和 const 命令 let 命令 基本用法 ES6 新增了let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效. { let a = 10; v ...

  3. linux日志查找技巧

    1.查找日志最后10行 tail -n test.log 查询日志尾部最后10行的日志; 2.关键词查询 grep '2014-12-17 16:17:20' test.log

  4. There are stopped jobs

    问题背景 系统:ubuntu,当输入exit退出shell时,出现There are stopped jobs 无法退出shell 解决办法 找到这个stopped job然后终止它 jobs 或者 ...

  5. 让UI设计师崩溃的瞬间,你经历过哪些?

    隔行如隔山,这句话人人耳熟能详,但其实隔行并不可怕,大家各谋其事,各尽其职,倒也互不打扰,真正可怕的是,是内行还要受外行指点江山,而最难的部分,便是那沟通.流畅的沟通,和声细语,是有如时雨之化者:无效 ...

  6. Subarray Sum Equals K LT560

    Given an array of integers and an integer k, you need to find the total number of continuous subarra ...

  7. 动态代理jdk和cglib的区别

    学习来源贴:http://www.cnblogs.com/jqyp/archive/2010/08/20/1805041.html JDK实现动态代理需要实现类通过接口定义业务方法,对于没有接口的类, ...

  8. javase高级技术 - 反射

    在说反射之前,必须得先说说java的类加载器,类加载器的定义:将.class文件加载到内在中,并为之生成对应的Class对象. 一般有三种 1 Bootstrap ClassLoader 根类加载器也 ...

  9. rbtposeekf的注意事项

    1.发布的odom topic以及 imu topic必须加上协方差部分:2.在发布odom的时候,去掉里面的odom->base_link的tf,因为这个tf会在robot_pose_ekf包 ...

  10. 【Linux】DNS基础(一)

    DNS基础 DNS 是计算机域名系统 (Domain Name System 或Domain Name Service) 的缩写,域名服务器是进行域名(domain name)和与之相对应的IP地址 ...