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