窗口界面的编程技巧

制作渐变的窗口背景色
吴斌

  在许多Windows软件的安装程序中,时常可以看到以某种颜色由浅至深的渐变为背景的窗口。使用VB制作这类窗口的方法有不少,而通过调用API函数绘制渐变的窗口背景色,似乎是一种既简单又节省资源的方法。

  首先,在module文件中加入下列声明语句:

  Declare Function CreateSolidBrush Lib"GDI"(ByVal crColor As Long) As Integer

  Declare Function FillRect Lib"USER"(ByVal hDC As Integer,lpRect As RECT,ByVal hBrush As Integer)As Integer

  Declare Function DeleteObject Lib"GDI"(ByVal hObject As Integer)As Integer

  Type RECT

  left As Integer

   top As Integer

   right As Integer

   bottom As Integer

  EndType

  然后,在窗口的Paint事件中加入下列代码:

  Private Sub Form_Paint()

  Dim Color As Integer

  Dim hBrush As Integer

  Dim OldMode As Integer

  Dim RetVal As Integer

  Dim StepSize As Integer

  Dim X As Integer

  Dim FillArea As RECT

  OldMode%=Me.ScaleMode

  Me.ScaleMode=3

  StepSize%=1+Me.ScaleHeight/80

  Color%=255

  FillArea.left=0

  FillArea.right=Me.ScaleWidth

  FillArea.top=0

  FillArea.bottom=StepSize%

  For X%=1 To 80

  hBrush%=CreateSolidBrush (RGB(0,0,Color%))

   RetVal%=FillRect(Me.hDC,FillArea,hBrush%)

   RetVal%=DeleteObject(hBrush%)

  Color%=Color%-4

   If Color% < 0 Then Color%=0

   FillArea.top=FillArea.bottom

  FillArea.bottom=FillArea.bottom+StepSize%

  Next

  Me.ScaleMode=OldMode%

  EndSub

  按F5运行,就会出现一个以从上至下、由浅至深的渐变蓝色为背景的窗口。对上述代码稍加改动,便可制作出各种颜色和水平方向的渐变背景。


如何在VB和Delphi中快速实现立体化窗口显示


    在VB和Delphi中,我们可以很方便地创建具有立体化观感的窗口,这也是近两年来,Win3.X中较为流行的显示方式。许多专业化的软件都采用了这种立体化的窗口和相应的控件,达到了赏心悦目的效果。下面我们来谈谈如何在目前最流行的两种Win编程语言中实现这样的效果。

    其实,无论是VB还是Delphi,要实现这种效果都较为容易,在编程中,并不需要调用外部的DLL,在程序运行时,会自动调用CTL3dV2.dll。

    我们先来看看如何在VB中实现:

    1.新建一个窗口。

    2.在窗口form的属性列表中有一项Auto3D属性,缺省值为false,将其设置为true。它是控制VB中是否显示立体窗口的重要属性。

    3.在form的属性列表中还有一项BorderStyle属性,这是控制窗口的边框显示类型,将其设置为3-Fixed Double。

    4.现在可以运行这个程序了,你将会看到立体窗口出现。

    将Auto3D属性设置为true,还有一个很好的副作用,那就是在这个窗口上的Text、Frame、CheckBox、OptionButton和ListBox都自动具有了立体效果。

    在Delphi中实现似乎显得更加容易和直观:

    1.新建一个窗口。

    2.在窗口form的属性列表中有一项BorderStyle属性,它的缺省值为bsSizeable,表示边界可以任意调整,将其重新设置为bsDialog。

    3.运行程序,你会发现立体窗口出现了。(看来,Delphi中将这种立体化窗口称为“对话窗口”,确实如此,比如在Word中,对话窗口都是这种立体化的显示,而主窗口仍然是一般的风格。)

    与VB中的Auto3D类似,在Delphi中有一个属性为Ctl3D,将其设置为true,将使所有在这个窗口上的控件具有立体观感,并且这种变化是立刻反映的,而不象VB中在运行时才能看到。

    在Delphi的窗口form中,你还可以通过设置FormStyle属性为fsStayOntop来轻而易举的实现“永远浮在其他窗口”上的效果。著名的“译林”Win版本就是用Delphi写的,它其中就有一个“永远在最上面”的功能,就是这样实现的。

