DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: sprblck
今日帖子: 10
在线用户: 16
导航: 论坛 -> 信息交换 斑竹:huadugaojian,sunyesy,huangjacky  
作者:
男 gaoyong_gy (gaoyong_gy) ★☆☆☆☆ -
盒子活跃会员
2017/5/1 9:46:56
标题:
超级强悍的listview多功能展示,提供demo所有源码,原价4999,今日特惠499 浏览:4111
加入我的收藏
楼主: 经过180人的综合建议与测试,历时一个月,将GYlistview控件由2.0升级到5.0,
几乎将listview所能够想到的功能都增加实现了,强大到超过您的想像,
你可以下载apk的demo亲自验证。

超级强悍的listview多功能展示,提供demo所有源码,原价4999,今日特惠499,需要的赶紧入手。
购买地址:https://item.taobao.com/item.htm?id=524610038252
详情地址:http://blog.163.com/you888@188/blog/static/67239619201510255924548/
安卓演示demo安装程序下载:http://pan.baidu.com/s/1boC3WYz
文档介绍下载:http://pan.baidu.com/s/1pL2Smuf

这个listview有什么特点呢? 就一个字:强大。
此帖子包含附件:
PNG 图像
大小:737.7K
----------------------------------------------
Delphi 的移动程序开发,是您不可再错失的机遇:http://blog.163.com/you888@188/blog/static/6723961920169319529515/
作者:
男 gaoyong_gy (gaoyong_gy) ★☆☆☆☆ -
盒子活跃会员
2017/5/1 9:47:13
1楼:
此帖子包含附件:
PNG 图像
大小:717.9K
----------------------------------------------
Delphi 的移动程序开发,是您不可再错失的机遇:http://blog.163.com/you888@188/blog/static/6723961920169319529515/
作者:
男 gaoyong_gy (gaoyong_gy) ★☆☆☆☆ -
盒子活跃会员
2017/5/1 9:47:23
2楼:
此帖子包含附件:
PNG 图像
大小:459.2K
----------------------------------------------
Delphi 的移动程序开发,是您不可再错失的机遇:http://blog.163.com/you888@188/blog/static/6723961920169319529515/
作者:
男 gaoyong_gy (gaoyong_gy) ★☆☆☆☆ -
盒子活跃会员
2017/5/1 9:48:07
3楼:
此帖子包含附件:
PNG 图像
大小:425.6K
----------------------------------------------
Delphi 的移动程序开发,是您不可再错失的机遇:http://blog.163.com/you888@188/blog/static/6723961920169319529515/
作者:
男 gaoyong_gy (gaoyong_gy) ★☆☆☆☆ -
盒子活跃会员
2017/5/1 9:48:21
4楼:
此帖子包含附件:
PNG 图像
大小:186.2K
----------------------------------------------
Delphi 的移动程序开发,是您不可再错失的机遇:http://blog.163.com/you888@188/blog/static/6723961920169319529515/
作者:
男 gaoyong_gy (gaoyong_gy) ★☆☆☆☆ -
盒子活跃会员
2017/5/1 9:48:35
5楼:
此帖子包含附件:
PNG 图像
大小:143.1K
----------------------------------------------
Delphi 的移动程序开发,是您不可再错失的机遇:http://blog.163.com/you888@188/blog/static/6723961920169319529515/
作者:
男 gaoyong_gy (gaoyong_gy) ★☆☆☆☆ -
盒子活跃会员
2017/5/1 9:48:48
6楼:
此帖子包含附件:
PNG 图像
大小:202.7K
----------------------------------------------
Delphi 的移动程序开发,是您不可再错失的机遇:http://blog.163.com/you888@188/blog/static/6723961920169319529515/
作者:
男 gaoyong_gy (gaoyong_gy) ★☆☆☆☆ -
盒子活跃会员
2017/5/1 10:37:05
7楼:
此帖子包含附件:
PNG 图像
大小:172.5K
----------------------------------------------
Delphi 的移动程序开发,是您不可再错失的机遇:http://blog.163.com/you888@188/blog/static/6723961920169319529515/
作者:
男 sail2000 (小帆工作室) ★☆☆☆☆ -
盒子活跃会员
2017/5/1 12:52:36
8楼: 好奇的问一下,有上推添加 item 功能吗?
----------------------------------------------
delphi 是兴趣,和工作无关,即使它倒闭。又不靠它 delphi 吃饭,怕甚?
作者:
男 gaoyong_gy (gaoyong_gy) ★☆☆☆☆ -
盒子活跃会员
2017/5/1 14:33:31
9楼: 有的。
----------------------------------------------
Delphi 的移动程序开发,是您不可再错失的机遇:http://blog.163.com/you888@188/blog/static/6723961920169319529515/
作者:
男 wsswyz (wsswyz) ★☆☆☆☆ -
盒子活跃会员
2017/5/1 18:32:17
10楼: 老高大作!必须支持!
----------------------------------------------
-
作者:
男 gaoyong_gy (gaoyong_gy) ★☆☆☆☆ -
盒子活跃会员
2017/5/2 17:21:53
11楼: 明天结束。
----------------------------------------------
Delphi 的移动程序开发,是您不可再错失的机遇:http://blog.163.com/you888@188/blog/static/6723961920169319529515/
作者:
女 google220 (google220) ★☆☆☆☆ -
普通会员
2017/5/2 23:23:06
12楼: CustListView,完全达到目的。而且是免费、开源。
----------------------------------------------
菩提本无树,明镜亦非台,本来无一物,何处惹尘埃
作者:
男 zhangshelly (雪莱) ★☆☆☆☆ -
盒子活跃会员
2017/5/3 7:59:56
13楼: @google220
总有懒人,花钱图省事,也是节约时间的方法
----------------------------------------------
-
作者:
男 jackalan (nVicen) ★☆☆☆☆ -
盒子活跃会员
2017/5/4 10:58:09
14楼: 没有源码的不敢商用
----------------------------------------------
简单做人,认真做事。
作者:
男 21968578 (咪咪糊糊) ★☆☆☆☆ -
普通会员
2017/5/4 12:19:56
15楼: 桔子ui中的FmxListView免费,功能一样。
----------------------------------------------
-
作者:
男 zhipu (zhipu) ★☆☆☆☆ -
普通会员
2017/5/4 13:05:31
16楼: 原价999999万,特价1块钱,真搞笑
----------------------------------------------
-
作者:
男 pk_wos (pk_wos) ▲▲▲▲△ -
普通会员
2017/5/4 15:48:52
17楼: 你是不是没做过程序。这个还强大。
----------------------------------------------
-
作者:
男 gaoyong_gy (gaoyong_gy) ★☆☆☆☆ -
盒子活跃会员
2017/5/5 17:52:02
18楼: 没有了解的,不要瞎说,按此在新窗口浏览图片
最近有更新了:
此帖子包含附件:
PNG 图像
大小:86.6K
----------------------------------------------
Delphi 的移动程序开发,是您不可再错失的机遇:http://blog.163.com/you888@188/blog/static/6723961920169319529515/
作者:
男 gaoyong_gy (gaoyong_gy) ★☆☆☆☆ -
盒子活跃会员
2017/5/5 17:52:25
19楼: 功能简要说明
此帖子包含附件:
PNG 图像
大小:94.9K
----------------------------------------------
Delphi 的移动程序开发,是您不可再错失的机遇:http://blog.163.com/you888@188/blog/static/6723961920169319529515/
作者:
男 gaoyong_gy (gaoyong_gy) ★☆☆☆☆ -
盒子活跃会员
2017/5/5 17:52:58
20楼: 更加简易合理了。
----------------------------------------------
Delphi 的移动程序开发,是您不可再错失的机遇:http://blog.163.com/you888@188/blog/static/6723961920169319529515/
作者:
男 gaoyong_gy (gaoyong_gy) ★☆☆☆☆ -
盒子活跃会员
2017/5/5 17:54:40
21楼: 如果您的啊个窗口要用listview,直接将此form1上拷贝走即可,不用修改控件任何属性,对应代码直接抄写,稍微修改一下即可。
----------------------------------------------
Delphi 的移动程序开发,是您不可再错失的机遇:http://blog.163.com/you888@188/blog/static/6723961920169319529515/
作者:
男 gaoyong_gy (gaoyong_gy) ★☆☆☆☆ -
盒子活跃会员
2017/5/5 17:58:22
22楼: 关于本《移动程序listview可视化定制控件GYlistview》demo使用的说明

