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

    本文介绍一下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爱好者共同交流)。 

  • 相关阅读:
    获取网络动态flash下载地址工具mark HA
    mac 下windows系统修改快捷键 HA
    CABasicAnimation HA
    喷墨和激光打印的不同点 HA
    HTML iphone HA
    html5 HA
    CastleMonoRail配置[webConfig]
    什么是MonoRail?[基础知识讲解]
    javascript常用函数
    CastleGlobalApplication.cs工程起始加载
  • 原文地址:https://www.cnblogs.com/westsoft/p/10300662.html
Copyright © 2011-2022 走看看