用Visual Basic设计更好的用户界面


    有时在一个窗口中出现较多的控制件时,如果能向导式地建议用户下一步该做什么,不失为上策。

    在Visual Basic的程序设计中,我们可以使用语句:Object.SetFaocus使我们希望的控件得到输入焦点,举个例子:在Form1中我们加入一个按钮Command1和一个文本输入Text1,双击按钮控件,然后键入如下代码:

        Text1.SetFocus

    再按F5运行程序,您就会看到一单击按钮,文本框会立即取得输入焦点。另外,我们还可以使用语句:Sendkeys "{TAB}"使下一个控件获得焦点,但我们需要在设计时确定各控件的Index值。(在Properties窗口中)让控件自己感知自己的工作已完成,而主动将焦点让出,会使用户觉得应用程序很聪明,也减少了用户出错的机会。

    可是当焦点切换的两个控件相隔有一定距离时,上述的方法有时也不足以引起用户的注意,那么一种好的解决方法是将鼠标箭头也移到控件上。可惜,VB并不支持鼠标移动,那我们就求助API函数,API函数SetCursorPos可让我们如愿。

    下面是子程序MoveCursorOn,它可让鼠标移动到指定控件上方。

    下列代码请放在declarations段中:
 
Type PoinTAPI

x As Integer

y As Integer

End Type

Declare Sub SetCursorPos Lib "User"(Byval x As Integer,Byval y As Integer)

Declare Sub ClientToScreen Lib "User"(Byval hwnd As Integer,IpPoint As PointAPI)

Declare Function GetParent Lib "User"(Byval hwnd As Integer)As Integer

    然后建立一个新的子程序(ALT+N→N→键入子程序名MoveCursorOn),下面是子程序的代码:

Sub MoveCursorOn(source As Control)

Dim Pt As PoinTAPI

Dim hparent As Integer

p.x=(Source.Left+Source.Width/2)/Screen.Twipsperpixel)

p.y=(Source.Top+Source.Height/2)/Screen.Twipsperpixel)

hparent=GetParent(source.hwnd)

ClientToScreen hparent pt

SetCursorPos pt.x pt.y

End Sub

    使用该子程序很容易,例如我们想把鼠标移动到按钮Command1上,就可使用语句

Move Cursor On Command1

    您会看到鼠标箭头已经指着按钮Command1。

    需要说明的是,千万不要滥用该子程序。让鼠标自己满屏乱飞,我们的用户会感到失去对应用程序的控制,这是违反我们的初衷的。

    在有数个输入框的窗口中(这在数据库应用程序中是很典型的),当用户完成第一个输入框的输入后,总爱习惯性的加一个回车,希望输入焦点落到下一个输入框中(DOS中大多数应用程序是如此),可往往事与愿违,这一回车却触发了拥有Default特性的按钮,结果不是关闭了当前窗口就是又蹦出另一窗口。用户睁大眼睛看着屏幕,“咦?!我到底做了什么?”这是Windows新用户经常遇到的事情。

    解决它其实很容易,只需在输入框的KeyPress事件中加入如下代码:

IF KeyASCII=13 Then

KeyASCII=0

Sendkeys "{TAB}"

END IF

    这样,当用户在这个输入框中键入Enter时,就象键入TAB键时,焦点被移到下一控件上。但需注意,这种方法不适用于多行的TextBox,即TextBox的MultiLine特性设为True时,因为这时的回车键是起换行的作用。

利用VB三维面板控件设计流动条


    VB提供了一个三维面板控件,利用这个控件可设计图形效果的立体界面,从而使应用程序的截面显得更生动、美观,该控件还可以设置各种形式的背景,然后在背景上显示各种形式的字符,令人感兴趣的是,使用三维面板控件,还可设计我们经常在安装程序中看到的表示安装进度的流动条,并可显示进程的流动条,并可显示进程百分比,改变流动条的颜色等。
 