如果你不看,你会有很多问题要问我。相信我。高勇  2017.05.05 于西安,QQ120180714。
详情:http://blog.163.com/you888@188/blog/static/67239619201510255924548/

如果打开您的窗体时,提示属性不存在,请忽略所有,您所有的窗口最好都要打开一次,这是升级控件后的常用作法。

1、它是什么?
本demo是一个由高勇修改的GYlistview控件来制作的关于listview的综合设计展示,这个控件是手机设计里面必不可少的关键控件,对比原来的listview,功能大大扩展了,这个demo将是您设计您的界面时的可以直接拷贝的素材,必会大大节省您的界面设计时间。Form0是本demo的一开始的主窗口(您可以将其设计为登录窗口,如果必须先登录的话),其它所有窗口都不自动生成,需要时才生成。Form0是为了减少安卓黑屏时间的一个过度窗口,它打开后,自动延时后打开真正的主窗口form1,你可以看看代码,主窗体已经切换到form1了。好了,本demo其实真正的主窗体是form1,其它窗体都基本独立完成一个功能,互相之间基本没有什么关系。
2、如何入门
(1)先要安装对应的GYlistview控件,安装使用教程在控件包里,请一定详细查阅。否则您会走很多弯路。
(2)本demo的from1详细展示了该控件的所有常用使用技巧,请至少学会抄袭。其它窗口请参考使用。各种调用方法,请尽量采用form1的方式,这是新的使用方法。
3、使用透明状态栏与导航栏(几乎是必需的,否则真的不好看)
您必须完成以下步骤:
(0)将Delphi10.1Update2_FixedDelphiPas文件夹拷贝一个安全的地方,这是对Delphi10.1update2的系统文件的一系列修正,是很多人花了好多时间得来的宝贵的劳动成果,请加入到您的项目的搜索路径中去(不会去百度,我还是截图吧),所有平台都要加入,不加入,以下透明状态栏导航栏无效果。
 
