马上加入TC
您需要 登录 才可以下载或查看,没有帐号?立即注册  
 
x
 
 本帖最后由 apq0001 于 2015-4-29 11:02 编辑  
 
 
 用到了标签控件的API:  
 标签设置颜色("标签0",#ff00ff,2) // 设置背景透明(0:设置文本颜色,1:设置背景颜色,2:设置背景为透明,此时颜色参数被忽略) 
  
 
首先看看效果展示: 
 
 
 
 
 
脚本代码如下:(复制的代码被消除了高亮,大家还是下载附件看源码比较醒目) 
 
 
- // 5个快捷标签
 
 - var nAllStaticIndex = 5 
 
 - // 控制真实背景色的位置,其实设为1,表示custom1
 
 - var nBaseIndex = 1
 
 - // 指定标签滚动时背景的居中位置,一般为标签数量的一半居中,计算方式为: nAllStaticIndex / 2 + 1
 
 - var nMidIndex = 3
 
 - // 是否需要重新校准,默认0表示false
 
 - var isUpdate = 0
 
  
- // 初始化标签
 
 - function initData( &nMyIndex, nAllIndex, strStaticName, nColor )
 
 -     // 设定默认颜色
 
 -     for(var i = 1; i <= nAllIndex; i++)
 
 -         staticsetcolor(""&strStaticName&i,0,2) // 设置透明色
 
 -         staticsettext(""&strStaticName&i,""&i)
 
 -     end
 
 -     staticsetcolor(""&strStaticName&1,nColor,1)
 
 -     // 初始化参数
 
 -     nMyIndex = 1
 
 - end
 
  
- // 校准标签
 
 - function updateStatic( &nMyIndex, nAllIndex, strStaticName, strGridName )
 
 -     // 得到此时高亮背景标签代表的页数
 
 -     var nPage = staticgettext(""&strStaticName&nMyIndex)
 
 -     if(nMyIndex < nMidIndex)// 如果在左边
 
 -         // 这里校准左边
 
 -         // 如果最左边的标签页数 > 1 并且可以腾出间隔位置的话,
 
 -         // 则调整标签显示数字
 
 -         // 否则调整为 1 2 3 ...
 
 -         var nLeftSpace = nMidIndex - 1
 
 -         if(staticgettext(""&strStaticName&1) > 1 && staticgettext(""&strStaticName&1) - nLeftSpace > 0)
 
 -             for(var i = 1; i <= nAllIndex; i++)
 
 -                 if(i < nMidIndex)
 
 -                     var nData = nPage - (nMidIndex - i)
 
 -                     staticsettext(""&strStaticName&i,""&nData)
 
 -                 elseif(i == nMidIndex)
 
 -                     staticsettext(""&strStaticName&i,""&nPage)
 
 -                 else
 
 -                     var nData = nPage + (i - nMidIndex)
 
 -                     staticsettext(""&strStaticName&i,""&nData)
 
 -                 end
 
 -             end
 
 -             nMyIndex = nMidIndex
 
 -         else
 
 -             for(var i = 1; i <= nAllIndex; i++)
 
 -                 staticsettext(""&strStaticName&i,""&i)
 
 -             end
 
 -             nMyIndex = nAllIndex - nPage // 所有标签个数 - (当前背景标签代表的表格页面索引和第一页之间的差值)
 
 -         end
 
 -     else
 
 -         // 这里校准右边
 
 -         // 如果最右边的标签页数 + nMidIndex <= 总分页数并且可以腾出间隔位置的话,
 
 -         // 则调整标签显示数字
 
 -         // 否则调整为 ...nAllindex - 1,nAllIndex
 
 -         var nRightSpace = nAllIndex - nMidIndex
 
 -         var nGridPages = gridgetallpagecount(""&strGridName)
 
 -         if(staticgettext(""&strStaticName&nAllIndex) < nGridPages && staticgettext(""&strStaticName&nAllIndex) + nRightSpace <= nGridPages)
 
 -             for(var i = 1; i <= nAllIndex; i++)
 
 -                 if(i < nMidIndex)
 
 -                     var nData = nPage - (nMidIndex - i)
 
 -                     staticsettext(""&strStaticName&i,""&nData)
 
 -                 elseif(i == nMidIndex)
 
 -                     staticsettext(""&strStaticName&i,""&nPage)
 
 -                 else
 
 -                     var nData = nPage + (i - nMidIndex)
 
 -                     staticsettext(""&strStaticName&i,""&nData)
 
 -                 end
 
 -             end
 
 -             nMyIndex = nMidIndex
 
 -         else
 
 -             for(var i = 1; i <= nAllIndex; i++)
 
 -                 staticsettext(""&strStaticName&i,""&(nGridPages - nAllIndex + i))
 
 -             end
 
 -             nMyIndex = nAllIndex - (nGridPages - nPage)
 
 -         end
 
 -     end
 
 -     // 将校准设为false
 
 -     isUpdate = 0
 
 - end
 
  
 
- // 向前跳转
 
 - function goPrev( &nMyIndex, nAllIndex, strStaticName, strGridName, nColor )
 
 -     if(staticgettext(""&strStaticName&nMidIndex) < 1)
 
 -         return
 
 -     end
 
 -     
 
 -     // 显示表格分页数据
 
 -     gridshowprevpagedata("grid")
 
 -     
 
 -     // 显示表格序号跳转
 
 -     // 停止条件:真实位置处于最前 且 第一个标签 = 页数1
 
 -     if(nMyIndex == 1 && staticgettext(""&strStaticName&nMyIndex) == 1)
 
 -         return
 
 -     end
 
 -     
 
 -     var nPrevControl = 0
 
 -     
 
 -     // 设定默认颜色
 
 -     for(var i = 1; i <= nAllIndex; i++)
 
 -         staticsetcolor(""&strStaticName&i,0,2) // 设置透明色
 
 -     end
 
 -     
 
 -     // 如果点击了自定义标签显示页面,则需要重新校准标签的数字和背景
 
 -     if(isUpdate)
 
 -         updateStatic( nMyIndex, nAllIndex, strStaticName, strGridName )
 
 -     end
 
 -     
 
 -     // 控制标签滚动
 
 -     if(staticgettext(""&strStaticName&1) > 1 && nMyIndex == nMidIndex)
 
 -         nPrevControl = 1
 
 -         for(var i = 1; i <= nAllIndex; i++)
 
 -             var m = staticgettext(""&strStaticName&i)
 
 -             staticsettext(""&strStaticName&i,""&(m-1))
 
 -         end
 
 -     end
 
 -     
 
 -     
 
 -     if(nMyIndex > nMidIndex || staticgettext(""&strStaticName&1)  == 1)
 
 -         if(!nPrevControl)
 
 -             nMyIndex--
 
 -         end
 
 -         
 
 -     end
 
 -     
 
 -     staticsetcolor(""&strStaticName&nMyIndex,nColor,1)
 
 - end
 
  
- // 向后跳转
 
 - function goNext( &nMyIndex, nAllIndex, strStaticName, strGridName, nColor )
 
 -     if(staticgettext(""&strStaticName&nMidIndex) > gridgetallpagecount(""&strGridName))
 
 -         return
 
 -     end
 
 -     
 
 -     // 显示表格分页数据
 
 -     gridshownextpagedata("grid")
 
 -     
 
 -     // 停止滚动条件:真实位置已经到最后,且 最后一个标签 = 表格所有页数
 
 -     if(nMyIndex == nAllIndex && staticgettext(""&strStaticName&nMyIndex) == gridgetallpagecount(""&strGridName))
 
 -         return
 
 -     end
 
 -     
 
 -     var nNextControl = 0
 
 -     
 
 -     // 设定默认颜色
 
 -     for(var i = 1; i <= nAllIndex; i++)
 
 -         staticsetcolor(""&strStaticName&i,0,2) // 设置透明色
 
 -     end
 
 -     
 
 -     // 如果点击了自定义标签显示页面,则需要重新校准标签的数字和背景
 
 -     if(isUpdate)
 
 -         updateStatic( nMyIndex, nAllIndex, strStaticName, strGridName )
 
 -     end
 
 -     
 
 -     // 控制标签滚动,如果最后一个标签 < 表格总分页,则对标签数字进行更新模拟滚动效果
 
 -     if(staticgettext(""&strStaticName&nAllIndex) < gridgetallpagecount(""&strGridName) && nMyIndex == nMidIndex)
 
 -         nNextControl = 1
 
 -         for(var i = 1; i <= nAllIndex; i++)
 
 -             var m = staticgettext(""&strStaticName&i)
 
 -             staticsettext(""&strStaticName&i,""&(m+1))
 
 -         end
 
 -     end
 
 -     
 
 -     // 如果真实位置 < 指定的居中位置则移动其背景色位置,或者最后一个标签已经超出表格分页
 
 -     if(nMyIndex < nMidIndex || staticgettext(""&strStaticName&nAllIndex) >= gridgetallpagecount("grid"))
 
 -         if(!nNextControl)
 
 -             nMyIndex++
 
 -         end
 
 -         
 
 -     end
 
 -     
 
 -     staticsetcolor(""&strStaticName&nMyIndex,nColor,1)
 
 - end
 
  
- // 快捷标签跳转
 
 - function goCustom( nMyIndex, nAllIndex, strStaticName, strGridName, nColor )
 
 -     if(nMyIndex > gridgetallpagecount(""&strGridName) || nMyIndex < 1)
 
 -         return
 
 -     end
 
 -     
 
 -     // 设定默认颜色
 
 -     for(var i = 1; i <= nAllIndex; i++)
 
 -         staticsetcolor(""&strStaticName&i,0,2) // 设置透明显示
 
 -     end
 
 -     staticsetcolor(""&strStaticName&nMyIndex,nColor,1) // 取消透明显示
 
 -     gridshowcustompagedata(""&strGridName,staticgettext(""&strStaticName&nMyIndex)-1)
 
 -     nBaseIndex = nMyIndex
 
 -     
 
 -     // 需要校准
 
 -     isUpdate = 1
 
 - end
 
  
- // 自选页面跳转
 
 - function goSkip( &nMyIndex, nAllIndex, strStaticName, strGridName, nColor )
 
 -     var nPage = staticgettext("custom"&nMyIndex) // 标签高亮背景对应的表格页号
 
 -     var nSkipPage = editgettext("editskip")        // 要跳转到的表格页号
 
 -     
 
 -     if(nSkipPage > nPage )
 
 -         // 向后跳转
 
 -         for(var i = 0; i < nSkipPage - nPage; i++)
 
 -             goNext(nBaseIndex,nAllStaticIndex,strStaticName,strGridName,nColor)
 
 -         end
 
 -     else
 
 -         // 向前跳转
 
 -         for(var i = 0; i < nPage - nSkipPage; i++)
 
 -             goPrev(nBaseIndex,nAllStaticIndex,strStaticName,strGridName,nColor)
 
 -         end
 
 -     end
 
 - end
 
  
 
- // 填充数据
 
 - 功能 按钮0_点击()
 
 -     // 1 查询数据库表得到存储结果ret_arr
 
 -     var ret,ret_arr,err
 
 -     ret = sqlitesqlarray("rc:myTest","select * from emp",ret_arr)
 
 -     // 2 填充结果数据到表格
 
 -     gridfillarraydata("grid",ret_arr)
 
 -     
 
 -     initData(nBaseIndex,nAllStaticIndex,"custom",#ff0000)
 
 - 结束
 
  
- // 设置分页显示
 
 - 功能 按钮1_点击()
 
 -     //这里添加你要执行的代码
 
 -     var nRow = editgettext("editrows")
 
 -     gridsetshowpagemode("grid",nRow)
 
 -     
 
 -     initData(nBaseIndex,nAllStaticIndex,"custom",#ff0000)
 
 - 结束
 
  
 
 
 
- // 显示上一页数据
 
 - 功能 按钮2_点击()
 
 -     //这里添加你要执行的代码
 
 -     
 
 -     gridgetcurpageindex("grid")
 
 -     
 
 -     goPrev(nBaseIndex,nAllStaticIndex,"custom","grid",#ff0000)
 
 - 结束
 
  
 
 
- // 显示下一页数据
 
 - 功能 按钮3_点击()
 
 -     //这里添加你要执行的代码
 
 -     
 
 -     gridgetcurpageindex("grid")
 
 -     
 
 -     goNext(nBaseIndex,nAllStaticIndex,"custom","grid",#ff0000)
 
 - 结束
 
  
 
- // 退出分页显示
 
 - 功能 按钮8_点击()
 
 -     //这里添加你要执行的代码
 
 -     gridcancelshowpagemode("grid")
 
 -     
 
 -     initData(nBaseIndex,nAllStaticIndex,"custom",#ff0000)
 
 - 结束
 
  
 
- 功能 custom1_点击()
 
 -     //这里添加你要执行的代码
 
 -     goCustom(1,nAllStaticIndex,"custom","grid",#ff0000)
 
 - 结束
 
  
 
- 功能 custom2_点击()
 
 -     //这里添加你要执行的代码
 
 -     goCustom(2,nAllStaticIndex,"custom","grid",#ff0000)
 
 - 结束
 
  
 
- 功能 custom3_点击()
 
 -     //这里添加你要执行的代码
 
 -     goCustom(3,nAllStaticIndex,"custom","grid",#ff0000)
 
 - 结束
 
  
 
- 功能 custom4_点击()
 
 -     //这里添加你要执行的代码
 
 -     goCustom(4,nAllStaticIndex,"custom","grid",#ff0000)
 
 - 结束
 
  
 
- 功能 custom5_点击()
 
 -     //这里添加你要执行的代码
 
 -     goCustom(5,nAllStaticIndex,"custom","grid",#ff0000)
 
 - 结束
 
  
 
- 功能 按钮4_点击()
 
 -     //这里添加你要执行的代码
 
 -     goSkip(nBaseIndex,nAllStaticIndex,"custom","grid",#ff0000)
 
 - 结束
 
 
  复制代码 
 
脚本代码解析: 
 
- // 5个快捷标签
 
 - var nAllStaticIndex = 5 
 
 - // 控制真实背景色的位置,其实设为1,表示custom1
 
 - var nBaseIndex = 1
 
 - // 指定标签滚动时背景的居中位置,一般为标签数量的一半居中,计算方式为: nAllStaticIndex / 2 + 1
 
 - var nMidIndex = 3
 
 - // 是否需要重新校准,默认0表示false
 
 - 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, 下载次数: 662)
 
 |