一. 介绍属性

    FloodColor: 确定流动条的颜色,缺省为蓝色。

    FloodPercent: 显示当前过程如流动条进行的百分比,参数改变时显示的百分数和流动条的面积改变,设为一整型值,取值范围是0~100。

    FloodShowpct: 决定是否在三维面板控件上显示百分比,是一个逻辑值。为Ture时显示,为False时不显示。

    FloodType: 表示用户对三维面板控件的使用方式。可取值有6个,如下所示:

0 缺省设置

1 表示流动条方向从左到右

2 表示流动条方向从右到左

3 表示流动条方向从上到下

4 表示流动条方向从下到上

5 表示使用指定的颜色从圆心向外画圆

 

二. 流动条设计

    如果在Windows 3.x下,工具箱中不存在三维面板控件,可选择File菜单中的"Add File…" 进行添加,在弹出的对话框中找到Windows\System目录,然后选定Threed.vbx文件即可,如果使用VB 4.0,需在Tools菜单中选择Custom Control命令,选定Sheridan 3d Controls项,按OK按纽,可在工具箱中增加三维面板控件。

    启动VB ,在窗体中画一水平方向的长方形三维面板控件,按F4,在属性窗口中设置其Name为P3d、Bevellnner为2-Raised、FloodType为1、FloodshowPct为True,再在窗体中画一个按纽Command1,双击该按纽,键入下面的代码:

 

Sub Command1_Click()

P3d.floodpercent=0

For N%=1 To 100

If N%>100 Then

Exit sub

End If

P3d.FloodPercent=N%

Next N%

End Sub

    按F5,运行该程序,点击Command按纽,即可看到流动条效果。

利用VB的图片框实现屏幕的滚动


    对于学习使用VB来编程的电脑爱好者来说,可能会遇到这样一个问题:就是如何实现屏幕的滚动,因为当要显示的内容超出了屏幕的大小后,利用VB所提供的垂直滚动条和水平滚动条等控件是不可能直接实现这一特殊显示功能的。那么有没有其它的办法呢?答案是肯定的。我们知道VB的图片框是用来显示图形的,但它还有许多其它用途,比如可以用来创建一些动画图形等。其实对于上面的问题我们也可以利用图片框来巧妙地解决。方法如下:

    首先,单击工具框中的图片框(Picture Box)控件和命令按钮控件,在窗体(Form1)上建立图片框对象Picture1和命令按钮对象Command1,将命令按钮的Caption属性设置为"退出",Picture1的大小设置为显示区域的大小,再单击工具框中的图片框控件,在Picture1上建立另一个图片框对象Picture2,将它的Left和Top属性设置为0。用文本框,标签框等其它控件或导入一幅图象在Picture2上设定具体的显示内容,当然Picture2的大小一定要先调整到能全部容纳所有要显示的内容,最后单击工具框中的垂直滚动条控件和水平滚动条控件,在窗体(Form1)上分别建立垂直滚动条对象VScroll1和水平滚动条对象HScroll1,并设置好它们的属性。至此在窗体(Form1)上的所有设置工作就完成了,下面是具体的程序代码:

Private Sub VScroll1_Change()

Picture2.Top= -VScroll1.Value

End Sub

Private Sub Hscroll1_Change()

Picture2.Left= -HScroll1.Value

End Sub

Private Sub Command1_Click()

End

End Sub

    运行程序,当按下横、竖滚动条时,就能使显示内容实现左右、上下的滚动。此方法简单易行,有兴趣的朋友不妨试一试。

VB中阴影字体的实现
太原 胡建民


    Visual Basic确实是一种很不错的应用程序开发工具。笔者在使用中,也确实感到用VB设计程序,许多方法的实现是那么的简单。有时,仅仅需要几条语句,就可实现一种方法、效果或功能。下面就介绍一下,阴影字体在VB中的实现。程序如下:

Private Sub Form-Click()

CurrentX=700

CurrentY=1000

FontSize=30

ForeColor=QBColor(8)

Print”Software Weekly”

CurrentX=750

CurrentY=1050

FontSize=30

ForeColor=QBColor(12)

Print”Software Weekly”

