标题:如何让Inputbox函数窗体的文本框内容用****显示
只看楼主
jony
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2007-8-14
 问题点数:0 回复次数:6 
如何让Inputbox函数窗体的文本框内容用****显示

因为我想调用VBA中的Inputbox函数,利用此窗体做密码验证(需要提取此函数的返回值),所以要求窗体文本框内容 要用 **** 显示.
请各位大虾指点!

或还有其他办法吗?

搜索更多相关主题的帖子: Inputbox 函数 窗体 文本 
2007-08-17 12:28
simpson
Rank: 3Rank: 3
等 级:论坛游民
威 望:7
帖 子:863
专家分:17
注 册:2006-11-16
得分:0 

自己做个inputbox窗体啊


全国最大的 Java专业电子书免费分享[url]http:///in.asp?id=xrmao[/url]
2007-08-17 20:44
adou
Rank: 3Rank: 3
等 级:论坛游民
威 望:7
帖 子:863
专家分:81
注 册:2006-8-24
得分:0 
有道理,完全可以自已做一个符合这种条件的窗体的,

大家好,才是真的好!
2007-08-18 08:56
jony
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2007-8-14
得分:0 

同意以上两位楼主的方法。
谢谢!


日日行,不怕千万里;常常做,不怕千万事。永恒者专注
2007-08-18 23:11
心中有剑
Rank: 2
等 级:新手上路
威 望:5
帖 子:611
专家分:0
注 册:2007-5-18
得分:0 

Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" _
(ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long

Private Const EM_SETPASSWORDCHAR = &HCC

'hwnd 标识与定时器相关的窗口
'nIDEvent 指定一个非零定时器事件标识符
'uElapse 指定定时器事件之间的时间间隔
'lpTimerFunc 表示定时器事件发生后接收详细的函数的过程实例地址
Public Declare Function SetTimer Lib "user32" _
(ByVal hwnd As Long, _
ByVal nIDEvent As Long, _
ByVal uElapse As Long, _
ByVal lpTimerFunc As Long) _
As Long

Private Declare Function KillTimer Lib "user32" _
(ByVal hwnd As Long, _
ByVal nIDEvent As Long) _
As Long

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, _
ByVal lpWindowName As String) _
As Long

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

Dim m_lngTimerId As Long

Private Sub main()

'建立API时间,句柄参数这里没有窗体赋值为0,但需要保存计时器标识符供KillTimer使用
m_lngTimerId = SetTimer(0, 0, 1, AddressOf TimerProc)

'Prompt作为对话框消息出现的字符串表达式。
'Title显示对话框标题栏中的字符串表达式。如果省略 title,则把应用程序名放入标题栏中。
'Default显示文本框中的字符串表达式,在没有其它输入时作为缺省值。如果省略 default,则文本框为空。
Call InputBox("请输入姓名", "输入框")

End Sub

Public Sub TimerProc(ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long)

Dim lngHwnd As Long

lngHwnd = FindWindow(vbNullString, "输入框") '参数复制是Input的Title参数
lngHwnd = FindWindowEx(lngHwnd, 0, "Edit", vbNullString) '继续查找子窗口,使用TextBox类名"Edit"

If lngHwnd Then

Call PostMessage(lngHwnd, EM_SETPASSWORDCHAR, &H2A, 0) '&H2A是什么?就是*的AscII码42,这个参数为""就是不显示密码了。
Call KillTimer(0, m_lngTimerId) '关闭计时器

End If

End Sub
vb里可以这么做,不过感觉太翻


2007-08-21 17:39
adou
Rank: 3Rank: 3
等 级:论坛游民
威 望:7
帖 子:863
专家分:81
注 册:2006-8-24
得分:0 
竟然还动用了API,真是……简单事情复杂化。

大家好,才是真的好!
2007-08-23 16:39
jony
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2007-8-14
得分:0 

5楼朋友的做法是可以,确实 有点烦,而且那个计时期也消耗系统资源。
我是在EXCEL VBA里的一个表中要调用好几次inputbox做密码验证的,用上面方法
是可以实现* 号显示,但是我发现在第一次调用inputbox 后只要那个EXCEL工作簿
还在开着的情况下,那个计时器就不会自动随inputbox调用完关闭而关闭,而是一直
在运算的,消耗系统资源。 还有什么好点方法吗?


日日行,不怕千万里;常常做,不怕千万事。永恒者专注
2007-08-23 22:28



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-163434-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.685020 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved