设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 2431|回复: 8
打印 上一主题 下一主题

[模块/函数] [技巧]最简单的滚动显示文本函数

[复制链接]
跳转到指定楼层
1#
发表于 2008-3-19 19:32:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
把下面的代码复制到一个新建的模块中,然后在窗体的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 编辑 ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅

点击这里给我发消息

2#
发表于 2008-3-19 20:33:44 | 只看该作者
出作品了, 收藏了!!
3#
发表于 2008-3-19 20:40:06 | 只看该作者
4#
 楼主| 发表于 2008-3-20 09:56:57 | 只看该作者
原帖由 tmtony 于 2008-3-19 20:33 发表
出作品了, 收藏了!!


你通用页脚中看到你用到这个功能,但是发现你写的非常复杂,所以我就简化了一下。
5#
发表于 2008-3-20 10:08:50 | 只看该作者
收藏先[:12]
6#
 楼主| 发表于 2008-3-20 14:43:26 | 只看该作者
咱家是猫给出的另一种解决方案
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 编辑 ]
7#
发表于 2009-8-22 19:59:34 | 只看该作者
8#
发表于 2009-10-11 20:23:55 | 只看该作者
谢谢分享。
9#
发表于 2010-1-24 21:04:07 | 只看该作者
看看,应该实用.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-21 20:30 , Processed in 0.094128 second(s), 32 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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