End Sub

    在属性(properties)窗口中设置:Auto3D为true Font选一种True Type字体。

    该程序是把代码加到Form的Click事件中,通过先打印字体的阴影部分,再打印出字体,以实现阴影字体效果的。试运行该程序,单击窗体后,即呈现出阴影字体Software Weekly。


在VB中制作单独程序封面的两种方法
辽宁铁岭 金永涛


    这里所谓的单独封面,是只独立应用程序窗口本身的一个窗口,这个窗口在程序运行时首先弹出屏幕,用于装饰程序本身,或简单的演示一下程序的优越性。这样的封面在很多专业的WINDOWS程序中均存在,在VB中可有两种简单的方法实现这一功能。


第一种方法:多窗体编程方法

    此方法是通常采用的方法,即在程序中创建两个或两个以上的Form窗体,把其中的一个作为专门的程序封面制作场所,具体方法:

    1、创建一个新项目Form1,并在此窗体内安放Command1命令按钮,在Command1-Click()事件中输入结束程序代码“END”。

    2、单击菜单的“Insert"项目,加入一个新窗体Form1。

    3、双击Form1窗体空白处,在Form1-Load()事件中输入如下代码,用于隐藏主窗体Form1,置第二窗体为最大模式,并在运行程序首先显示和二窗体:

Private Sub Form-Load () ’隐藏主窗口

Form1.Visible = 0 ’窗口2最大模式

Form2.WindowState =2 ’显示窗口2

Form2.Show

End Sub

    4、 在窗体Form2中定义全程变量:

Dim strr1 As String

Dim i As Integer

    5、在窗体Form2中放入一个时间控件Timer1。

    6、在窗体Form2中的Form-Load ()事件中输入以下代码,用于在窗体2中显示图像,并置时间控件频率:

Private Sub Form-Load ()

Form2.Picture = LoadPicture("c:\windows\setup.bmp")

Timer1.Interval = 10

i =0

End Sub

    7、在时间控件Timer1- Timer1()事件中进行程序封面的制作工作,演示简单的动画,并控制此动画运行一段时间后自动停止,关闭程序封面,返回程序主窗口;下面的代码实现在一个图片上随机显示字符串,显示30次字符串后自动退出。

Private Sub Timer1-Timer ()

Strr1 = "程序封面演示“

With Form2

.Font.Transparent =True ’透明显示字符

.Font.Size = Rnd *30+10 ’随机变化字号

.Font.Italic =True ’斜体有效

.ForeColor=RGB(Rnd*256,Rnd*256,Rnd*256) ’随机变化前景

.FontName =Screen.Fonts (Rnd*7+14) ’随机变化字体

End With

hh=Form2.TextHehght (strr1) ’取字符串高度

ww= Form2.TextWidth (strr1) ’取字符串宽度

x=Rnd * ( Form2.ScaleWidth-ww) ’随机改变坐标

y=Rnd *( Form2.ScaleHeight-hh)

Form2.Current X=x

Form2.Current Y=y

Form2.Print strr1 ’显示字符

i = i +1 ’计数

If i >30 Then

Unload Me ’关闭封面

Form1.Show ’调入主窗口

Timer1.Enabled =False ’关闭时间控件

End If

End Sub

 

    8、为了能够人为地控制程序封面的停留时间,可在窗体Form2鼠标单击事件中安放退出封面代码:

Private Sub Form-Click ()

Unload Me

Form1.Show

Timer1.Enabled =False ’关闭时间控件

End If

End Sub

    至此工作全部完成,当运行程序时,首先弹出程序封面,封面上显示一幅·BMP图像,之后在此图像上进行随机字符串的显示,字符串的位置、字体、字号、前景色等值都是随机变化的,显示30次后自动关闭封面返回主窗口,演示过程中用鼠标单击窗口也会返回主窗口,在主窗口中按下结束按钮退出程序。具体操作时还有很多其它技巧,比如可以置第二个窗体为主窗体,这样运行时可自动先弹出程序封面,可省略隐藏窗体和调入窗体的过程,另外第二窗体也可以在程序运行时由代码动态生成,这样编程时复杂一些,但有利于程序代码的管理;程序封面的具体制作过程,有许多动态图像控制方法可以使用,只要灵活动用VB的作图方法,再加上一些必要的API函数的配合,会制作出理想的程序封面。

 

