本文介绍一下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. Tinyos学习笔记(二)

    1.TinyOS communication tools java serialApp -comm serial@/dev/ttyUSB0:telosb java net.tinyos.tools.L ...

  2. ASCII码表以及不同进制间的O(1)转换

    ASCII码表以及不同进制间的O(1)转换          一.ASCII码表 ASCII全称为American Standard Code for Information Interchange, ...

  3. swift 中使用weak self

    request.responseString(encoding: NSUTF8StringEncoding) {[weak self] (res) -> Void in if let stron ...

  4. js使用sessionStorage、cookie保存token

    本文是参考别人的博客写的,图片直接用的别人的 1.Token:token是客户端频繁向服务器端请求数据,服务器频繁的去数据库查询用户名和密码进行对比,判断用户名和密码正确与否,并作出相应的提示,在这样 ...

  5. 《MinDoc 接口文档在线管理系统》

    项目简介 MinDoc 是一款针对IT团队开发的简单好用的文档管理系统. MinDoc 的前身是 SmartWiki 文档系统.SmartWiki 是基于 PHP 框架 laravel 开发的一款文档 ...

  6. VB.NET and C# 差异

    VB.NET Program Structure C# Imports System Namespace Hello    Class HelloWorld       Overloads Share ...

  7. python的数字图像处理学习(1)

    导入原有的测试图片,测试图片路径,和一些方法,显示出测试图像,测试图像路径. from skimage import io,data,data_dir img_rgb=data.chelsea() i ...

  8. 一道另类的区间dp题 -- P3147 [USACO16OPEN]262144

    https://www.luogu.org/problemnew/show/P3147 此题与上一题完全一样,唯一不一样的就是数据范围; 上一题是248,而这一题是262144; 普通的区间dp表示状 ...

  9. 2019.01.23 hdu1964 Pipes(轮廓线dp)

    传送门 题意简述:给一个没有障碍的网格图,任意两个格子连通需要花费一定代价,现在求一条覆盖所有格子的哈密顿回路的总权值的最小值. 思路: 跟这道题一毛一样,除了把求和变成求最小值以外. 代码: #in ...

  10. 2019.01.22 uoj#14. 【UER #1】DZY Loves Graph(并查集)

    传送门 题意简述: 要求支持以下操作: 在a与b之间连一条长度为i的边(i是操作编号):删除当前图中边权最大的k条边:表示撤销第 i−1次操作,保证第1次,第i−1 次不是撤回操作. 要求在每次操作后 ...