a)If语句
If语句标准格式:
If 逻辑表达式 Then
[Else If 逻辑表达式 Then]
[Else]
End If
b)Select语句
Select语句标准格式:
Select 算术表达式
Case 逻辑表达式
[Case Else]
End Select
注意:此处的逻辑表达式的第一个逻辑运算符不需要左边的算式。例如:
Dim a As Long
a=10
Select a+3
Case <2
Case >2 And a+3<10
Case >10 And a+3<100
CaseElse
End Select
Do
Loop Until 逻辑表达式
条件后于循环,当外部进入循环时,至少循环一遍,然后判断条件是否成立,如果不成立,循环将跳出。
Exit Do语句将跳出循环
标准格式:
[Virtual] [Public | Private]Function 函数名([[ByVal | ByRef] 参数名 As 类型名][,[ByVal | ByRef] [Optional] 参数名 As 类型名[= 常量表达式]]...) As 类型名
End Function
函数名:必选,必须是有效字母:26个大小写英文字母、10个数字、下划线、所有中文,第一个字母必须是英文字母或中文、下划线;
参数名:同变量名;
类型名:基本数据类型、非基本数据类型(对象类)、类模板类型;
[Virtual]:虚拟函数定义,仅仅只能在类的成员函数中定义;
[Public | Private]:可选,公有私有说明;
[ByVal | ByRef]:可选,参数按值或按地址传。缺省是按地址传ByRef;
[Optional]:可选,表示此参数可以写可以不写,即可选参数。可选参数可以对其给一个缺省值,方法是在其定义后跟一个等号和常量算式。
[= 常量表达式]:可选,当前面定义的参数是可选参数时,才能使用缺省值定义。常量表达式中不能使用变量。
End Funciton:结束函数定义
标准格式:
Class 自定义的类型名 [From 已有的对象类型名]
End Class
自定义的类型名同变量名的字母组成,自定义类型名不能与已有类型名相同。此类型将是对象类。
[From 已有的对象类型名]:From继承语句,说明自定义类型是需要从已有的对象类型继承过来的。
类型定义必须放在模块定义的内部
标准格式:
Module 模块名
End Module
模块内部将可以定义以下内容:
自定义对象类型、全局变量、全局函数、模块内局部变量、模块内局部函数。
模块内部不能定义窗口类,窗口类是独立与所有定义形式。
模块定义的内容必须在同一个文件中。
模块定义的内容缺省是全局的。
标准格式:
Form 窗口类 End Form
HB++中,Form语句定义的窗口类将在编译后执行前自动创建一个窗口实例,并创建一个全局的静态变量:窗口类。
在Form...End Form中定义的所有内容,都将是此窗口的成员属性或方法或事件。
窗口中插入控件的方法很简单,如下面例子:(由于还没有开发完可视化编程部分,所以暂可以使用以下方式)
Form 窗口类
Public withEvent button as TButton
public withEvent treeView as TTReeview
public withEvent edit as TText
public withEvent coolBar as TCoolBar
End Form
上面例子中,窗口中将自动被插入了一个按钮、显示树、编辑框、工具条。当没有定位,如果想定位,继续写下窗口类的构造函数,在构造函数中将各控件定位。定位方法可以是赋值给Left、Top、Width、Height或指定Align方式定位。
窗口只有当程序结束时才会被自动释放,如果希望强制释放删除,将上例的窗口类置空即可:
Set 窗口类 = NULL
其他对象类的强制释放删除同样如此。
标准格式:
TypeDef 已有类型名类型的别名
已有类型名可以是任何HB++的类型(包括类模板)。
类型别名的使用方法与类型名相同,虽然它不是一个新的类型,但与它指向的类型完全相同。
标准格式:
Struct 结构名 From 已有的类型名
End Struct
在HB++中,Struct和Class的定义几乎完全一样,使用时可以当成一种方式使用。
标准格式:
Dim 变量名[(数组大小)] As [New] 类型名 [<类型参数表>][,变量名 As [New] 类型名 [<类型参数表>]...]
变量名:动态变量名称;
[(数组大小)]:可选,定义数组;
类型名:HB++所有类型名;
[<类型参数表>]:可选,如果类型是类模板,此处的类型参数表将是此类模板所需的类参数。参数最多可以是十个。
标准格式:
Static 变量名[(数组大小)] As [New] 类型名 [<类型参数表>][,变量名 As [New]类型名 [<类型参数表>]...]
变量名:静态变量名称
其他同Dim定义语句说明。
标准格式:
Public [Static] 变量名[(数组大小)] As [New] 类型名 [<类型参数表>][,变量名 As [New] 类型名 [<类型参数表>]...]
变量名:公有变量名称
使用Static说明变量是公有的静态变量,不使用的缺省是动态标量。
其他同Dim定义语句说明。
标准格式:
Private [Static] 变量名[(数组大小)] As [New] 类型名 [<类型参数表>][,变量名 As [New] 类型名 [<类型参数表>]...]
变量名:私有变量名称
使用Static说明变量是私有有的静态变量,不使用的缺省是动态标量。
其他同Dim定义语句说明。
注意:在变量定义中,如果是对象类型的变量,可以使用New来直接创建类实例,但New不能在类属性定义中使用。
如果变量定义中没有使用New,可以在执行程序体中使用New语句来创建对象类。例如:
Dim a as TForm
Set a = New TForm
标准格式:
Event 事件函数名([[ByVal | ByRef] 参数名 As 类型名][,[ByVal | ByRef] [Optional] 参数名 As 类型名[= 常量表达式]]...)
Event事件定义语句定义了事件函数的函数名和参数形式。
Event语句必须在类定义中使用。
当定义类实例的此事件函数时,事件函数名定义格式如下:
类实例变量名_事件函数名
例如:
Module 例子模块
Class 例子类
Pulic Event Over(ByVal X as Long,ByVal Y as Long)
Public OldX as Long,OldY as Long
Function Line(ByVal X as Long,ByVal Y as Long)
RaiseEvent Over(X,Y)
窗口类.Line(OldX,OldY,X,Y)
End Function
'预先定义事件过程函数的方法:
'有了预先定义的事件函数,此类的类实例在创建构造后,自动拥有此事件函数的处理过程。
Function _Over(ByVal X as Long,ByVal Y as Long)
if X>0 And X <100 And Y>0 And Y<150 Then
Msgbox ("进入此区域有效!")
end if
End Function
End Class
End Module
Form 窗口类 From TForm
Public withEvent b as TButton
Punlic c as 例子类
Public withEvent d as 例子类
function b_Click()
end Function
Function c_Over(ByVal X as Long,ByVal Y as Long)
if X>100 And X <200 And Y>150 And Y<300 Then
Msgbox ("不能进入此区域!")
end if
End Function
End Form
标准格式:
RaiseEvent 事件函数名(参数表)
如Event中讲述的例子。
WithEvent语句在定义变量中说明使用,它表示定义的变量将在构造时自动获取类实例,如果是控件类实例,还将插入到窗口类中。
WithEvent说明的变量必须定义是对象类型,如果是基本数据类型,HB++将报错。
如Event中讲述的例子。
标准格式:
OnError
OnError表示从此行开始如果有错误,将自动转到DoError处执行。
标准格式:
DoError [函数名(参数表)]
DoError如果后面没有跟函数,当在OnError到DoError之间的代码中出错时,将自动执行DoError语句后面到CloseError之间的程序代码。
如果后面使用了函数,当出错,将自动调用此函数。
标准格式:
CloseError
关闭错误处理。关闭后,执行出错,HB++不会激发DoError处理错误,将系统报错。
标准格式:
Resume [Next | Exit]
Resume:错误处理完毕后,使用此语句将返回到出错的语句上继续执行
Resume Next:错误处理完毕后,使用此语句将返回到出错的下一条语句
Resume Exit:错误处理完毕后,使用此语句将退出当前函数。
注意:HB++的错误处理机制允许嵌套使用。当出错时,HB++会自动寻找最近的错误处理的DoError。例如下例:
Function abc(a as long,b as long)
dim c as long
OnError
a=10
b=0
c=a/b
OnError
a=5
c=a/b
DoError
Msgbox(a)
Resume Next
CloseError
a=20
c=a/b
DoError
MsgBox(a)
Resume Next
ClsoeError
end function
运行结果:第一次提示“10”,第二次提示“5”,第三次提示“20”。
标准格式:
Property Get 属性函数名() As 类型名[<>]
End Property
标准格式:
Property Let 属性函数名([ByVal | ByRef] 参数名 As 基本数据类型名[<>])
End Property
标准格式:
Property Set 属性函数名([ByVal | ByRef] 参数名 As 对象类型名[<>])
End Property
注意:Property Get与Property Let配对或Property Get与Property Set配对,当配对两个同名属性函数名的类型一定要相同
只读属性:仅仅使用Property Get定义属性读函数。
只写属性:仅仅使用Property Let或Property Set定义属性写函数。
例子:
Module 例子模块
Class 例子类
Private FData as Long
Property Get Data() as Long
Data=FData
End Property
Property Let Data(ByVal Value as Long)
FData=Value
End Property
End Class
Function Dispaly()
dim d as New 例子类
d.Data=10
Msgbox(d.Data)
end Function
End Module