第二种方法:隐藏控件方法

    多窗口编程存在着一定的复杂性,需要对多个窗体的·Frm文件进行管理,编码时还需要频繁地在多个窗口间进行转换。实际上通过一个窗体也可以编制出类似的封面效果。基本原理就是在程序运行时首先通过VISIBLE属性隐藏全部控件,然后在主窗体内进行程序封面设计和演示,延时一定时间再恢复所有控件的显示,即达到了独立程序封面的制作过程。由于窗体内的控件很多,逐一隐藏或显示非常繁琐,可采用容器控件简化操作过程,即把控件全部放到Frame1等控件上,这样只要执行Frame1.Visible=0,即可使其上面的所有控件隐藏起来。

c由于程序只涉及一个窗体,程序设计的大部分工作只是编码过程,所以不再分步介绍。在窗体Form1中安放一个时间控件Timer1 和一个容器控件Frame1,再在Frame1上安放一个命令按钮Command1,具体程序设计时可把所有主程序工作控件放在Frame1上;之后把下面的代码填入相应的事件之中即可完成全部程序设计工作。运行此程序后首先在全屏幕窗体内显示图像,并从左上角开始逐渐放大字符串“程序封面演示”,放大过程中颜色发生平滑变化,形成美丽的拖尾效果,连续显示5次后自动关闭封面,返回主程序窗口,同样立即关闭程序封面,返回主程序窗口,单击主窗体中的命令按钮退出程序。

’定义全程变量

Dim i ,j As Integer

’退出程序按钮

Private Sub Command1-Click ()

End

End Sub

’单击窗体关闭封面

Private Sub Form-Click ()

Frame1.Visible =1 ’恢复容器控件

timer1.Enabled =False ’关闭时间控件

Form1.WindowState =0 ’恢复缺省窗口模式

End Sub

’准备工作

Private Sub Form -Load ()

Form1.WindowState =2 ’窗口最大化

Frame1.Width =Form1.Width ’调整容器控件尺寸

Frame1.Height =Form1.Height

Frame1.Top =0 ’调整容器控件位置

Frame1.Left =0

Frame1.Visible =0 ’隐藏容器控件

timer1.Interval =10 ’置时间频率

Form1.Picture =LoadPicture ("c:\windows\setup.bmp") ’装入图像

Form1.ScaleMode=3 ’置坐标刻度

Form1.FontName =“黑体” ’置字体名称

End Sub

’封面制作 (动画演示)

Private Sub timer1-Timer ()

Strr ="程序封面演示"

With Form1 ’透明显示

.Font.Transparent =True

.Font.Size = i + 1 ’放大字号

.Font.Italic =True ’斜体有效

.ForeColor=RGB(i*3,56,256-i*3) ’平滑变化颜色

End With

string =strr

Form1.Current X=i ’连续改变坐标

Form1.Current Y=i

Form1.Print stringg ’显示字符串

i = i +1

If i >72 Then ’放大到72号字

j =j +1 ’循环计数

i =0

Form1.Current X=72

Form1.Current Y=72

Form1.ForeColor =RGB(255,56,0) ’重新显示一次字符

Form1.Print stringg

End If

If j =5 Then ’动画计数

Frame1.Visible =1 ’显示容器控件

timer1.Enabled =False ’关闭时间控件

Form1.WindowState=0 ’恢复窗口模式

End If

End Sub

    以上方法及程序在WINDOWS 95系统下,在VB4.0环境下调试通过。

用VB实现全屏幕图形界面及动态功能提示
王华 张晖 黄润发



