TC官方合作论坛

 找回密码
 立即注册
查看: 1845|回复: 1

TC[5.0] 表格脚本模拟分页滚动

[复制链接]
发表于 2015-4-29 10:56:49 | 显示全部楼层 |阅读模式

马上加入TC

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 apq0001 于 2015-4-29 11:02 编辑

这里使用的例子代码为最新TC5.0版本开发,下载地址页面连接为:http://121.40.16.104:84/

用到了标签控件的API:

标签设置颜色("标签0",#ff00ff,2) // 设置背景透明(0:设置文本颜色,1:设置背景颜色,2:设置背景为透明,此时颜色参数被忽略)


首先看看效果展示:


表格模拟分页滚动效果.gif

脚本代码如下:(复制的代码被消除了高亮,大家还是下载附件看源码比较醒目)


  1. // 5个快捷标签
  2. var nAllStaticIndex = 5
  3. // 控制真实背景色的位置,其实设为1,表示custom1
  4. var nBaseIndex = 1
  5. // 指定标签滚动时背景的居中位置,一般为标签数量的一半居中,计算方式为: nAllStaticIndex / 2 + 1
  6. var nMidIndex = 3
  7. // 是否需要重新校准,默认0表示false
  8. var isUpdate = 0

  9. // 初始化标签
  10. function initData( &nMyIndex, nAllIndex, strStaticName, nColor )
  11.     // 设定默认颜色
  12.     for(var i = 1; i <= nAllIndex; i++)
  13.         staticsetcolor(""&strStaticName&i,0,2) // 设置透明色
  14.         staticsettext(""&strStaticName&i,""&i)
  15.     end
  16.     staticsetcolor(""&strStaticName&1,nColor,1)
  17.     // 初始化参数
  18.     nMyIndex = 1
  19. end

  20. // 校准标签
  21. function updateStatic( &nMyIndex, nAllIndex, strStaticName, strGridName )
  22.     // 得到此时高亮背景标签代表的页数
  23.     var nPage = staticgettext(""&strStaticName&nMyIndex)
  24.     if(nMyIndex < nMidIndex)// 如果在左边
  25.         // 这里校准左边
  26.         // 如果最左边的标签页数 > 1 并且可以腾出间隔位置的话,
  27.         // 则调整标签显示数字
  28.         // 否则调整为 1 2 3 ...
  29.         var nLeftSpace = nMidIndex - 1
  30.         if(staticgettext(""&strStaticName&1) > 1 && staticgettext(""&strStaticName&1) - nLeftSpace > 0)
  31.             for(var i = 1; i <= nAllIndex; i++)
  32.                 if(i < nMidIndex)
  33.                     var nData = nPage - (nMidIndex - i)
  34.                     staticsettext(""&strStaticName&i,""&nData)
  35.                 elseif(i == nMidIndex)
  36.                     staticsettext(""&strStaticName&i,""&nPage)
  37.                 else
  38.                     var nData = nPage + (i - nMidIndex)
  39.                     staticsettext(""&strStaticName&i,""&nData)
  40.                 end
  41.             end
  42.             nMyIndex = nMidIndex
  43.         else
  44.             for(var i = 1; i <= nAllIndex; i++)
  45.                 staticsettext(""&strStaticName&i,""&i)
  46.             end
  47.             nMyIndex = nAllIndex - nPage // 所有标签个数 - (当前背景标签代表的表格页面索引和第一页之间的差值)
  48.         end
  49.     else
  50.         // 这里校准右边
  51.         // 如果最右边的标签页数 + nMidIndex <= 总分页数并且可以腾出间隔位置的话,
  52.         // 则调整标签显示数字
  53.         // 否则调整为 ...nAllindex - 1,nAllIndex
  54.         var nRightSpace = nAllIndex - nMidIndex
  55.         var nGridPages = gridgetallpagecount(""&strGridName)
  56.         if(staticgettext(""&strStaticName&nAllIndex) < nGridPages && staticgettext(""&strStaticName&nAllIndex) + nRightSpace <= nGridPages)
  57.             for(var i = 1; i <= nAllIndex; i++)
  58.                 if(i < nMidIndex)
  59.                     var nData = nPage - (nMidIndex - i)
  60.                     staticsettext(""&strStaticName&i,""&nData)
  61.                 elseif(i == nMidIndex)
  62.                     staticsettext(""&strStaticName&i,""&nPage)
  63.                 else
  64.                     var nData = nPage + (i - nMidIndex)
  65.                     staticsettext(""&strStaticName&i,""&nData)
  66.                 end
  67.             end
  68.             nMyIndex = nMidIndex
  69.         else
  70.             for(var i = 1; i <= nAllIndex; i++)
  71.                 staticsettext(""&strStaticName&i,""&(nGridPages - nAllIndex + i))
  72.             end
  73.             nMyIndex = nAllIndex - (nGridPages - nPage)
  74.         end
  75.     end
  76.     // 将校准设为false
  77.     isUpdate = 0
  78. end


  79. // 向前跳转
  80. function goPrev( &nMyIndex, nAllIndex, strStaticName, strGridName, nColor )
  81.     if(staticgettext(""&strStaticName&nMidIndex) < 1)
  82.         return
  83.     end
  84.    
  85.     // 显示表格分页数据
  86.     gridshowprevpagedata("grid")
  87.    
  88.     // 显示表格序号跳转
  89.     // 停止条件:真实位置处于最前 且 第一个标签 = 页数1
  90.     if(nMyIndex == 1 && staticgettext(""&strStaticName&nMyIndex) == 1)
  91.         return
  92.     end
  93.    
  94.     var nPrevControl = 0
  95.    
  96.     // 设定默认颜色
  97.     for(var i = 1; i <= nAllIndex; i++)
  98.         staticsetcolor(""&strStaticName&i,0,2) // 设置透明色
  99.     end
  100.    
  101.     // 如果点击了自定义标签显示页面,则需要重新校准标签的数字和背景
  102.     if(isUpdate)
  103.         updateStatic( nMyIndex, nAllIndex, strStaticName, strGridName )
  104.     end
  105.    
  106.     // 控制标签滚动
  107.     if(staticgettext(""&strStaticName&1) > 1 && nMyIndex == nMidIndex)
  108.         nPrevControl = 1
  109.         for(var i = 1; i <= nAllIndex; i++)
  110.             var m = staticgettext(""&strStaticName&i)
  111.             staticsettext(""&strStaticName&i,""&(m-1))
  112.         end
  113.     end
  114.    
  115.    
  116.     if(nMyIndex > nMidIndex || staticgettext(""&strStaticName&1)  == 1)
  117.         if(!nPrevControl)
  118.             nMyIndex--
  119.         end
  120.         
  121.     end
  122.    
  123.     staticsetcolor(""&strStaticName&nMyIndex,nColor,1)
  124. end

  125. // 向后跳转
  126. function goNext( &nMyIndex, nAllIndex, strStaticName, strGridName, nColor )
  127.     if(staticgettext(""&strStaticName&nMidIndex) > gridgetallpagecount(""&strGridName))
  128.         return
  129.     end
  130.    
  131.     // 显示表格分页数据
  132.     gridshownextpagedata("grid")
  133.    
  134.     // 停止滚动条件:真实位置已经到最后,且 最后一个标签 = 表格所有页数
  135.     if(nMyIndex == nAllIndex && staticgettext(""&strStaticName&nMyIndex) == gridgetallpagecount(""&strGridName))
  136.         return
  137.     end
  138.    
  139.     var nNextControl = 0
  140.    
  141.     // 设定默认颜色
  142.     for(var i = 1; i <= nAllIndex; i++)
  143.         staticsetcolor(""&strStaticName&i,0,2) // 设置透明色
  144.     end
  145.    
  146.     // 如果点击了自定义标签显示页面,则需要重新校准标签的数字和背景
  147.     if(isUpdate)
  148.         updateStatic( nMyIndex, nAllIndex, strStaticName, strGridName )
  149.     end
  150.    
  151.     // 控制标签滚动,如果最后一个标签 < 表格总分页,则对标签数字进行更新模拟滚动效果
  152.     if(staticgettext(""&strStaticName&nAllIndex) < gridgetallpagecount(""&strGridName) && nMyIndex == nMidIndex)
  153.         nNextControl = 1
  154.         for(var i = 1; i <= nAllIndex; i++)
  155.             var m = staticgettext(""&strStaticName&i)
  156.             staticsettext(""&strStaticName&i,""&(m+1))
  157.         end
  158.     end
  159.    
  160.     // 如果真实位置 < 指定的居中位置则移动其背景色位置,或者最后一个标签已经超出表格分页
  161.     if(nMyIndex < nMidIndex || staticgettext(""&strStaticName&nAllIndex) >= gridgetallpagecount("grid"))
  162.         if(!nNextControl)
  163.             nMyIndex++
  164.         end
  165.         
  166.     end
  167.    
  168.     staticsetcolor(""&strStaticName&nMyIndex,nColor,1)
  169. end

  170. // 快捷标签跳转
  171. function goCustom( nMyIndex, nAllIndex, strStaticName, strGridName, nColor )
  172.     if(nMyIndex > gridgetallpagecount(""&strGridName) || nMyIndex < 1)
  173.         return
  174.     end
  175.    
  176.     // 设定默认颜色
  177.     for(var i = 1; i <= nAllIndex; i++)
  178.         staticsetcolor(""&strStaticName&i,0,2) // 设置透明显示
  179.     end
  180.     staticsetcolor(""&strStaticName&nMyIndex,nColor,1) // 取消透明显示
  181.     gridshowcustompagedata(""&strGridName,staticgettext(""&strStaticName&nMyIndex)-1)
  182.     nBaseIndex = nMyIndex
  183.    
  184.     // 需要校准
  185.     isUpdate = 1
  186. end

  187. // 自选页面跳转
  188. function goSkip( &nMyIndex, nAllIndex, strStaticName, strGridName, nColor )
  189.     var nPage = staticgettext("custom"&nMyIndex) // 标签高亮背景对应的表格页号
  190.     var nSkipPage = editgettext("editskip")        // 要跳转到的表格页号
  191.    
  192.     if(nSkipPage > nPage )
  193.         // 向后跳转
  194.         for(var i = 0; i < nSkipPage - nPage; i++)
  195.             goNext(nBaseIndex,nAllStaticIndex,strStaticName,strGridName,nColor)
  196.         end
  197.     else
  198.         // 向前跳转
  199.         for(var i = 0; i < nPage - nSkipPage; i++)
  200.             goPrev(nBaseIndex,nAllStaticIndex,strStaticName,strGridName,nColor)
  201.         end
  202.     end
  203. end


  204. // 填充数据
  205. 功能 按钮0_点击()
  206.     // 1 查询数据库表得到存储结果ret_arr
  207.     var ret,ret_arr,err
  208.     ret = sqlitesqlarray("rc:myTest","select * from emp",ret_arr)
  209.     // 2 填充结果数据到表格
  210.     gridfillarraydata("grid",ret_arr)
  211.    
  212.     initData(nBaseIndex,nAllStaticIndex,"custom",#ff0000)
  213. 结束

  214. // 设置分页显示
  215. 功能 按钮1_点击()
  216.     //这里添加你要执行的代码
  217.     var nRow = editgettext("editrows")
  218.     gridsetshowpagemode("grid",nRow)
  219.    
  220.     initData(nBaseIndex,nAllStaticIndex,"custom",#ff0000)
  221. 结束




  222. // 显示上一页数据
  223. 功能 按钮2_点击()
  224.     //这里添加你要执行的代码
  225.    
  226.     gridgetcurpageindex("grid")
  227.    
  228.     goPrev(nBaseIndex,nAllStaticIndex,"custom","grid",#ff0000)
  229. 结束



  230. // 显示下一页数据
  231. 功能 按钮3_点击()
  232.     //这里添加你要执行的代码
  233.    
  234.     gridgetcurpageindex("grid")
  235.    
  236.     goNext(nBaseIndex,nAllStaticIndex,"custom","grid",#ff0000)
  237. 结束


  238. // 退出分页显示
  239. 功能 按钮8_点击()
  240.     //这里添加你要执行的代码
  241.     gridcancelshowpagemode("grid")
  242.    
  243.     initData(nBaseIndex,nAllStaticIndex,"custom",#ff0000)
  244. 结束


  245. 功能 custom1_点击()
  246.     //这里添加你要执行的代码
  247.     goCustom(1,nAllStaticIndex,"custom","grid",#ff0000)
  248. 结束


  249. 功能 custom2_点击()
  250.     //这里添加你要执行的代码
  251.     goCustom(2,nAllStaticIndex,"custom","grid",#ff0000)
  252. 结束


  253. 功能 custom3_点击()
  254.     //这里添加你要执行的代码
  255.     goCustom(3,nAllStaticIndex,"custom","grid",#ff0000)
  256. 结束


  257. 功能 custom4_点击()
  258.     //这里添加你要执行的代码
  259.     goCustom(4,nAllStaticIndex,"custom","grid",#ff0000)
  260. 结束


  261. 功能 custom5_点击()
  262.     //这里添加你要执行的代码
  263.     goCustom(5,nAllStaticIndex,"custom","grid",#ff0000)
  264. 结束


  265. 功能 按钮4_点击()
  266.     //这里添加你要执行的代码
  267.     goSkip(nBaseIndex,nAllStaticIndex,"custom","grid",#ff0000)
  268. 结束
复制代码


脚本代码解析:

  1. // 5个快捷标签
  2. var nAllStaticIndex = 5
  3. // 控制真实背景色的位置,其实设为1,表示custom1
  4. var nBaseIndex = 1
  5. // 指定标签滚动时背景的居中位置,一般为标签数量的一半居中,计算方式为: nAllStaticIndex / 2 + 1
  6. var nMidIndex = 3
  7. // 是否需要重新校准,默认0表示false
  8. var isUpdate = 0
复制代码
1.定义 var nAllStaticIndex = 5  表示有5个快捷标签,点击可跳转到对应页面


2.var nBaseIndex = 1 表示跳转的当前页面的红色背景对应的标签,由于代码里面使用了 ""&strStaticName&nMyIndex 连接符形式拼接控件名称,所以这里的起始索引对应的是标签控件的名称,标签名称从“custom1”到“custom5”


3.var nMidIndex = 3 表示当表格分页数大于快捷标签数量时,分页滚动时标签的红色背景应处于居中位置,此时标签的数字发生变动而背景颜色位置不变,这个数字我本来是使用 nAllStaticIndex / 2 + 1 赋值的,但是脚本不支持动态变量赋值,所以这里需要手动计算,最好标签数量为奇数,这样就有居中的效果


4.var isUpdate = 0 是否需要重新校准,当分页数量大于快捷标签数量时,点击靠前或靠后的标签跳转页面后,再点击上页或者下页则对应的标签背景需要重新校准,所以需要一个变量进行控制


脚本自定义功能函数分析:


// 初始化标签
function initData( &nMyIndex, nAllIndex, strStaticName, nColor )

// 校准标签
function updateStatic( &nMyIndex, nAllIndex, strStaticName, strGridName )

// 向前跳转
function goPrev( &nMyIndex, nAllIndex, strStaticName, strGridName, nColor )

// 向后跳转
function goNext( &nMyIndex, nAllIndex, strStaticName, strGridName, nColor )

// 快捷标签跳转,对应点击标签后跳转
function goCustom( nMyIndex, nAllIndex, strStaticName, strGridName, nColor )

// 自选页面跳转,对应编辑框输入页面数字后跳转
function goSkip( &nMyIndex, nAllIndex, strStaticName, strGridName, nColor )

以上6个功能函数将表格的API和标签的数字/背景变化封装了一层,童鞋们也可以单独拆解实现自己想要的功能,这里介绍下参数的意义:

nMyIndex: 对应全局变量 nBaseIndex 表示真实的背景位置
nAllIndex: 对应全局变量nAllStaticIndex 表示标签总数
strStaticName:表示标签名称的数字之前的字符串,例如标签命名 custom1,则这里就是 "custom",注意本实例里面的标签命名是很有规律的
strGridName:表示表格控件的名称
nColor :表示标签背景颜色



实例附件: 表格模拟分页滚动效果.rar (1.61 MB, 下载次数: 669)
回复

使用道具 举报

发表于 2015-4-29 11:33:41 | 显示全部楼层
{:soso_e179:}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条

关闭

小黑屋|TC官方合作论坛 (苏ICP备18045623号)

GMT+8, 2024-5-17 18:22 , Processed in 0.047692 second(s), 25 queries .

Powered by 海安简单软件服务部

© 2008-2019 版权所有 保留所有权利

快速回复 返回顶部 返回列表