说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

VB如何在VB中制作不回显的文本框

HTML文档下载 WORD文档下载 PDF文档下载
VB如何在VB中制作不回显的文本框
在应用程序中,有时需要用户录入一些不宜在屏幕上直接显示的内容,如用户口令或机密数据。我们已熟知,在Foxbase/Foxpro中这一功能可以用SETCONSOLEOFF命令关闭向屏幕的回显来实现。那么,在VisualBasicforWin-dows中如何做到这一点呢?

一个容易想到的方法是利用文本框的Key-Press事件,但为了处理用户对文字的编辑(如删除、插入),则还要再用其它变量存放真正输入的内容,而且必须书写大量复杂的控制程序。实践证明,这种方法比较繁琐,不便使用。

笔者在用VB编程时发现,Windows文本框可以响应许多消息,那么,可不可以利用WindowsAPI函数sendmessage将控制特性的消息传递给文本框呢?如果可行,则可以将使目标以密码形式输出的消息传递给文本框,不就可以制作出不回显文字的文本框了吗?

答案是肯定的。笔者使用以上思路实现了这一功能。以下是程序中用到的几个API函数和有关的消息:

getfocus():返回获得输入焦点的目标句柄;

getwindowlong():取得指定目标的信息,第二个参数为GWL_STYLE时将返回目标的“风格”属性;

setwindowlong():把新的属性值赋予指定的目标。该函数的三个参数分别为目标的句柄、属性类型、新属性值;

sendmessage():向目标发送一条消息。该函数的四个参数分别为接收消息的目标句柄、消息、消息参数一、消息参数二;

GWL_STYLE(程序中简写为STYLE):其值为-16,表示目标的“风格”;

ES_PASSWORD(程序中简写为PASS)简写为PASS):其值为&H20,表示目标具有录入口令的属性,即在录入时不回显;

EM_SETPASSWORDCHAR(程序中简写为PASSCHAR):其值为&H41C,表示传递密码特性。用sendmessage向目标传递此消息成功,则目标会将自身的输出信息以指定的密码形式给出。

以下程序,通过sendmessage函数修改文本框Text1的“风格”属性,使其以指定的密码形式输出———不管用户录入的是什么内容,都以相同数量的“*”来显示。用户可以通过单点“Command1”按钮来显示Text1.Text的真正内容。

DeclareFunctiongetfocusLib“user”()AsInteger
DeclareFunctiongetwindowlongLib“user”(ByVal handAsInteger,ByVal indexAsInte-ger)AsLong
DeclareFunctionsetwindowlongLib“user”(ByVal handAsInteger,ByVal indexAsInte-ger,ByVal newflagAsLong)AsLong
DeclareFunctionsendmessageLib“user”(ByVal handAsInteger,ByVal msg As Integer,ByVal wparaAsInteger,ByVallparaAsLong)AsLong
ConstSTYLE=-16
ConstPASS=&H20

ConstPASSCHAR=&H41C

SubCommand1_Click()
MsgBoxtext1.Text
EndSub
SubCommand2_Click()
End
EndSub
SubForm_Load()
Show
text1.SetFocus
hand%=getfocus()
flag&=getwindowlong(hand%,STYLE)OrPASS
flag&=setwindowlong(hand%,STYLE,flag&)
flag&=sendmessage(hand%,PASS-CHAR,Asc(“*”),0&)
End Sub
美国高通公司执行董事长Paul E. Jacobs:移动科技——精彩现在,辉煌未来 告别公用云,Instagram已将服务迁至Facebook数据中心 华为助力凤凰实现全媒体战略 跨平台2D/3D游戏开发框架libGDX发布1.2.0更新 Docker CEO Ben Golub:Docker借助开源、天时走向成功 通过sql语句查询excel表!!!! 关于win 2003的安全问题 多个字段组成的索引如何使用 怎样把像"6"的字符串变成"00006"的字符串呢? 硬盘在用scandisk时发现错误,但中途...... 菜鸟级问题 如何用C++或者VC++调用编译好的 XXX.exe 程序 一个虚函数的问题。请各位大虾指教! 不能删除文件 (1)若x∈【0,2∏】,求函数y=根号根号3/2 面试时被问题“以前工作中压力最大的事是什么,怎么解 “你如何解决遇到的困难?”举例说明!不要提示,不要 将函数y=sinx的图像向下平移1个单位,再把所得 把函数y=sin(x+π/6)的图像向左平移π/3 把函数y=sin(2x+π/4﹚的图像向右平移π/ 把函数y=sin(2x+π/4)的图像向右平移3π [原创]男人在工作上遇到困难时,希望身边的女人做什 工作中遇到困难,该怎么克服. 2013中国食博会11月开幕 境外食独联体举行峰会讨论打击犯罪和反恐韩媒称一名朝鲜驻埃塞俄比亚外交官8月美女子为陌生男子捐肾 三年后二人喜结泰国拟向外国游客征收入境税并提高机场基本公共服务领域试点政府向社会力量购今日速览普京:俄已经从乌克兰边境地区撤军时间都去哪儿了火灾隐患严重会宁一超市被罚6000元秀逗召唤师异武行道之痕技术宅的无限旅行笔记超脱七界金山寺旅游汉明长城旅游广东大峡谷旅游南水水库旅游栖灵塔旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