📄 m54.htm
字号:
<html>
<head>
<title>VB教程</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<p align="center"><script src="../../1.js"></script></a>
<body bgcolor="#ffffff" leftmargin="5" topmargin="1" marginheight="5" marginwidth="5">
<div align=center>
<table border=0 cellpadding=0 cellspacing=0 width=680 align="center">
<tbody>
<tr>
<td bgcolor=#000000 height=9>
<div align=center class=H1> 表达式编译计算器(下)</font> </font> </font></div>
</td>
</tr>
<tr valign=top>
<td class=H1 height=76> <br>
</font></span> </font> 概述在上篇发表后,
已有 12 位朋友来索取源代码。<br>
<br>
本篇是讲如何实现一些更强大的功能, 可自己定义的宏及增加数据类型检查功能和错误处理。自定义宏根据我们的语法定义, 替换宏是包含在字符 ` (左上与~一起)中的数字,
比如一个合法的宏写法是 `12` , 我们可能让该宏代表一个数组的索引或者是数据库中的某个字段的索引, 或是其他什么, 由于有非常多的可能性,
我把宏的处理用事件来处理。<br>
<br>
Public Event GetGrid(No, Ret) '宏的事件, No 为宏的编号, Ret为返回值<br>
<br>
' 读入一个宏<br>
Private Function ReadField(Str1 As String)<br>
Dim C1 As String<br>
Dim rets As String<br>
C1 = ReadNumber(Str1) '读入宏的编号<br>
If C1 <> "" Then<br>
RaiseEvent GetGrid(C1, rets) '发生宏计算事件<br>
ReadField = rets<br>
End If<br>
C1 = ReadChar(Str1)<br>
Do While C1 <> "" And C1 = " "<br>
C1 = ReadChar(Str1)<br>
Loop<br>
If C1 <> "`" Then<br>
ErrorStr = "需要 `"<br>
End If<br>
End Function由上面的代码看到, 对于宏的计算不是在类内部完成的, 而是利用事件, 把该具体计算交给了程序来处理。一个可能的宏处理过程可能如下:<br>
<br>
' 自己定义的宏函数<br>
' 该宏简单地把所有的宏编号*2 返回<br>
Private Sub Syscomp2_GetGrid(No As Variant, Ret As Variant)<br>
Ret = CStr(Val(No) * 2)<br>
End Sub如果使用该宏计算, `2` 的值就是4。您明白了吗? 使用类调用该类非常简单:<br>
<br>
Private Sub Command1_Click()<br>
Dim Comp1 As New CompStr<br>
MsgBox Comp2.GetExp(Text1) '计算Text 的值<br>
Set Comp1 = Nothing<br>
End Sub<br>
<br>
如果是使用宏的情况:<br>
<br>
Dim WithEvents Syscomp1 As CompStr<br>
<br>
Private Sub Syscomp1_GetGrid(No As Variant, Ret As Variant)<br>
Ret = CStr(Val(No) * 2) '或其他可能的处理<br>
End Sub<br>
<br>
Private Sub Command1_Click()<br>
Dim Comp1 As New CompStr<br>
Set Syscomp1 = Comp1<br>
Comp1.ErrorStr = ""<br>
MsgBox Comp1.GetExp(Text1)<br>
Set Syscomp1 = Nothing<br>
Set Comp1 = Nothing<br>
End Sub数据类型和错误处理在该类里没有实现的是数据类型检查和错误处理, 因为我的程序中不需要这些功能, 所以没有增加上。数据类型是使用一个变量
CurType 来实现的, 每次的求值后, 设置 CurType , 可以控制值的类型。 目前, 该类对 "123" + 333 的计算是不会出错的,
而是得到结果 456 ,增加数据类型检查可以要求有严格的表达式书写。属性 ErrorStr 来表示最后出现的表达式编译错误。 但是目前在类中没有错误处理。如果您改进了该类或者是发现了什么
Bugs, 请记着给我来 Mail, 谢谢。 </span></font> <br>
<br>
<br>
</b></font> </td>
</tr>
</table>
</div>
<p align="center"><a href="../../pian/vb.htm">回首页</a>
<p align="center"><script src="../../2.js"></script></a>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -