马上加入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, 下载次数: 669)
|