本文介绍一下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. 使用iTEXT库生成pdf

    iTEXT下载地址 https://sourceforge.net/projects/itext/files/ 选择绿色的按钮,下载最新版本,解压后是一些jar包 为了使用方便,将文件夹放到JAVA_ ...

  2. urllib和requests库

    目录 1. Python3 使用urllib库请求网络 1.1 基于urllib库的GET请求 1.2 使用User-Agent伪装后请求网站 1.3 基于urllib库的POST请求,并用Cooki ...

  3. mybatis 的查询某个字段的特定位数(模糊查询)

    获取特定的几位:1.取url字段后三位字符 select SUBSTRING(url, -3) from link; 2.取url字段前三位字符 select SUBSTRING(url, 3) fr ...

  4. @Valid报错 No validator could be found for constraint

    使用hibernate validator出现上面的错误, 需要 注意 @NotNull 和 @NotEmpty  和@NotBlank 区别 @NotEmpty 用在集合类上面@NotBlank 用 ...

  5. MySQL查找SQL耗时瓶颈 SHOW profiles

    http://blog.csdn.net/k_scott/article/details/8804384 1.首先查看是否开启profiling功能 SHOW VARIABLES LIKE '%pro ...

  6. 47.iOS跳转AppStore评分和发送邮件

    1.跳转到AppStore评分 应用地址是关键:IOS 设备,手机搜索应用,拷贝链接 NSString *appStr =@"https://itunes.apple.com/cn/app/ ...

  7. 【转】Linux useradd

    Linux 系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统.用户的账号一方面可以帮助系统管理员对使用系统的用户进行 ...

  8. [转]MySQL索引原理及慢查询优化

    MySQL凭借着出色的性能.低廉的成本.丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库.虽然性能出色,但所谓“好马配好鞍”,如何能够更好的使用它,已经成为开发工程师的必修课,我们经常会从职位 ...

  9. 2018.10.26 NOIP模拟 性感手枪(搜索)

    传送门 vis[x][y]vis[x][y]vis[x][y]记录这个点是否在之前被搜过,且被搜过的坐标是什么. 然后搜索的时候记录一个循环的下标和不循环的下标就行了. 代码

  10. Centos7 yum install vim 出现“could not retrieve mirrorlist”

    ps:来源 https://www.cnblogs.com/justphp/p/5959655.html 办法一:改dns解析 vim /etc/resolv.conf 添加: nameserver ...