精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● VB和Basic>>〓〓..各种开发技巧..〓〓>>VB编程的必备技巧(转载)

主题:VB编程的必备技巧(转载)
发信人: skydg(孤龍)
整理人: fishy(2001-05-18 19:17:26), 站内信件
VB编程的必备技巧-(黄立伟)

  对编程者来说,VB很容易上手,但要深入、灵活地驾驭它还要下一番功夫。笔者在这里介绍几个较为典型的编程技巧,希望能对广大VB爱好者有所帮助。 
一.怎样创建自定义的光标 
   当在设计一个应用程序时,Visual Basic允许程序员将许多控件的MousePointer属性设计成12个预先定义好的鼠标光标之一。然而,有些程序员或许会希望显示一个预定义形状之外的光标。本文说明如何创建一个不同的鼠标指针(光标),包括为一个没有MousePointer属性的控件创建光标。 
   要在Visual Basic应用程序中将光标(鼠标指针)改变成个不同的形状,可以添加代码来改变希望监视的控件的MouseMove和DragOver事件。 
   MouseMove事件所包含的代码用于触发该控件的Drag方法。当鼠标在被选中的控件上移动的时候,轮流显示新的鼠标指针。 
   当鼠标指针离开该控件时,则DragOver事件被触发。在Visual Basic程序中,可以重新复位此Drag属性,以便以前的鼠标指针能够被再次显示出来。 
   下面的样例程序实现当鼠标指针移动到一个文件列表框控件上时,将其改变成不同的形状。 
首先采用缺省的方法建立Form1。在Form1上添加一个文件列表框控件,采用缺省的方法建立File1。将File1控件的DragIcon属性设置为所选择的.ICO文件。 
  将如下代码添加到File1的MouseMove事件中: 
    Private Sub File1—MouseMove(ButtonAs Integer, Shift As Integer, X As     Single, Y As Single) 
    File1.Drag 1 'icon on 
    End Sub 
  将如下代码添加到Form1的DragOver事件中: 
    Private Sub Form—DragOver(Source As Control, X As Single, Y As        Single, State As Integer) 
    File1.Drag 0 ′icon off 
    End Sub 
  按下F5功能键执行此程序。得到的运行结果是:将鼠标指针移动到该文件列表框控件上时,程序将把所选中的.ICO文件作为缺省的鼠标光标;将鼠标指针离开该控件时,光标则会自动恢复为缺省的形状。 

二.怎样在窗体上点鼠标右键产生一个弹出式选单(PopUp Menu)? 
  大家都知道,在Windows95/98/2000的桌面和许多流行软件的视窗中,当我们点鼠标右键时,会在鼠标的当前位置弹出一个快捷选单。许多爱好编程的朋友是不是也希望能在自己的程序里有类似的功能呢?其实,这并不困难。笔者经过一番努力,在VB下找出一个通用的方法,供大家分享。 
  要实现上述功能,需分两个步骤: 
  1. 利用VB的选单编辑器(Menu Editor)编辑你希望弹出的选单及子选单,注意,要将选单的Visible属性设置为:False。 
  2. 在窗体(Form1)的MouseDown事件中编写程序,来激发编辑好的选单,假设选单名为PopMenu,程序源码如下: 
  Private Sub Form—MouseDown(Button As Integer, Shift As Integer, 
  X As Single, Y As Single) 
  If Button = vbRightButton Then 
  PopMenu.Visible = True 
  PopupMenu PopMenu 
  End If 
  End Sub 
  上述方法是针对窗体的,我们也可以针对任意控件,用鼠标右键点击控件时,也弹出一个快捷选单。方法也很简单,只要把上述代码放到相应控件的MouseDown事件中,就可以了。 

三.怎样动态地在窗体上判断某区域内是否有控件存在? 
  在笔者的一个小程序中,想在窗体的某个区域输出数据,这就要求在这个区域内不能有其他控件存在,那么,怎么才能知道在窗体的某个区域内,是否有控件存在呢? 
为了判断在窗体的某个区域中,是否含有控件,我们可以利用以下VB程序来实现: 
  Function GetControl(x1 As Single, y1 As Single, x2 as Single, y2 as      Single) As Control 
  Dim Control as Control 
  For Each Control In Form1 
  With Control 
  If (x1 〈= .Left) And (x2 〉= .Left) And _ 
  (y1 〈= .Top) A , Text)-1 
  Lenth=Len(Text) 
  RichTextBox1.SelStart=Position 
  RichTextBox1.SelLength=Lenth 
  RichTextBox1.SelColor=RGB(255,0,0) 
  Do While InStr(Position+Lenth+1, RichTextBox1.Text, Text) 〈〉 0 
  Position=InStr(Position+Lenth+1, RichTextBox1.Text, Text)-1 
  RichTextBox1.SelStart=Position 
  RichTextBox1.SelLength=Lenth 
  RichTextBox1.SelColor=RGB(255,0,0) 
  Loop 
  End If 
  End Sub 
  按F5执行程序,单击“输入文本”按钮,在弹出的对话框中输入一些文本,确定后,刚刚输入的文本将显示在RichTextBox中;再单击“选择字符串”按钮,在弹出的对话框中输入你希望高亮显示的字符串,确定后,RichTextBox中相应的字符串将以红色高亮显示。 

