For i = 1 To 4For j = 1 To 4a(i, j) = (i - 1) * 3 + jNext jNext i是给数组a(4,4)赋值。
For i = 3 To 4For j = 3 To 4Print a(j, i);Next jPrintNext i
是只显示a(3 to 4, 3 to 4)的值。
分别是两个嵌套循环,没什么关系呀,后面的i,j你定义其它变量来代替也是一样的呀上面第一个循环是对数组a进行赋值操作
第二个循环是对数组进行输出操作,也就是把上一个循环中得到的运算结果输出到窗体中
首先在VB环境中建立一个新的窗体并保存,然后在窗体中建立菜单和工具条,为简便起见,工具条用Option控件组来实现(需要把风格设为Graphical模式),并把事先做好的图标加载到控件上。图1是五线谱作曲工具的主界面,其中Picture1控件作为可视化编辑工具的客户操作区,Picture2控件中所加载的位图包含了作曲过程中需要的基本音符,在操作过程中通过位图提取的方式来获得相应的音符,然后插入到所需的位置。
图1 VB环境中的设计界面
五线谱作曲功能的实现
在工具条上的五个Option控件构成一个控件组,根据Option控件本身的特性,其中一个选中时其它的自动设为非选择项,因此操作起来很方便。当选中其中的一个音符图标后,自动触发相应的事件。事件处理代码如下:
Private Sub Option1_Click(Index As Integer)
Picture1.SetFocus 焦点集中到客户区
Yinfu = Index 获得音符序号
End Sub
其中整型数Yinfu是一个全局变量,通过控件组中的索引Index可以知道哪个音符按钮被选中。为了记录作曲过程中的操作,定义一个二维数组Music用来存放数据,光标点取在Picture1客户区中的坐标经过圆整后作为数组的行、列序号,数组元素记录所选的音符。整个处理过程放在Picture1控件的MouseDown事件中进行,代码如下:
Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim LineY&, ColoumX&
LineY& = Round((Y - 13) / 5) 行圆整
ColoumX& = Round((X - 30) / 16) 列圆整
If Not (ColoumX& > 0 And LineY& > 0) Then
Exit Sub
End If
If Music(LineY&, ColoumX& + HScroll1.Value) = 0 Then
Music(LineY&, ColoumX&
+ HScroll1.Value) = Selection 记录音符
End If
DisplayNotes 在客户区显示当前音符
End Sub
当程序运行时,首先通过主窗体的Form Load事件在Picture1的客户区绘出五线谱的五条平行的水平线,作曲者便可以根据不同的音高在相应位置插入音符。插入音符的过程是通过上面的DisplayNotes函数来实现的,利用Windows系统的API(应用程序接口)函数Bitblt所具有的内存数据传送的功能将Picture2中位图的一部分提取出来并按照一定的变换后插入到Picture1的客户区制定位置,主要代码如下:
Select Case ID
Case 1
BitBlt Picture1.hdc, X& - 7, Y& - 18, 20, 30, Picture2.hdc, 66, 0, SRCAND
Case 2
BitBlt Picture1.hdc, X& - 5, Y& - 18, 20, 30, Picture2.hdc, 0, 0, SRCAND
…
图2 五线谱作曲工具的运行效果