一、 全屏幕图形界面设计

    图形界面是现代软件中人机交互的主要手段。为了追求界面的统一和美观,在软件开放过程中,图形界面大多采用全屏幕构图方式。这是通过将窗体的边框设置为无边框(BorderStyle=None),将窗体显示模式设置为极大化(WindowState=Maximized)来实现的。

    当一个窗体界面的设计中要容纳多张图片和多个控制时,将出现窗体显示速度明显变慢的现象,严重影响了程序运行的流畅性。为了解决这一问题,在开放过程中,采用了一种将【界面设计窗体】与【功能实现窗体】分开处理的方法。

    在【界面设计窗体】中,首先按功能的需要和界面设计的创意,将所需的大量图片和控制在屏幕上安排好,选择美观的字体、颜色、线型,对屏幕界面进行设计、修饰加工;然后在其全屏幕运行的状态下,利用剪贴技术,将这一设计完成的图形界面全屏幕复制到剪贴板上;接着将这一屏幕映象作为一张图片粘贴在【功能实现窗体】的背景上。这样,从外观上看,两个窗体的形状完全相同,而在屏幕的显示速度上,后者明显加快。这时,【功能实现窗体】中的控件已变成一个象征性的图标,对它的操作,可在控制图标的对应位置上设置一个Image 类型的图象框,通过对图象框的操作,来代替原先对控制对象的操作。

    采用这种方法,使窗体界面设计的灵活性大大增加,可以任意发挥,而不用担心控件、图片太多,影响窗体的显示速度。但采用这种方法,将不可避免地增加应用程序本身所占的存储容量,这是以容量换取速度必须付出的代价。

二、 动态功能提示信息的实现

    在现代软件设计中,多数功能图标、按钮都在界面上直接确定其对应的名称,同时也提供了动态提示的功能,即当鼠标移至某一控件时,或使鼠标的形状用一具有象征意义的图标代替,或自动出现一条文字提示,下面介绍一下如何实现这种先进的提示模式。

    动态改变鼠标的图形形状,是通过控件的MousePointer属性设置为13(自定义),然后在MouseIeon属性中选取一ICO图标文件来完成的;动态文字提示功能是利用控件的MouseMove事件来实现的:将功能提示处理程序设计在对应的MouseMove事件过程中,当鼠标移动到该控件范围区域时,即可触发程序执行,完成动态功能提示;为了防止处理程序反复触发,必须设置一控制开关,使处理程序只在鼠标第一次触发该控件区域时被执行;取消功能提示的处理程序设计在窗体的MouseMove事件中,说明程序如下:

Dim FirstTouch As Boolean '防止反复触发处理程序的控制变量

Private Sub ControlObject- MouseMove ()

If FirstTouch Then

FirstTouch =False '显示功能提示字符

End Sub

 

Private Sub Form- MouseMove ()

FirstTouch =True '取消功能提示字符

End Sub