(1)将GYTranslucentStatusAndNavBar.pas拷贝到你的项目根目录,在你的每个单元use它。
(2)你的主窗口的onCreate事件要加入如下代码(要写在最前面,只需要调用一次即可)
SetTranslucentForD101Update2; //设置D101Update2为透明状态栏和导航栏
(3)你的所有窗口的onCreate事件要加入如下代码
procedure TForm4.FormCreate(Sender: TObject);
begin
  TranslucentStatusAndNavBar(self, Rectangle_02); // 将状态栏与导航栏透明显示,顺便做一些每个窗口必须要做的处理
end;
(4)你的窗口的onResize事件要加入如下代码
procedure TForm4.FormResize(Sender: TObject);
begin
  HideNavBar_GY(self); // 横屏时,将导航栏的背景移动到右边
end;
4、每个窗体基本独立,有引用也是为了调用那个窗体,不算什么偶合紧密。Form1要打开其它窗体,自然要引用其它所有窗体。如果您有不懂的地方,源码都安静的躺在那里,花点时间安静的看看,一定会有收获的。
5、修改历史
2.0 forD10.1update2 2017-04-18更新说明:
1、修正上一版本显示出数据后,在滑动的过程中有可能数据消失的bug;
2、将每个item的文本字段由原来的15个增加到20个;
3、修改了当窗体宽度尺寸发生变化时,更新item里字段显示位置的算法,更加快捷与实用了。
3.0 forD10.1update2 2017-04-19更新说明:
1、新增加一个通用的ListView1GetData过程,用来通过3层分页查询数据集,再导入到ListView1的过程,采用线程的方式,增加查询时的动画提示窗口。
2、新增加listview里图片的导入方式,支持从本机或者网络直接导入图片,线程异步方式实现。
3、新增更加简洁的引用item内的文字,图片和按钮的函数,原来的太长了。
4、新增加所有同一个模板下的item内同一个文本字段的统计功能,可以单独统计,也可以一次统计所有20个文本字段的各自的和。
5、新增上拉增加一组数据和下拉刷新的示例,修正与自带本地搜索冲突的问题,解决上滑与下滑的冲突问题。
6、新增加点击不同模板下的item内的不同控件的响应示例,item内的任何文本,图片等都可以成为一个按钮,点击后不但有动画效果,还可以执行你的任何代码。
3.5 forD10.1update2 2017-04-20更新说明:
1、新增可以让任何文本,自动根据文字内容进行变高,其下的控件自动向下调整,不会被覆盖。
2、新增可以让任何文本点击后展开,再点击后会收拢。
3、新增加另一种不带图片文件名的网址的下载图片的兼容。
4、修复导入同一张图片会异常的bug。
5、修复搜索框不可见时,程序出错的bug。
6、修复2处内存泄漏。
4.0 forD10.1update2 2017-04-21更新说明:
1、新增可以让任何文本,进行编辑,编辑后可以立即调整文本显示高度,及其它控件的位置。
2、解决要编辑的文本被输入法档住的难题。
3、解决编辑时与查询数据更新的冲突。
4、解决编辑时,可能对窗体其它按钮进行误操作的冲突。
5、解决编辑时,和横屏的冲突。
6、解决编辑时,编辑框的大小、位置和颜色尽量与原有文本一致。
4.5 forD10.1update2 2017-04-24更新说明:
1、新增可以设定从网上下载的图片的缓存目录名称,避免所有app使用同一目录的尴尬事情出现。
2、增加了删除缓存图片的调用示例。
5.0 forD10.1update2 2017-04-26更新说明:
1、新增在没有选择行的情况下,可以将当前行上下移动指定行数。
2、新增编辑text时,可以指定键盘类型:如编辑移动的行数时指定为数字键盘。
3、新增行选择功能,可以设置为单选或者多选,可以自己更换选择状态图片,可以执行全选(单选时无效),全不选或者反选(单选时无效)。
4、新增下拉列表编辑功能。
5、新增时间编辑功能。
6、新增日期编辑功能。
7、新增加图片的按比例显示的功能,如显示星级等等。
8、新增加删除指定的行。
9、新增加删除所有选定的行。
5.5 forD10.1update2 2017-05-05更新说明:
1、图片的个数也增加到20个了,原来是10个。
2、新增加行背景设置功能,您可以任意指定每一行的背景图。
3、下拉刷新与上拉加载更多增加释放步骤,不释放不会自动执行。
4、完善了form1的示例代码,一切以这个示例为准。
----------------------------------------------
Delphi 的移动程序开发,是您不可再错失的机遇:http://blog.163.com/you888@188/blog/static/6723961920169319529515/
作者:
男 gaoyong_gy (gaoyong_gy) ★☆☆☆☆ -
盒子活跃会员
2017/5/5 18:01:23
23楼: 5.5新版本的基本用法都在form1里面,请详细阅读

