msgbox无法显示某些字符,比如英语音标,有办法吗?
vb吧
全部回复
仅看楼主
level 4
jessylake 楼主
英[fɪʃ]美[fɪʃ]
2018年07月29日 13点07分 1
吧务
level 11
msgbox限制太多了,你可以用form写一个吖
2018年07月29日 15点07分 2
level 10
VB6“自身环境”是基于ANSI的,超出GB2312和GBK字符集范围的字符,都不能直接显示。
如果要使用的话,只能用支持Unicode字符集的方法。
比如,你的MsgBox改用W版的API函数MessageBox( )代替。
2018年07月29日 15点07分 3
谢谢,这个API方法如果用VBA能不能用?其实我是在Excel中使用的,别的地方问不出来所以到这里问的
2018年07月30日 00点07分
@jessylake 当然能用!不过你需要用Declare声明那个API(要W版的),并且记得把第2个和第3个参数类型改为ByVal xxx As long ,调用时的字符串内容通过StrPtr( )函数传递。
2018年07月30日 01点07分
@涐吢铱舊囿儚 有人给我发了一个API声明,帮我看看是用这个吗?
2018年07月30日 02点07分
@涐吢铱舊囿儚 就是使用过程中表中的其他控件会自动被屏蔽掉,点击确定msgbox关闭后才重新显示出来就是使用过程中表中的其他控件会自动被屏蔽掉,点击确定msgbox关闭后才重新显示出来
2018年07月30日 02点07分
level 15
只能自定义或尝试调用api方式试试
2018年07月30日 00点07分 4
找到一个api方法,发现也有瑕疵,就是执行后会出现其他控件消失(屏蔽掉了),关掉窗口后其他控件又恢复了,总之解决得不太完美
2018年07月30日 00点07分
@jessylake 发出来瞧瞧看,或者说你指定弹出信息的句柄是不是可以修改下试试看?
2018年07月30日 01点07分
@oshi001 我把那个API声明发出来了,有空帮看看
2018年07月30日 02点07分
level 4
jessylake 楼主
#If VBA7 Then
Private Declare PtrSafe Function MessageBoxTimeout Lib "user32" Alias "MessageBoxTimeoutW" ( _
ByVal hWnd As Long, ByVal lpText As LongPtr, _
ByVal lpCaption As LongPtr, ByVal wType As Long, _
ByVal wLange As Long, ByVal dwTimeout As Long) As Long
#Else
Private Declare Function MessageBoxTimeout Lib "user32" Alias "MessageBoxTimeoutW" ( _
ByVal hWnd As Long, ByVal lpText As Long, _
ByVal lpCaption As Long, ByVal wType As Long, _
ByVal wLange As Long, ByVal dwTimeout As Long) As Long
#End If
Private lngTimeOut As Long
Public Property Let MsgboxTimeOutSecond(ByVal TimeOut As Long)
On Error GoTo LetSecondError
If TimeOut < 0 Then
lngTimeOut = 0
Else
lngTimeOut = TimeOut * 1000
End If
Exit Property
LetSecondError:
lngTimeOut = &H7FFFFFFF
End Property
Public Property Let MsgboxTimeOut(ByVal TimeOut As Long)
If TimeOut < 0 Then
lngTimeOut = 0
Else
lngTimeOut = TimeOut
End If
End Property
Public Property Get MsgboxTimeOut() As Long
MsgboxTimeOut = lngTimeOut
End Property
Public Function MsgboxX(ByVal Prompt As String, Optional ByVal Buttons As VbMsgBoxStyle = vbOKOnly, _
Optional ByVal Title As String = vbNullString, Optional ByVal TimeOut As Long = -1&, _
Optional ByVal LangeId As Long = 0&) As VbMsgBoxResult
'TimeOut以毫秒为单位,1 second = 1000 ms,TimeOut值为0时表示不自动返回,为负值时表示使用全局默认值
'如果信息框弹出后,用户未点击任何按钮,将返回3200,但如果Buttons的按钮值为VbOkOnly时,返回VbOk
If TimeOut < 0 Then TimeOut = lngTimeOut
If Len(Title) < 1 Then Title = Application.Caption
MsgboxX = MessageBoxTimeout(Application.hWnd, StrPtr(Prompt), StrPtr(Title), Buttons Or &H2000&, LangeId, TimeOut)
End Function
2018年07月30日 02点07分 5
首先你的这个代码似乎不是VB6.0的.然后呢是 可以尝试修改 Application.hWnd 这个为当前的按钮的句柄值试试看效果.因为没有测试真不知道.
2018年07月30日 02点07分
@oshi001 对,不是VB6.0,这个是用在excel里面的,使用VBA
2018年07月30日 02点07分
level 4
jessylake 楼主
2018年07月30日 05点07分 6
1