Visual Basic窗体背景花纹的实现


    我们在开发软件过程中,为提高软件的商品化程度,感觉到界面的美观程度是一个软件能否获得成功的一个重要因素,我们仔细研究了一些成功的商品化软件,从这些软件上可以看到,程序窗口背景能显示出非常美丽的、富有立体感的花纹。而采用Visual Basic进行窗体设计,若只按照系统提供的功能,只能从有限的几种颜色中选择一种颜色或采用程序绘制一些简单的线条。而想实现立体感很强的纹理图案,一般只能采用窗体的PICTURE属性调用位图文件,使用这种方法实现有许多缺点 ,其一是窗体大小受位图大小的限制,调整起来麻烦,不具有通用性和灵活性;其二是浪费资源,因为花纹图案基本上是重复图案,采用与窗体同样大小的位图是一种浪费。

    下面介绍一种窗体背景花纹实现的方法。在窗体上建立一个网格控件,设定网格行不可见,去掉固定行和固定列,用程序实现网格控件与窗体同样大小,并随窗体大小的改变而改变。然后设计一个花纹图案,形成BMP位图文件(本文程序使用文件Pict1.bmp),或者从其它图象中截取一段图案,也可以利用Windows系统提供的图案(如c:\windows\Tiles.bmp),将其调入Picture控件。设定网格的每个单元与该图案大小相同,使单元的数量正好覆盖整个窗体背景,再将所有单元均显示该图案。通过子程序Backpict()实现以上过程,不论图案大小、窗体大小,程序都能自动调整网格控件大小和网格单元大小及单元数量。

    该程序在Visual Basic 5.0上调试成功。

    1.新建窗体Form1,属性如下:

    Caption =“背景花纹的实现”

    Borderstyle=3(无最大、最小化按钮)

    2.建网格控件Grid1,它的位置和大小将在程序中设置(与Form1同样大),属性为:

    Enabled = False(焦点不会落在网格控件Grid1上)

    Fillstyle=1(改变所有单元Text特性)

    Fixedcols=0(无固定行)

    Fixedrows=0(无固定列)

    Gridlines = False(网格行不可见),

    Visible = True

    3.建立图象控件Picture1,程序运行时将背景花纹基本图案放入其中,属性为

    Visible = False(不可见)

    Autosize = True(自动调整大小)

    4.控件中加入Sheridan 3D Controls,选取其中的三维命令按钮SSCommand,建立两个按钮

    SSCommand1.Caption=“退出”

    SSCommand2.Caption=“更换背景”(演示不同的背景图案)

    它们的属性Picture可调用与背景相同或不同的图案,如果使用普通的命令按钮控件Command也可,只是命令按钮无背景图案。

    5.建立背景图案形成子程序:

    Dim pictfile As String '位图文件名

    Dim FILEPATH As String '文件路径

    Sub Backpict(pictfile)

    picture1.ScaleMode = 3

    Form1.ScaleMode = 3

    picture1.Picture = LoadPicture(pictfile)

    '网格控件覆盖整个窗体背景

    grid1.Top = -1

    grid1.Left = -1

    grid1.Width = Width

    grid1.Height = Height

    grid1.Cols=Int(Form1.ScaleWidth/picture1.ScaleWidth) + 1

    grid1.Rows=Int(Form1.ScaleHeight/picture1.ScaleHeight) + 1

    '所有单元大小等于基本图案大小

    For i = 0 To grid1.Cols - 1

    For j = 0 To grid1.Rows - 1

    grid1.ColWidth(i) = picture1.ScaleWidth * 15

    grid1.RowHeight(j) = picture1.ScaleHeight * 15

    Next j

    Next I
 

    '选定所有单元

    grid1.SelStartCol = 0

    grid1.SelStartRow = 0

    grid1.SelEndCol = grid1.Cols - 1

    grid1.SelEndRow = grid1.Rows - 1

    grid1.Picture = Picture1.Picture

    End Sub
 

    6.窗体主程序

Private Sub Form_Load()

Private Sub Form_Load()
 

'得到运行程序路径名,路径名后带反斜杠

If Right(App.Path, 1) <> "\" Then

filePath = App.Path & "\"

Else

filePath = App.Path

End If


'窗体初始显示由Tiles.bmp基本图案组成的背景

pictfile = "c:\windows\Tiles.bmp"

backpict (pictfile)

End Sub

    7.退出程序命令按钮

Private Sub SSCommand1_Click()

End

End Sub

    8.演示不同的底纹图案

Private Sub SSCommand2_Click()

 

'两种背景图案交替演示

If pictfile = filePath & "Pict1.bmp" Then

pictfile = "c:\windows\Tiles.bmp"

Else

pictfile = filePath & "Pict1.bmp"

End If

Backpict (pictfile)

End Sub

VB编程的一些心得



    在大学作毕业设计的课题是编制一个教学软件,所以很自然地和VB这种易学、易懂、界面友好漂亮的语言打上了交道。在编写的过程中当然遇到了许多的问题,这里将一些简单的小程序写下来与喜爱编程的朋友们分享。

一、封面

    封面的设计是这样的,先出现一窗体,上面为你喜欢的图案。然后出现一艘从左向右行驶着的船。屏幕上方从两侧分别移动出“欢迎”两个字。

    具体的制作方法是:把预先选好的背景图案装入封面窗体中,窗体命名为CAI。再分别在三个图像控件(image)中装入预先制作好的位图“欢”、“迎”和船型图案。然后把三个image放置在初始位置(即 图案刚在窗体出现时的位置),并把它们的可视属性都设置为“false”。程序如下:


Sub Form_load()

cai.Show ′显示封面窗体

Dim i ′定义变量

image3.visible=True ′船型图像控件出现