1、给listview填充数据的关键代码如下:
1.1以下是新版本的用法,您务必要把这里每一句都要看懂,注释掉的,都是可能有用的代码,查询数据库,这里采用的是我的3层的写法,您完全可以换成您自己的3层方式。
procedure TForm1.ListView1GetData; // 通用标准查询
var
  args: array [0 .. 2] of Variant;
  LItem: TListViewItem;
  rem: Variant;
begin
{$IF DEFINED(IOS) or DEFINED(ANDROID)}
  // if SJDM.SJGY.GetNetworkState = '0' then
  // begin
  // SJDM.SJGY.ToastConfirm('请打开网络连接', self, 1.5);
  // exit;
  // end;
{$ENDIF}
  self.Focused := nil;
  ListViewImageCacheFolderName := 'GYlistviewDemoImageCache'; // 设置ListView导入图片时的缓存目录名称(防止不同app使用同一个文件夹)
  SetListView(ListView1, GY1ListItem); // 要用到的模板必须这样调用一下
  SetListView(ListView1, GY2ListItem); // 要用到的模板必须这样调用一下

  if ListView1.page = 1 then // 如果是第一页,清空内存图片缓存,这个前提是事先没有预存图片,否则不要删除程序预存图片
  begin // 相当于重新加载数据
    // ListView1.Images.Source.Clear;
    ListView1.ScrollViewPos := 0;
    ListView1.Items.Clear;
    InitializeItemCheck(ListView1, true); // 初始化设置Item的选择方式,单选false还是多选true,前提是您要先设置好模板内的GY1Image00,这个选择图标专用的
  end;

  // 以下给客户端要上传给服务端的参数赋值
  args[0] := ListView1.page; // 页码
  // args[1] := form1.id; // 我的ID号

  MyWaitShow('正在查询,请稍后......', self);
  TThread.CreateAnonymousThread( // 创建一个单线程,完成一个没有界面交互的任务
    procedure
    var
      s, temps: string;
    begin // 线程里的一些代码。
      sleep(300); // 代替下一句,模拟查询时间
      // rem := DM.SQLOpen('GY_SimpleService1', '', 'cx_MyGroup', args, AkbmMemTable); //3层查询数据库
      rem := '1'; // 临时模拟查询成功
      if rem = '1' then // 如果查询成功
      begin
        TThread.Synchronize(TThread.CurrentThread,
          procedure // 处理界面交互代码写这里
          var
          i: Integer;
          h: Single;
          begin
          // if AkbmMemTable.RecordCount > 0 then  //返回的数据集
          if true then // 模拟代替上一行
          begin
          ListView1.BeginUpdate;
          if ListView1.ItemCount > 0 then
          ListView1.Items.Delete(ListView1.ItemCount - 1); // 删除最后和统计条,添加完毕数据后再加
          // for i := 1 to AkbmMemTable.RecordCount do
          for i := 1 to Edit1.Text.ToInteger do // 模拟代码
          begin
          LItem := ListView1.Items.Add; // ListView1增加一行
          GYListviewSetSetings(self, LItem, 'GY1', true); // 给新增加的这一行指定模板,参数的意思是,(本窗口,要指定模板的item,模板的前缀字符串,是否把模板中的控件值直接赋值到item对应的控件中)

          // 以下这一行,要放在其它文本赋值的前面
          SetItemIsCheck(self, ListView1, LItem, false); // 设置item的默认为不选择,如果SetItemIsCheck(self,ListView1,LItem,true)就是默认选择

          // SetItemBackGround(self,LItem,i mod 4);//设置行背景GY1Image00,(i mod 4)为其内的图片序号,从0开始
          SetItemBackGround(self, LItem, i mod 2); // 设置行背景GY1Image00,(i mod 2)为其内的图片序号,从0开始

          // 给每个字段赋值
          GetText('01', LItem).Text := '总第' + inttostr(LItem.Index + 1) + '行:' + GetText('01', LItem).Text;
          GetText('02', LItem).Text := '第' + inttostr(i) + '行:' + GetText('02', LItem).Text;
          GetText('03', LItem).Text := FormatDateTime('hh:mm', Now);
          GetText('04', LItem).Text := inttostr(i);
          // 我们希望Text05是变高字符串
          temps := '天舟一号货运飞船发射升空后,将进入高度约380公里的运行轨道,之后将与在轨运行的天宫二号空间实验室进行自动交会对接。天舟一号将装载超过6吨的物资与设备飞向太空。';
          GetText('05', LItem).Text := temps.Substring(randomrange(0, temps.Length - 10)); // 取随机长度的字符串
          h := SetTextHeight('05', LItem, true); // 重新指定该Text的高度和item的高度,返回值为item增加的高度,为true时自动调整其下面的控件的位置
          GetText('06', LItem).Text := temps.Substring(randomrange(0, temps.Length - 10)); // 取随机长度的字符串
          h := SetTextHeight('06', LItem, true); // 重新指定该Text的高度和item的高度,返回值为item增加的高度,为true时自动调整其下面的控件的位置

          // 给每个图片赋值
{$IFDEF MSWINDOWS} // 电脑上,为了演示第一个从本地直接取图片
          if i = 1 then
          GetBitmapFromFile('01', LItem, '..\..\图标\120x120.png', ListView1, 120) // 从本地直接取图片
          else if i = 2 then // 如果是以下地址,要求第一个参数ver=3363302661800591360(等号右边的字符串)可以代表图片名称,如果链接无效,可能被删除了,会载入设计时模板的图片
          GetBitmapFromFile('01', LItem, 'http://www.xuncha1688.com/app/imgshow?ver=3363302661800591360', ListView1, 120)
          else if i = 3 then // 可以重新指定图片边长为120(生成最大正方形图片)
          GetBitmapFromFile('01', LItem, 'http://p0.so.qhmsg.com/bdr/_240_/t018cfb77d38a88e67f.jpg', ListView1, 120)
          else if i = 4 then // http://p2.so.qhimgs1.com/bdr/_240_/t013373b1656886d572.jpg
          GetBitmapFromFile('01', LItem, 'http://p0.so.qhmsg.com/bdr/_240_/t018cfb77d38a88e67f.jpg', ListView1, 120)
          else if i = 5 then
          GetBitmapFromFile('01', LItem, 'http://p4.so.qhimgs1.com/bdr/_240_/t01ba74c571b127db8a.jpg', ListView1, 120)
          else if i = 6 then
          GetBitmapFromFile('01', LItem, '..\..\4.png', ListView1) // 从本地直接取图片
{$ELSE} // 手机上,全部从网络取图
          if i = 1 then // 在线程中从网络直接取图片  //可以重新指定图片边长为120(生成最大正方形图片)
          GetBitmapFromFile('01', LItem, 'http://p1.so.qhimgs1.com/bdr/_240_/t01fe2b8ff433254341.jpg', ListView1, 120)
          else if i = 2 then // 如果是以下地址,要求第一个参数ver=3363302661800591360(等号右边的字符串)可以代表图片名称,如果链接无效,可能被删除了,会载入设计时模板的图片
          GetBitmapFromFile('01', LItem, 'http://www.xuncha1688.com/app/imgshow?ver=3363302661800591360', ListView1, 120)
          else if i = 3 then
          GetBitmapFromFile('01', LItem, 'http://p0.so.qhmsg.com/bdr/_240_/t018cfb77d38a88e67f.jpg', ListView1, 120)
          else if i = 4 then
          GetBitmapFromFile('01', LItem, 'http://p2.so.qhimgs1.com/bdr/_240_/t013373b1656886d572.jpg', ListView1, 120)
          else if i = 5 then
          GetBitmapFromFile('01', LItem, 'http://p4.so.qhimgs1.com/bdr/_240_/t01ba74c571b127db8a.jpg', ListView1, 120)
          else if i = 6 then
          GetBitmapFromFile('01', LItem, 'http://p0.so.qhimgs1.com/bdr/_240_/t01f262d90a3a823ca0.jpg', ListView1, 120)
{$ENDIF}
          else
          GetImage('01', LItem).ImageIndex := randomrange(0, 16); // 指定ListView1所绑定的ImageList1的图片序号,事先保存有图片的,没有的话,就不能这样设置了

          GetImage('02', LItem).Bitmap := GY1Image02.Bitmap;

          SetImageRateNum(self, LItem, randomrange(1, 5), 5, '06'); // 设置GY1Image06的显示比例,randomrange(1, 5)是分子,5是分母。可以用来显示星级

          // AkbmMemTable.next;
          end;

          LItem := ListView1.Items.Add; // ListView1增加一行  增加统计条
          GYListviewSetSetings(self, LItem, 'GY2', true); // 用的是模板2
          GetText('01', LItem).Text := 'GY1Text04合计:';
          GetText('02', LItem).Text := GetAllTextSum(ListView1, 'GY1', '04'); // 只求一个字段的和,这样时间会少一点
          // s := GetAllTextSum(ListView1, 'GY1'); // 一次返回所有20个字段的各自求和,一定要先赋值给变量,免得多次重复计算
          // GetText('02', LItem).Text := NString('#', s, 4); // 取第4个字段,即所有模板为GY1的行内Text04的和

          ListView1.EndUpdate;
          ListView1.CanLoadNextGroupData := true; // 标识本页数据加载完毕

          MyWaithide(self);
          end
          else
          begin
          TThread.Synchronize(TThread.CurrentThread,
          procedure // 处理界面交互代码写这里
          begin
          ListView1.CanLoadNextGroupData := false; // 到达最后一页了
          MyWaithide(self);
          end);
          end;

          end);
      end
      else // 如果出错了
      begin
        TThread.Synchronize(TThread.CurrentThread,
          procedure // 处理界面交互代码写这里
          begin
          ListView1.CanLoadNextGroupData := true; // 标识数据可以重新加载
          MyWaithide(self);
          ToastConfirm('查询失败,请稍后重试', self, 1); // rem会返回错误信息
          end);
      end;
    end).Start;
