设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

[Access本身] 关于inputbox输入星号引起的疑问,高手请!特别是tanhong

[复制链接]
跳转到指定楼层
1#
发表于 2010-1-6 20:31:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
参阅了tanhong 的一个作品,感觉很好,但突然有一个疑问,就是在同一个过程中,要用到两次inpubbox,一次是要用到星号,另一次不要用到星号,请问在这种情况下,tanhong 作品中的代码写法是否会引起程序不稳?(试过好像没发现明显问题,但总有这样的疑惑),期待高手解答,如果tanhong 本人看到给予解答就更好了。(有附件,tanhong 的这个附件是开放源代码的。)谢谢。

本帖子中包含更多资源

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

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2010-1-6 23:27:01 | 只看该作者
本帖最后由 红尘如烟 于 2010-1-6 23:30 编辑

不存在你说的问题,它这个大致是先创建一个计时器,打开InputBox对话框后,在计时器触发事件中将对话框输入设为星号掩码
你说的一个有星号是因为创建了计时器,一个没有星号是没有创建计时器,两者没有什么关联影响
可以按照这个思路把InputBox函数扩展一下改成InputBoxEx,增加一个Asterisk参数,表示是否将输入框中输入的内容显示为星号,代码如下:
  1. Option Explicit
  2. Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
  3. Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
  4. Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
  5. Private Declare Function timeSetEvent Lib "winmm.dll" (ByVal uDelay As Long, ByVal uResolution As Long, ByVal lpFunction As Long, ByVal dwUser As Long, ByVal uFlags As Long) As Long
  6. Private Declare Function timeKillEvent Lib "winmm.dll" (ByVal uID As Long) As Long
  7. Private m_lTimeID As Long
  8. Private m_InputBoxTitle As String
  9. Private m_PasswordMask As Boolean

  10. Public Sub TimeProc(ByVal uID As Long, ByVal uMsg As Long, ByVal dwUser As Long, ByVal dw1 As Long, ByVal dw2 As Long)
  11. On Error Resume Next
  12.     Dim hwnd As Long
  13.     Dim wMsg As Long
  14.    
  15.     hwnd = FindWindow("#32770", m_InputBoxTitle)
  16.     If hwnd <> 0 Then
  17.         hwnd = FindWindowEx(hwnd, 0, "EDIT", vbNullString)
  18.         wMsg = IIf(m_PasswordMask, &HCC, 0)
  19.         SendMessage hwnd, wMsg, 42, 0
  20.         timeKillEvent m_lTimeID
  21.     End If
  22. End Sub

  23. 'InputBox函数扩展,增加了是否以星号显示输入内容
  24. '扩展Asterisk参数:是否将输入的内容显示为星号,默认为否(false),其它参数和InputBox函数的参数相同

  25. Public Function InputBoxEx(Prompt, Optional Title, Optional Asterisk As Boolean = False, Optional Default, _
  26.                            Optional XPos, Optional YPos, Optional HelpFile, Optional Context) As String
  27. On Error Resume Next
  28.    
  29.     m_PasswordMask = Asterisk
  30.     If IsMissing(Title) Then Title = Space(16)
  31.     m_InputBoxTitle = Title
  32.     m_lTimeID = timeSetEvent(10, 0, AddressOf TimeProc, 1, 1)
  33.     InputBoxEx = InputBox(Prompt, Title, Default, XPos, YPos, HelpFile, Context)
  34.    
  35. End Function
复制代码
3#
 楼主| 发表于 2010-1-7 21:39:23 | 只看该作者
非常感谢“红尘如烟”!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-6-9 14:35 , Processed in 0.142318 second(s), 27 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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