发信人: chenjz(不再哭傲江湖)
整理人: cobe(2001-01-19 09:20:28), 站内信件
|
走近编程-通过实例学VB(八)
在本章内,我们将介绍关于状态栏(StatusBar)的设置。
我们需要编辑器的状态栏能显示3种状态信息:当前插入点的行和列位置、Caps Lock状态、以及Insert状态。所以需要首先建立一个包含3个面板的状态栏。
首先鼠标右键点击StatusBar1,在弹出菜单中选择Properties,在弹出的属性设置窗口中点击Panels页面。如图1所示,界面同前面我们介绍的工具栏设置界面相似,点击Insert Panel按钮再添加2个面板。再切换到第一个面板,该面板用于显示当前插入点的行和列位置,面板的缺省宽度是1440,有一些窄,点击AutoSize列表,将其设置为1-sbrSpring设置为最宽。切换到第二个面板,该面板用于显示Caps Lock状态。VB中的状态栏面板可以自动显示Caps Lock、Insert、Num Lock、Scroll Lock等键的状态,只要通过设置Style就可以了,对于该面板,点击Style列表,选择1-sbrCaps使面板显示Caps Lock键状态。如果Caps Lock是关闭的,可以看到面板显示CAPS是灰色的,当打开Caps Lock之后,面板显示变成黑色。如果感觉面板太宽,还可以通过改变Minimum Width来改变。切换到第三个面板,该面板用于显示Insert状态,点击Style列表,选择3-sbrIns 。设定好的面板如图2所示。
现在我们需要编程的只有如何显示当前插入点的位置了。RTF控件的SelChange事件在当前文本的插入点改变时发生,我们可以在该事件中编程来获得插入点的位置。打开Form1的代码窗口,在RichTextBox1的SelChange中加入以下代码:
Dim LPos,L1,L2,iLineX,iLineY As Long
LPos=SendMessageByRef(RichTextBox1.hwnd,EM_LINEINDEX,ByVal-1,ByVal 0)
iLineY=SendMessageByRef(RichTextBox1.hwnd,EM_LINEFROMCHAR,ByVal LPos,ByVal 0)
SendMessageByRef RichTextBox1.hwnd,EM_GETSEL,L1,L2
iLineX=L1-LPos
MDIForm1.StatusBar1.Panels(1).Text="行:"+Str(iLineY)+"列:"+Str(iLineX)
运行程序,切换编辑窗口的插入点位置,可以看到面板显示出行和列的值。
由于只有在插入点改变后才能获得插入点的位置,所以当新建、打开一个编辑窗口或者切换窗口后,可以看到面板没有显示或者显示的是前一个窗口的插入点位置,我们需要在Form1的Load事件以及Activate事件中分别加入下面一句代码:RichTextBox1_SelChange。Activate事件在窗体成为活动窗体后产生,在上面两个事件中加入代码的目的是当新建、打开一个编辑窗口(引发Load事件)后和切换窗口(引发Activate事件)后调用RichTextBox1的SelChange事件中的代码来获得插入点的位置。
程序的最后部分就是完成察看菜单的工具栏、状态栏的部分。首先打开MDIForm1的代码窗口,在Load事件中添加如下代码:
mViewToolbar.Checked=True
mViewStat.Checked=True
然后在菜单mViewToolBar的Click事件中添加如下的代码:
If mViewToolbar.Checked Then
Toolbar1.Visible=False
mViewToolbar.Checked=False
Else
Toolbar1.Visible=True
mViewToolbar.Checked=True
End If
运行程序,点击察看菜单,可以看到工具栏、状态栏都处于被选中的状态(菜单项上打了对勾)。点击 工具栏 ,对勾消失,同时工具栏也处于不可见状态。至于状态栏菜单项部分的代码,看了上面的程序,大家可能知道怎么写了,这里我就不说了。
到现在为止,全部的代码就已经完成了,大家可以运行程序,测试所有的功能。
看完教程后,不知道大家有什么感觉?由于篇幅和程序的功能所限,很多的控件、VB函数等都没有介绍到。学好编程关键的是自己的实践。这样才能逐步提高自己的功力。如果大家有什么问题,可以访问我的站点http://www.applevb.com同我切磋并提出意见。(全文完) (长沙 陈锐)
---- 我能翻译善写作熟电脑会说话可是为什么没工作?
|
|