end;
2点击listview内的数据的关键代码如下
2.1下面是新用法,建议使用,注释已经很详细了,我就不啰嗦了
procedure TForm1.ListView1ItemClickEx(const Sender: TObject; ItemIndex: Integer; const [Ref] LocalClickPos: TPointF; const ItemObject: TListItemDrawable);
var
  PicTempFile, s, moban: string;
  i, k, m: Integer;
  LItem, atempLItem: TListViewItem;
begin
  if ListView1.EditMode = true then // 如果在编辑状态,则不执行点击事件
    exit;

  LItem := TListViewItem(ListView1.Items.Item[ItemIndex]);

  moban := GetText('99', LItem).Text;
  // ----------
  if moban = 'GY1' then // 如果用的是模板1,一个窗体最多10个模板 (先要判断模板,这样你才知道布局)
  begin
    if ItemObject <> nil then // 如果点击了item内的某个控件
    begin
      if ItemObject.Name = 'I' then // 点击代表选择的这张图片,模板中由GY1Image00指定
      begin
        ChangeItemCheck(self, LItem, ListView1); // 点击Image图片后,更改图片并返回当前行的check状态:LItem.HasSelected:=true如果为true表示选择了,为false表示没有选择
        m := 0; // 以下求所有已经选择的Text04的和
        for i := 0 to ListView1.ItemCount - 1 do
        begin
          atempLItem := TListViewItem(ListView1.Items.Item[i]);
          if atempLItem.HasSelected = true then // 表示选择了该行
          m := m + GetText('04', atempLItem).Text.ToInteger;
        end;
        ToastConfirm('共选择' + ListView1.SelectedItemNum.ToString + '行,Text04的和:' + m.ToString, self, 1.5);
        exit;
      end;

      if ItemObject.Name = 'Image01' then // 点击第一张图片
      begin
        ShowHitEffect(self, LItem, 2, ItemObject, $FFFF0000, 100); // 执行点击动态效果,带背景切换效果,不要的话用ShowHitEffect(ItemObject, $FFFF0000, 100);
        showmessage('图片地址(如果为空,表示导入的是在程序设计时就保存的图片):' + GetImage('01', LItem).TagString); // 自动导入图片后,图片地址保存在TagString
        exit;
      end;

      if ItemObject.Name = 'Image05' then // 点击第5张图片
      begin
        ShowHitEffect(self, LItem, 2, ItemObject, $FFFF0000, 100); // 执行点击动态效果
        if DeleteHuanCunPath(ListViewImageCacheFolderName) = true then
          showmessage('您清空了所有缓存的图片!不过没有关系,会自动再下载的。');
        exit;
      end;

      if ItemObject.Name = 'Image06' then // 点击第6张图片
      begin
        ShowHitEffect(self, LItem, 2, ItemObject, $FFFF0000, 100); // 执行点击动态效果
        exit;
      end;

      if ItemObject.Name = 'Image07' then // 点击第7张图片
      begin
        ShowHitEffect(self, LItem, 2, ItemObject, $FFFF0000, 100); // 执行点击动态效果
        DeleteItem(ListView1, ItemIndex); // 删除当前行
        ToastConfirm('第' + (ItemIndex + 1).ToString + '行删除完毕', self, 1.5);
        exit;
      end;

      if ItemObject.Name = 'Text01' then // 点击第2个文本
      begin
        ShowHitEffect(self, LItem, 2, ItemObject, $FFFF0000, 100); // 执行点击动态效果
        showmessage('您点击的内容是:' + GetText('01', LItem).Text);
        exit;
      end;

      if ItemObject.Name = 'Text02' then // 点击第2个文本
      begin
        ClickToSelectText('02', LItem, ListView1, self, '自力更生,快乐创业,怨天尤人,消极厌世,无所事事,游手好闲'); // 调用TComboBox进入编辑状态
        exit;
      end;

      if ItemObject.Name = 'Text03' then // 点击第3个文本
      begin
        ClickToSelectTime('03', LItem, ListView1, self); // 调用TTimeEdit进入编辑状态
        exit;
      end;

      if ItemObject.Name = 'Text07' then // 点击第7个文本
      begin
        ClickToSelectDate('07', LItem, ListView1, self); // 调用DateEdit进入编辑状态
        exit;
      end;

      if ItemObject.Name = 'Text05' then // 点击第5个文本
      begin
        ClickToEditText('05', LItem, ListView1, self); // 进入编辑状态
        exit;
      end;

      if ItemObject.Name = 'Text06' then // 点击第6个文本
      begin
        ShowHitEffect(self, LItem, 2, ItemObject, $FFFF0000, 100); // 执行点击动态效果
        ClickToLookMoreText('06', LItem); // 自动展开或者缩回高度
        exit;
      end;

      if ItemObject.Name = 'Text10' then // 点击第10个文本
      begin
        ClickToEditText('10', LItem, ListView1, self, TvirtualKeyboardType.NumberPad); // 进入编辑状态
        exit;
      end;

      if ItemObject.Name = 'Text09' then // 点击第09个文本
      begin
        ShowHitEffect(ItemObject, $FFFF0000, 100);
        MoveItem(self, ListView1, LItem, strtoint('-' + GetText('10', LItem).Text)); // 向上移动item
        exit;
      end;

      if ItemObject.Name = 'Text11' then // 点击第11个文本
      begin
        ShowHitEffect(ItemObject, $FFFF0000, 100);
        MoveItem(self, ListView1, LItem, strtoint(GetText('10', LItem).Text)); // 向下移动item
        exit;
      end;
    end;

    showmessage('您点击的内容是除了图片1,文本1和文本2的别的地方'); // 点击了当前item的别的地方
    // 写您要处理的事件
  end;

  // ----------
  if moban = 'GY2' then // 如果用的是模板2,一个窗体最多10个模板 (先要判断模板,这样你才知道布局)
  begin
    if ItemObject <> nil then // 如果点击了item内的某个控件
    begin
      if ItemObject.Name = 'Image01' then // 点击第1张图片
      begin
        ShowHitEffect(ItemObject, $FFFF0000, 100);
        showmessage('您删除了' + DeleteAllCheckedItem(ListView1).ToString + '行');
        exit;
      end;
      if ItemObject.Name = 'Text01' then // 点击第1个文本
      begin
        // 写您要处理的事件
        exit;
      end;
    end;
    // 写您要处理的事件
  end;
  // ----------
  if moban = 'GY3' then // 如果用的是模板3,一个窗体最多10个模板 (先要判断模板,这样你才知道布局)
  begin
    if ItemObject <> nil then // 如果点击了item内的某个控件
    begin
      if ItemObject.Name = 'Image01' then // 点击第1张图片
      begin
        // 写您要处理的事件
        exit;
      end;
      if ItemObject.Name = 'Text01' then // 点击第1个文本
      begin
        // 写您要处理的事件
        exit;
      end;
    end;
    // 写您要处理的事件
  end;

