XE7 & FMX 那些年我们一起上过的控件:ListView 之 (3) 加载数据时如何显示自定义样式

本文介绍一下ListView下如何加载数据、及使用进度条反馈当前进度给用户。

注意:

原创作品,请尊重作者劳动成果,转载请注明出处!!!原文永久固定地址:http://www.cnblogs.com/weii/p/4190719.html

我们先来看看效果图:

FMX异常强大,我们可以发挥想像,自定义进度样式,以下为本文参考代码:

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/1000;               //转动角度,转换后相当于当前进度
        lb.Text:=Format(‘%f‘,[j/1000*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爱好者共同交流)。 

时间: 2024-10-26 15:13:54

XE7 & FMX 那些年我们一起上过的控件:ListView 之 (3) 加载数据时如何显示自定义样式的相关文章

XE7 & FMX 那些年我们一起上过的控件:ListView 之 (2) 加载数据时如何显示进度条

本文介绍一下ListView下如何加载数据.及使用进度条反馈当前进度给用户. 注意: 原创作品,请尊重作者劳动成果,转载请注明出处!!!原文永久固定地址:http://www.cnblogs.com/weii/p/4190694.html 我们先来看看效果图: 进度条需要这样用的,以下为本文参考代码: procedure TForm1.Button2Click(Sender: TObject); begin TThread.CreateAnonymousThread( procedure() v

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

[源码下载] 作者:webabcd 介绍背水一战 Windows 10 之 控件(WebView) 加载指定 HttpMethod 的请求 自定义请求的 http header app 与 js 的交互 示例1.演示 WebView 如何加载指定 HttpMethod 的请求以及如何自定义请求的 http headerWebApi/Controllers/WebViewPostController.cs /* * 用于 WebView 演示“如何加载指定 HttpMethod 的请求,以及如何自

控件WebView网页的加载

Android:控件WebView网页的加载 WebView可以使得网页轻松的内嵌到app里,还可以直接跟js相互调用. webview有两个方法:setWebChromeClient 和 setWebClient setWebClient:主要处理解析,渲染网页等浏览器做的事情 setWebChromeClient:辅助WebView处理Javascript的对话框,网站图标,网站title,加载进度等 WebViewClient就是帮助WebView处理各种通知.请求事件的. 1.在Andr

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

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title

uwp开发:Pivot控件在加载数据时的一些细节性问题

最近在做一款汽车资讯.新闻.参数查询的客户端,里面多处用到了网络请求以及列表显示,所以我采用Pivot的方式显示各项的内容,如图所示: 但是每一项的网络请求Api是不同的,所以要发送不同的网络请求.由于Pivot是在同一个page下进行展示的,所以,我不得不考虑一个问题: 就是Pivot的这样的加载方式对数据请求到底是怎么影响的?多项是同时加载的吗?这样会对性能有要求吗? 带着这些疑问,我做了下测试,在每个PivotItem的Loaded事件处设置断点,进行调试,发现只要进入这个page,所有P

c# winform 循环遍历界面上的所有控件,foreach,Controls,AllowDrop

foreach (System.Windows.Forms.Control control in this.groupBox2.Controls)//遍历groupBox2上的所有控件 { if (control is System.Windows.Forms.PictureBox) { System.Windows.Forms.PictureBox pb = (System.Windows.Forms.PictureBox)control; pb.AllowDrop = true; } if

C#在某个线程上创建的控件不能成为在另一个线程上创建的控件的父级

首先在form1的窗体载入中新建了一个Class1对象并将本身的引用传递进入其构造函数,然后在Class1的构造函数中创建一个线程.该线程所代理的方法事件是本类中的一个add方法.而add方法的内容则是在form1上放一个textbox.然而这个流程你需要注意的有几个问题:1.哪个是主线程?所谓主线程是第一个启动的线程,是从main开始的.form1的这个窗体是由主线程创建的.2.Thread t的线程是什么?t是由主线程创建的,t的操作内容是在由主线程创建的窗体上放一个textbox.也就是说

可能用得上的UI控件

为了便于开发者打造各式各样的优秀App,UIKit框架提供了非常多功能强大又易用的UI控件以下列举一些在开发中可能用得上的UI控件:   红色表明最常用,蓝色代表一般,黑色代表几乎不用(这不是绝对的,仅供参考)

如何在UIScrollView的xib上添加子控件并添加AutoLayout约束

引言 自从苹果推出了autoLayout之后,作为开发者,深深的体验到了他的便捷之处,再也不用为适配不同屏幕布局UI而烦恼,我们仅仅需要和类关联一个xib文件,想上面放置我们需要的控件xib,并打好其相对于父视图以及同级视图的约束关系,这样我们就做好了不同屏幕的适配.但是奇怪的是UIScrollView上添加子控件,和之前的一样的操作,报的错却很吓人,那是为什么呢? 原因分析 因为UIScrollView想要能滑动的前提是要知道他的ContentSize的大小,我们直接向上面添加约束,他不知道自