a1: If image3.Left < 6120 Then

′6120为船移动到屏幕右边的坐标,此值可以随需要选取

image3.Move image3.Left+50

′移动此图像控件如嫌移动慢,可改变移动值

Goto a1

End If

image1.visible=True ′“欢”字出现

a2: If image1.Left < 2120 Then

′2120为“欢”字移动到屏幕中间的位置

image1.Move image1.Left+50 ′移动此图像控件

Goto a2

End If

image2.visible=True ′“迎”字出现

a3: If image2.Left > 5420 Then

′5420为“迎”字移动到屏幕中间的位置

image2.Move image2.Left-50 ′移动此图像控件

Goto a3

End If

For i=1 To 10000

′使窗体暂停一段时间时间长短可通过改变循环次数实现

Next i

menul.Show ′显示程序主窗体

Unload cai ′卸载封面窗体

End Sub


二、简单的“动画”

    点击一3D按钮后,屏幕表现光线平行进入一玻璃管,在管中有一散射中心,有的光线射到此中心后反射到管的初始端。程序如下:


Sub Command3Dl_Click()

Dim i, j, k, m, n ′定义变量

For i=2080 To 5520

′显示出三条线,直到图像中的散射中心处,颜色为黑色

Line(2080,2760)-(i,2760),RGB(0, 0, 0)

Line(2080,2860)-(i,2860),RGB(0, 0, 0)

Line(2080,2660)-(i,2660),RGB(0, 0, 0)

Next i

For j=5520 To 4800 Step-1 ′反射光线第一次射到管壁上

Line(5520,2760)-(j,2760-(5520-j)*.33333333),RGB

(255, 0, 0) ′反射光线,颜色为红色

Line(5520,2660)-(5520+(5520-j),2660),RGB(0, 0, 0)

Line(5520,2860)-(5520+(5520-j),2860),RGB(0, 0, 0)

′没有遇到散射中心的两条光线,为黑色,继续前进

Next j

For k=4800 To 3360 Step-1 ′反射光线第二次射到管壁上

Line(4800,2520)-(k,2520+(4800-k)*.33333333),

RGB(255, 0, 0) ′反射光线,颜色为红色

Line(6240,2660)-(6240+(4800-k),2660),RGB(0,0,0)

Line(6240,2860)-(6240+(4800-k),2860),RGB(0,0,0)

′没有遇到散射中心的两条光线,颜色为黑色

Next k

For m=3360 To 2080 Step-1 ′反射光线第三次射到管壁上

Line(3360,3000)-(m,3000-(3360-m)*.33333333),

RGB(255, 0, 0) ′反射光线,颜色为红色

Next m

End Sub

三、封底

    封底的设计是:先出现全黑的屏幕,然后从上至下逐渐拉出白底红字的“再见”的字样。先按要求在画板中做一个BMP图,上面写着“再见”。然后在一名为BYE的窗体中加入一个全屏大的Picturel, 将BMP图装入。程序如下:

Sub Form_Load()

Dim i ′定义变量

bye.Show ′封底出现

Unload menu1 ′卸载主菜单

al: If picture1.Height < 7130 Then ′7130为图的高度

picturel.Height=picture1.Height+50 ′下拉屏幕

GoTo al

End If

For i=1 To 20000 ′使窗体暂停一段时间

Next i

End ′结束所有操作

End Sub

处理过程时的鼠标显示



    为让你的程序更加专业一点,我们往往需要在程序处理过程时的鼠标形状显示为“沙漏”状态。我们一般的方法是在子程序的开始及结尾编程来改变鼠标形状,这样十分烦琐且容易忘记。我们还可以以下面的方法来实现这一目标:

    1、创建一个新类,命名为:CHourGlass;

    2、在此类中加入以下代码:

      Private Sub Class_Initialize()

      Screen.MousePointer = vbHourglass

      End Sub

      Private Sub Class_Terminate()

      Screen.MousePointer = vbDefault

      End Sub

    3、在子程序的开始加入下面代码:

      Dim MyHourGlass As CHourGlass

      Set MyHourGlass = New CHourGlass




月光软件 版权所有: 1998-1999