end;
3当窗体尺寸发生变化时,让listview显示的内容自己适应
procedure TForm1.FormResize(Sender: TObject);
begin
  GYListviewFormResize(self, ListView1); // 当屏幕尺寸发生变化时,设置ListView的item的格式
end;

4让listview上拉加载一下页数据
procedure TForm1.ListView1ScrollViewChange(Sender: TObject);
begin
  // 在这里判断滑动的位置,还要在ListView1MouseUp事件里调用执行代码
  if CanGetNextGroupData(ListView1, '∧上拉加载更多信息') and (ListView1.CanLoadNextGroupData = true) and (IsEditing = false) then // 上拉到极限后自动加载下一组数据
    ListView1.CanDoRefreshOrGetNextGroupData := 'Refresh' // 通知ListView1MouseUp事件可以执行
  else if CanReFreshData(ListView1, '∨下拉刷新数据') and (ListView1.CanLoadNextGroupData = true) and (IsEditing = false) then // 下拉到极限后自动加载第一组数据
    ListView1.CanDoRefreshOrGetNextGroupData := 'GetNextGroupData' // 通知ListView1MouseUp事件可以执行
  else
    ListView1.CanDoRefreshOrGetNextGroupData := ''; // 通知ListView1MouseUp事件不可以执行
end;
procedure TForm1.ListView1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single);
begin
  if ListView1.CanDoRefreshOrGetNextGroupData = 'Refresh' then // 上拉到极限后自动加载下一组数据
  begin
    ListView1.CanDoRefreshOrGetNextGroupData := '';
    ListView1.CanLoadNextGroupData := false; // 防止重复执行加载
    ListView1.page := ListView1.page + 1; // 分页的当前页
    ListView1GetData;; // 加载下一组数据
  end;

  if ListView1.CanDoRefreshOrGetNextGroupData = 'GetNextGroupData' then // 下拉到极限后自动加载第一组数据
  begin
    ListView1.CanDoRefreshOrGetNextGroupData := '';
    ListView1.CanLoadNextGroupData := false; // 防止重复执行加载
    ListView1.page := 1; // 分页的当前页
    ListView1GetData;; // 加载下一组数据
  end;
