Office中国论坛/Access中国论坛
标题: [分享]一个判断用户是否按下了InputBox的取消按钮的例子 [打印本页]
作者: andymark 时间: 2006-10-27 05:24
标题: [分享]一个判断用户是否按下了InputBox的取消按钮的例子
作者: 一点通 时间: 2006-10-27 07:04
请说明一下在什么场合能派上用场?
作者: wuaza 时间: 2006-10-27 16:45
Cancel = Not CBool(StrPtr(str))
这一句不理解。
作者: andymark 时间: 2006-10-27 17:35
以下是引用一点通在2006-10-26 23:04:00的发言:
请说明一下在什么场合能派上用场?
对inputbox 的用法相信大家并不陌生,也经常会用到,但是可否留意用inputbox传递变量,有时候在处理这个变量时按取消会出错,或者就把当它作为一个if ..else 来用吧, if 按确定 就.....否则 就....
作者: andymark 时间: 2006-10-27 17:50
以下是引用wuaza在2006-10-27 8:45:00的发言:
Cancel = Not CBool(StrPtr(str))
这一句不理解。
StrPtr
Strings in Visual Basic are stored as BSTR's. If you use the VarPtr on a variable of type String, you will get the address of the BSTR, which is a pointer to a pointer of the string. To get the address of the string buffer itself, you need to use the StrPtr function. This function returns the address of the first character of the string. Take into account that Strings are stored as UNICODE in Visual Basic.
To get the address of the first character of a String, pass the String variable to the StrPtr function.
[此贴子已经被作者于2006-10-27 9:51:15编辑过]
作者: fan0217 时间: 2006-10-27 17:59
将andymark的例子改成了函数,方便大家调用:
Type InputInfo
Value As String
Buttons As Integer
End Type
Public Function MyInputBox(Message As String, Optional Title As String = "请输入参考值:", Optional Default As String = "") As InputInfo
Dim strValue As String
Dim blnCancel As Boolean
strValue = InputBox(Message, Title, Default)
blnCancel = CBool(StrPtr(strValue))
If blnCancel Then
MyInputBox.Buttons = vbOK
MyInputBox.Value = strValue
Else
MyInputBox.Buttons = vbCancel
MyInputBox.Value = ""
End If
End Function
调用例子:
Private Sub Command1_Click()
Dim intButtons As Integer
Dim MyInfo As InputInfo
MyInfo = MyInputBox("你好")
intButtons = MyInfo.Buttons
If intButtons = vbOK Then
MsgBox "你按了'确定'键"
MsgBox "你输入的是:" & MyInfo.Value
Else
MsgBox "你按了'取消'键"
End If
End Sub
[此贴子已经被作者于2006-10-27 10:16:17编辑过]
作者: fan0217 时间: 2006-10-27 18:04
网络上搜索的一些关于StrPtr的一些资料。贴在这里供大家参考:
StrPtr
该函数主要用来产生高效的UNICODE API调用。在VB4,UNICODE形式的API函数的调用必须借助于Byte数组,例如:
Declare Sub MyUnicodeCall Lib "MyUnicodeDll.dll" (pStr as Byte)
Sub MakeCall (MyStr as String)
Dim bTmp() as Byte
bTmp=MyStr & vbNullChar
MyUnicodeCall bTmp(0)
MyStr=bTmp
MyStr=left(MyStr, Len(MyStr)-1)
End Sub
如果使用StrPtr,上面的代码精简为:
Declare Sub MyUnicodeCall Lib "MyUnicodeDll.dll" (pStr as Byte)
Sub MakeCall (MyStr as String)
MyUnicodeCall StrPtr(MyStr)
End Sub
VarPtr/StrPtr/ObjPtr的执行速度非常非常快,因此调用UNICODE函数所赞成有系统负担实际上小于调用相对应的ANSI函数。因为前者不需进行转换。
StrPtr还能用于优化ANSI API函数的调用。在调用时使用StrConv和StrPtr就能避免将一个字符串变量多资传递给函数以及为每个调用而执行转换操作所造成的系统负担。例如原来的:
Declare Sub MyAnsiCall Lib "MyAnsiDll.dll" (ByVal pStr As String)
MyAnsiCall MyStr
现在变为:
Declare Sub MyAnsiCall Lib "MyAnsiDll.dll" (ByVal pStr As Long)
MyStr=StrConv(MyStr,vbFromUnicode)
MyAnsiCall StrPtr(MyStr)
MyStr=StrConv(MyStr,vbUnicode) 注释:并不总是要求
StrPtr还是唯一能直观地告诉你空字符串和null字符串的不同的方法。对于null字符串(vbNullString),StrPtr的返回值为0,而对于空字符串,函数的返回值为非零。
作者: fswxs 时间: 2007-8-30 09:56
又没钱了,为了下载要回复,,,,
作者: hugcy110 时间: 2007-8-30 11:10
正好
我现在就能用到这个
谢谢
作者: tisowo 时间: 2008-5-5 20:47
[:34] [:34] [:34] [:34]
作者: t小宝 时间: 2008-5-6 00:18
才发现,太有用了,还有StrPtr这个东西[:35]
作者: goto2008 时间: 2008-5-7 09:38
不知道这东东能用在什么场合?
作者: ABCaccess 时间: 2008-6-1 01:14
谢谢你与大众分享
作者: huangqinyong 时间: 2008-9-16 12:43
[:47] 先收藏了
作者: 小小鸟 时间: 2008-11-13 13:10
谢谢分享,下载学习。
作者: WSDMZZG 时间: 2009-9-17 17:18
看一下
作者: chaojianan 时间: 2009-10-10 21:07
谢谢分享。
作者: yanwei82123300 时间: 2010-4-24 08:14
thank you sharting it
作者: 205226 时间: 2010-6-4 12:05
学习学习
作者: zczc123 时间: 2011-5-26 14:07
找到了,谢谢
作者: zzf9008 时间: 2012-6-13 21:22
bmw
作者: seanone 时间: 2012-6-15 08:38
判断好东西
作者: dgmeihao168 时间: 2012-6-15 12:35
RE: [分享]一个判断用户是否按下了InputBox的取消按钮的例子
作者: HOCKHE 时间: 2013-1-26 20:30
我输入的是数字不知道如何处理?
作者: zjxuan 时间: 2013-5-25 11:30
找了很久,终于找到了
作者: goodhope08 时间: 2014-2-11 18:20
学习
作者: 半点 时间: 2015-9-24 21:10
看一下谢谢
欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) |
Powered by Discuz! X3.3 |