Office中国论坛/Access中国论坛

标题: [技巧]最简单的滚动显示文本函数 [打印本页]

作者: hunrybecky    时间: 2008-3-19 19:32
标题: [技巧]最简单的滚动显示文本函数
把下面的代码复制到一个新建的模块中,然后在窗体的TIMER事件中引用改函数。支持任何多个文本


Option Compare Database
Dim ShiftID As Integer
Function hy_EffectShiftText(ctl As Control, ParamArray strText() As Variant)
'===============================================================================
'功能描述:切换显示任何多个用户输入的提示文字
'参数说明:ctl为文本或标签控件
'返回参数:hy_EffectShiftText Me.Text100, "先显示我", "再显示你","接着再显示我"
'使用注意:必须要在模块级声明变量ShiftID,而不能纳入函数内声明
'创建日期;2008-03-19
'===============================================================================
On Error Resume Next
ShiftID = ShiftID + 1 '时间变换一次则ShiftID自动加1
If ShiftID > UBound(strText()) Then '如果ShiftID大于数组变量strText()的个数则重置为0
    ShiftID = 0
End If
If TypeOf ctl Is Label Then '根据不同的控件类型不文本赋给控件或其标题
    ctl.Caption = strText(ShiftID)
ElseIf TypeOf ctl Is TextBox Then
    ctl = strText(ShiftID)
End If
End Function

但是有一个问题,我有一个表,这个表中保存了提示信息的所有内容主题,如何使用ADO把表里的所有记录的主题传递给这个函数的参数?
如果能够实现这个功能,那么就可以实现如同一些ERP在窗体上滚动显示提示信息,并点击提示信息时可以跳转到相应的窗体。

[ 本帖最后由 hunrybecky 于 2008-3-19 20:18 编辑 ]
作者: tmtony    时间: 2008-3-19 20:33
出作品了, 收藏了!!
作者: huangqinyong    时间: 2008-3-19 20:40

作者: hunrybecky    时间: 2008-3-20 09:56
原帖由 tmtony 于 2008-3-19 20:33 发表
出作品了, 收藏了!!


你通用页脚中看到你用到这个功能,但是发现你写的非常复杂,所以我就简化了一下。
作者: andymark    时间: 2008-3-20 10:08
收藏先[:12]
作者: hunrybecky    时间: 2008-3-20 14:43
咱家是猫给出的另一种解决方案
Function hy_EffectShiftTextOne(ctl As Control, strSplitText As String, strDelimiter As String)
'===============================================================================
'功能描述:在指定控件中交替切换显示任何多个用户输入的提示文字
'参数说明:ctl为文本或标签控件;strSplitText为多个组合文本,组合的分割符号可以使用strDelimiter来指定,一般建议用";"
'使用范例:hy_EffectShiftText Me.Text100, "先显示我;再显示你;接着再显示我",";"
'使用注意:必须要在模块级声明变量ShiftID,而不能纳入函数内声明
'相关调用:hy_CountInStr计算字符出现的个数
'函数参考:咱家是猫
'创建日期;2008-03-19
'===============================================================================
On Error Resume Next
ShiftID = ShiftID + 1 '时间变换一次则ShiftID自动加1
If ShiftID > hy_CountInStr(strSplitText, strDelimiter) Then '如果ShiftID大于分割符的个数则重置为0
    ShiftID = 0
End If
If TypeOf ctl Is Label Then '根据不同的控件类型不文本赋给控件或其标题
    ctl.Caption = Split(strSplitText, strDelimiter, -1)(ShiftID)
ElseIf TypeOf ctl Is TextBox Then
    ctl = Split(strSplitText, strDelimiter, -1)(ShiftID)
End If
End Function

猫的这个函数使用比较灵活,可以把表的记录读出来,然后赋给strSplitText变量。
另外这个函数中引用了另外一个函数。
Function hy_CountInStr(strAllString As String, strSpeString As String) As String
'===============================================================================
'功能描述:计算字符串中指定字符的个数
'参数说明:strAllString整个字符串;strSpeString需要搜索的字符串,可以为单字符,也可以为多字符
'返回参数:hy_EffectShiftText Me.Text100, "先显示我", "再显示你","接着再显示我"
'使用范例:hy_CountInStr("普通图书;社科图书;教辅图书;文学图书;古籍图书;儿童图书","图书")
'函数参考:http://www.huzf.com/article.asp?id=138
'创建日期;2008-03-20
'===============================================================================
Dim i As Integer, j As Integer
For i = 1 To Len(strAllString)
    If Mid(strAllString, i, Len(strSpeString)) = strSpeString Then
        j = j + 1
    End If
Next i
hy_CountInStr = j
End Function

[ 本帖最后由 hunrybecky 于 2008-3-20 14:49 编辑 ]
作者: elong    时间: 2009-8-22 19:59

作者: chaojianan    时间: 2009-10-11 20:23
谢谢分享。
作者: yodong    时间: 2010-1-24 21:04
看看,应该实用.




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3