end;
5字段求和,有2种方式,请看看注释
LItem := ListView1.Items.Add; // ListView1增加一行  增加统计条
      GYListviewSetSetings(self, LItem, 'GY2', True); // 用的是模板2
      GetText('01', LItem).Text := 'GY1Text04合计:';
      //GetText('02', LItem).Text := GetAllTextSum(ListView1, 'GY1', '04'); //只求一个字段的和
      s:=GetAllTextSum(ListView1, 'GY1');//一次返回所有20个字段的各自求和,一定要先赋值给变量s,免得多次重复计算
      GetText('02', LItem).Text :=NString('#', s, 4); //取第4个字段,即所有模板为GY1的行内Text04的和
----------------------------------------------
Delphi 的移动程序开发,是您不可再错失的机遇:http://blog.163.com/you888@188/blog/static/6723961920169319529515/
作者:
男 gaoyong_gy (gaoyong_gy) ★☆☆☆☆ -
盒子活跃会员
2017/5/7 17:22:36
24楼:
此帖子包含附件:
PNG 图像
大小:639.8K
----------------------------------------------
Delphi 的移动程序开发,是您不可再错失的机遇:http://blog.163.com/you888@188/blog/static/6723961920169319529515/
作者:
男 gaoyong_gy (gaoyong_gy) ★☆☆☆☆ -
盒子活跃会员
2017/5/7 17:23:02
25楼:
此帖子包含附件:
PNG 图像
大小:464.6K
----------------------------------------------
Delphi 的移动程序开发,是您不可再错失的机遇:http://blog.163.com/you888@188/blog/static/6723961920169319529515/
作者:
男 gaoyong_gy (gaoyong_gy) ★☆☆☆☆ -
盒子活跃会员
2017/5/7 17:23:23
26楼:
此帖子包含附件:
PNG 图像
大小:313.0K
----------------------------------------------
Delphi 的移动程序开发,是您不可再错失的机遇:http://blog.163.com/you888@188/blog/static/6723961920169319529515/
作者:
男 gaoyong_gy (gaoyong_gy) ★☆☆☆☆ -
盒子活跃会员
2017/5/7 17:23:51
27楼:
此帖子包含附件:
PNG 图像
大小:325.6K
----------------------------------------------
Delphi 的移动程序开发,是您不可再错失的机遇:http://blog.163.com/you888@188/blog/static/6723961920169319529515/
作者:
男 gaoyong_gy (gaoyong_gy) ★☆☆☆☆ -
盒子活跃会员
2017/5/7 17:25:23
28楼: 20字段,可以左右滑动,下拉刷新,上拉加载下一页,可以选择多行,可以直接编辑,可以点击直接展开收拢一行。
----------------------------------------------
Delphi 的移动程序开发,是您不可再错失的机遇:http://blog.163.com/you888@188/blog/static/6723961920169319529515/
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行250毫秒 RSS