中国人自己的开发语言HB++<语句介绍>
这些是基本的开发语言语句,HB++对面向对象作了不少支持工作,在这方面,比VB.NET最新版的面向对象支持方面更加出色.这里将分段介绍HB++,供同行业朋友指正和帮助
3.2 语句
1. 顺序语句
a) 赋值语句
-     Let基本类型赋值语句 
[Let] 变量名 类成员变量名 = 表达式
Set非基本类型赋值语句
Set 变量名 类成员变量名 = 表达式
Set 变量名 类成员变量名 = New 非基本类型名[(构造时的参数表)] 
b) 调用函数
-     Call调用函数语句 
[Call] 函数名 类成员函数名(参数表)
即使函数有返回值,使用Call语句后,返回值将自动丢失。如果返回的是类实例,HB++将自动释放类实例空间。 
2. 条件语句
  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 
3. 循环语句
a)For循环语句
-     标准格式: 
For 循环变量 = 初始值 To 终止值 [Step 步长值]
Next 循环变量
循环变量只能是单独的变量,不能是类的成员属性或函数。步长值缺省值等于1。
Next语句的循环变量一定要与For语句中的循环变量相同。
Exit For语句将跳出循环 
b)ForSet集合专用循环语句
-     ForSet 集合变量 
NextSet
集合变量只能是集合类的实例变量。其初始值是集合的第一个元素。此循环将自动从第一个元素循环道集合的最后一个元素。循环体中直接使用集合变量操作元素内容。
Exit For语句将跳出循环 
c)Do While...Loop当条件为真循环语句
-     Do While 逻辑表达式 
Loop
条件先于循环,当外部进入循环时,条件不成立,循环将跳过。
Exit Do语句将跳出循环 
d)Do Until...Loop当条件为真跳出循环语句
-     Do Until 逻辑表达式 
Loop
条件先于循环,当外部进入循环时,条件成立,循环将跳过。
Exit Do语句将跳出循环 
e)Do...Loop While后判断当条件为真循环语句
-     Do 
Loop While 逻辑表达式
条件后于循环,当外部进入循环时,至少循环一遍,然后判断条件是否成立,如果成立,循环将跳出。
Exit Do语句将跳出循环 
f)Do...Loop Until后判断当条件为真跳出循环语句
    Do 
    Loop Until 逻辑表达式 
    条件后于循环,当外部进入循环时,至少循环一遍,然后判断条件是否成立,如果不成立,循环将跳出。 
    Exit Do语句将跳出循环 
4. 定义语句
a)Function函数定义语句
    标准格式: 
      [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:结束函数定义 
b)Class类自定义语句
    标准格式: 
      Class 自定义的类型名 [From 已有的对象类型名] 
      End Class 
    自定义的类型名同变量名的字母组成,自定义类型名不能与已有类型名相同。此类型将是对象类。 
    [From 已有的对象类型名]:From继承语句,说明自定义类型是需要从已有的对象类型继承过来的。 
    类型定义必须放在模块定义的内部 
c)Module模块定义语句
    标准格式: 
      Module 模块名 
      End Module 
    模块内部将可以定义以下内容: 
      自定义对象类型、全局变量、全局函数、模块内局部变量、模块内局部函数。 
    模块内部不能定义窗口类,窗口类是独立与所有定义形式。 
    模块定义的内容必须在同一个文件中。 
    模块定义的内容缺省是全局的。 
d)Form窗口类定义语句
    标准格式:
      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
    其他对象类的强制释放删除同样如此。 
e)TypeDef类型别名定义语句
    标准格式:
      TypeDef 已有类型名类型的别名
    已有类型名可以是任何HB++的类型(包括类模板)。
    类型别名的使用方法与类型名相同,虽然它不是一个新的类型,但与它指向的类型完全相同。 
f)Struct结构类型定义语句
    标准格式:
      Struct 结构名 From 已有的类型名
      End Struct
    在HB++中,Struct和Class的定义几乎完全一样,使用时可以当成一种方式使用。 
g)Dim变量定义语句
    标准格式:
      Dim 变量名[(数组大小)] As [New] 类型名 [<类型参数表>][,变量名 As [New] 类型名 [<类型参数表>]...]
    变量名:动态变量名称;
    [(数组大小)]:可选,定义数组;
    类型名:HB++所有类型名;
    [<类型参数表>]:可选,如果类型是类模板,此处的类型参数表将是此类模板所需的类参数。参数最多可以是十个。 
h)Static静态变量定义语句
    标准格式:
      Static 变量名[(数组大小)] As [New] 类型名 [<类型参数表>][,变量名 As [New]类型名 [<类型参数表>]...]
    变量名:静态变量名称
    其他同Dim定义语句说明。 
i)Public公有变量定义语句
    标准格式:
      Public [Static] 变量名[(数组大小)] As [New] 类型名 [<类型参数表>][,变量名 As [New] 类型名 [<类型参数表>]...]
    变量名:公有变量名称
    使用Static说明变量是公有的静态变量,不使用的缺省是动态标量。
    其他同Dim定义语句说明。 
j)Private私有变量定义语句
    标准格式:
      Private [Static] 变量名[(数组大小)] As [New] 类型名 [<类型参数表>][,变量名 As [New] 类型名 [<类型参数表>]...]
    变量名:私有变量名称
    使用Static说明变量是私有有的静态变量,不使用的缺省是动态标量。
    其他同Dim定义语句说明。
    注意:在变量定义中,如果是对象类型的变量,可以使用New来直接创建类实例,但New不能在类属性定义中使用。
    如果变量定义中没有使用New,可以在执行程序体中使用New语句来创建对象类。例如:
           Dim a as TForm
           Set a = New TForm 
5. 事件定义语句
a)Event事件定义语句
    标准格式:
      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 
b)RaiseEvent激发事件语句
    标准格式:
      RaiseEvent 事件函数名(参数表)
    如Event中讲述的例子。 
c)WithEvent定义带事件的对象类实例变量
    WithEvent语句在定义变量中说明使用,它表示定义的变量将在构造时自动获取类实例,如果是控件类实例,还将插入到窗口类中。
    WithEvent说明的变量必须定义是对象类型,如果是基本数据类型,HB++将报错。
    如Event中讲述的例子。 
6. 错误处理语句
a)OnError开启错误处理语句
    标准格式:
      OnError
    OnError表示从此行开始如果有错误,将自动转到DoError处执行。 
b)DoError错误处理语句
    标准格式:
      DoError [函数名(参数表)]
    DoError如果后面没有跟函数,当在OnError到DoError之间的代码中出错时,将自动执行DoError语句后面到CloseError之间的程序代码。
    如果后面使用了函数,当出错,将自动调用此函数。 
c)CloseError关闭错误处理语句
    标准格式:
      CloseError
    关闭错误处理。关闭后,执行出错,HB++不会激发DoError处理错误,将系统报错。 
d)Resume恢复执行语句
    标准格式:
      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”。 
7. 属性函数定义
a)Property Get读操作函数定义语句
    标准格式:
      Property Get 属性函数名() As 类型名[<>]
      End Property 
b)Property Let基本数据类型写操作函数定义语句
    标准格式:
      Property Let 属性函数名([ByVal  ByRef] 参数名 As 基本数据类型名[<>])
      End Property 
c)Property Set对象类型写操作函数定义语句
    标准格式:
      Property Set 属性函数名([ByVal  ByRef] 参数名 As 对象类型名[<>])
      End Property
    注意:Property Get与Property Let配对或Property Get与Property Set配对,当配对两个同名属性函数名的类型一定要相同 
d)只读属性或只写属性
    只读属性:仅仅使用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 