八.编程实现Windows 95/98操作系统热启动的方法
  要利用程序实现系统的重新启动,可以在你的程序中调用API函数来实现。建一个子函数:(以VB为例) 
  Declare Function SystemParametersInfo Lib ″user32″ Alias — 
″SystemParametersInfo″ (ByVal uAction As Long, ByVal uParam As Long,
   ByVal lpvParam As Any, ByVal fuWinIni As Long) As Long 
   Sub DisableCtrlAltDelete(bDisabled As Boolean) 
   Dim X As Long 
   X=SystemParametersInfo(97, bDisabled, CStr(1), 0)
   End Sub 
   Call DisableCtrlAltDelete(true) ′禁止热启 
   Call DisableCtrlAltDelete(false) ′允许热启 

九.在Windows 95/ 98启动后自动启动程序的方法 
  我们都知道在Windows 95/98的“开始”→“程序”选单下有一“启动”选单项,当每次启动Windows 
   95或Windows 98时,系统都会自动启动放在“启动”选单栏里的可执行程序。 但目前有好多软件,像解霸五、ICQ,以及大部分实时侦测病毒的软件等等,安装后,并没有放在“启动”选单里,也能在启动操作系统时自动启动。怎么实现的呢? 
   其实只要知道Windows注册表的一些知识,这个问题就不能称之为问题了。用鼠标单击“开始”,打开开始选单,再单击“运行”,出现一对话框,然后输入“regedit”,确定后,会打开系统注册表编辑器,找到HKEY—LOCAL—MACHINE? 
   SOFTWARE?Microsoft?Windows?CurrentVersion?Run,加入你的程序的入口,就可以了。如果不知道怎么加,就参考一下已经存在的键值。 

十.如何把数据文件输出到Text控件中?
  如果数据量比较大,窗体满屏也不够大,怎么解决? 有一个比较简单的方法,就是把数据放到一个文本框(Text)里,并在其中加上水平和垂直滚动条。具体实现步骤为:先在窗体(Form)里加入一个文本框,采用默认名Text1;然后,设置文本框Text1的属性:Text属性设置为空,MultiLine属性设置为True,ScrollBars属性设置为3-Both;接着添加如下VB代码: 
   Private Sub Form—Load() Dim Handle As Integer Dim FileName 
   As String On Error GoTo ErrExit begin: ′输入要显示的数据文件的名称 FileName=InputBox$(″Input 
   Filename″, ″Open File″) On Error GoTo FileErr Handle=FreeFile 
   Open FileName For Input As #Handle ′把数据文件中的数据输出到文本框中 Text1.Text=Input$(LOF(Handle), 
   Handle) Close #Handle Exit Sub FileErr: Dim ErrNum As Integer 
   If Err.Number=53 Then ErrNum=MsgBox(″File not exist″, vbOKCancel, 
   ″Error Information″) If ErrNum=1 Then GoTo begin Else Exit 
   Sub End If End If MsgBox Err.Description, , ″file open failed″ 
   ErrExit: Exit Sub End Sub ′使文本框充满整个窗体 Private Sub Form—Resize() 
   Text1.Left=0 Text1.Top=0 Text1.Width=Form1.Width-100 Text1.Height=Form1.Height-400 
   End Sub 通过这样的处理,不仅能解决问题,而且用户还可以在文本框中对数据进行编辑。
十一.关联文件列表框、目录列表框和驱动器列表框的方法 
   想做一个对话窗体,包含驱动器列表框、目录列表框和文件列表框,并能实现三者的同步操作,怎么做?这都是我们在实际应用中经常会遇到的问题,在VB中解决这个问题非常简单,可以通过Path属性的改变引发Change事件来实现。例如: Sub Dir1—Change() 
   File1.Path=Dir1.Path 
   End Sub 
   该事件过程使窗体上的目录列表框Dir1和文件列表框File1产生同步。因为目录列表框Path属性的改变将产生Change事件,所以在Dir1—Change事件过程中,把Dir1.Path赋给File1.Path,就可以产生同步效果。 
   类似地,增加下面的事件过程,就可以使三种列表框同步操作: 
   Sub Drive1—Change() 
   Dir1.Path=Drive1.Drive 
   End Sub 
   该过程使驱动器列表框和目录列表框同步,前面的过程使目录列表框和文件列表框同步,从而使三种列表框同步,问题即可解决。 



----
请不要回复些不实际的答案给我,谢谢合作!!!
爱好电脑、喜欢编程的朋友,欢迎相互交流:
OICQ:102490      E-Mail:[email protected]  

[关闭][返回]