2018年9月20日 星期四 1026pm --银戒指出品,蛇宝宝系列-- |
API相关VB范例
声明:
本帮助文件由银戒指软件工作室整理后出版,内容全摘自网络。版权归实际作者所有。
为了让网友们能更好的在易语言里应用Windows API 函数,于是我为大家将网上的API相关VB范例资料整理成一个帮助文件。对应VB范例来写易语言API 函数,使得易语言写API变的更简单,容易,也更有效。
本帮助文件还收集了几篇网络上的经典文章,多多捧场:)
注:为了节省空间,点击每个文件夹条目便是此分类的目录
作者简介:
***************************
银戒指软件工作室: \●
( >
*************************** /\
☆╓══╦══╖☆
╭╩╮* ‖* ╭╩╮
╲╱ * 戒* ╲╱
╰☆银℡ ╨ ℡指☆╮
银戒指软件工作室目前作品:
《蛇宝宝歌词搜录机》(推荐)
《魔法时间》(推荐)
《二十四点速算机》(推荐)
《非常任务》(iq不高可过不了关)(推荐)
《七怪五二三》(扑克游戏)(推荐)
《3个易模块》(推荐)
《抢棋子》(iq类)(推荐)
版权所有:Copyright [C] 1999-2000 eathe soft work
制作渐变的窗口背景色 吴斌 |
||||
在许多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<Br"> 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 工具条控制
|
在Visual Basic中如何拖动窗体或控件 |
现在的许多Windows下的应用程序,都采用了图形化的界面,例如:WINAMP等!这样做的好处是可以使程序界面更漂亮生动,更具吸引力。但是在这样的界面下就不能使用Windows原来的标题条了,否则会影响界面的美观性。那么在没有标题条的情况下如何用鼠标拖动窗体呢?或者拖动其它的控件呢? 其实,采用API函数调用很容易实现,下面我们以拖动窗体(Form1)为例来具体讲一下实现方法: 1.新建立一个项目,名称为:test.vbp. 2. 填加一个模块,名称为:test.bas,并且在声明部分加入以下代码: Declare Function ReleaseCapture Lib "user32" () As Long Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Public Const WM_SYSCOMMAND = &H112 Public Const SC_MOVE = &HF012 其中ReleaseCapture函数是用来释放鼠标捕获的,SendMessage函数是一个在WindowsAPI中非常重要的函数,在这里的作用是用来向Windows发送移动窗体的消息。WM_SYSCOMMAND是向Windows发送消息的常量。SC_MOVE是控制移动窗体的常量。请注意:这里SC_MOVE的赋值一定要是&HF012,它表示鼠标对象。 3.在窗体的MouseDown过程中加入以下代码: ReleaseCapture SendMessage Form1.hwnd, WM_SYSCOMMAND, SC_MOVE, 0 其中ReleaseCapture函数用来释放鼠标捕获,SendMessage函数向Windows发送移动窗体的消息。 4.保存并运行程序,按下鼠标,你会发现窗体会随着鼠标的移动而移动。就和其它著名的应用程序一样。 以上讲述了如何在VB中用鼠标拖动窗体,其实,控件的拖动的原理是一样的。 例如以下代码可以实现图片框的拖动: ReleaseCapture SendMessage Picture1.hwnd, WM_SYSCOMMAND, SC_MOVE, 0 其实,运用API函数可以实现许多你意想不到的功能。如果需要更多有关VB的其它经验与技巧。建议访问http://vb2000.kstar.com站点。 |
拖动无系统标准标题栏的窗口 吴斌 |
大家知道,在VB中可以通过设置Form的属性,制作无系统标题栏的窗口。可是,由于失去了系统标题栏,如何使用鼠标拖动窗口便成了一个棘手的问题。其实,借助API函数ReleaseCapture和SendMessage,这个问题便可迎刃而解了。 首先,在module文件中加入下列声明语句: Declare Sub ReleaseCapture Lib"User"() Declare Function SendMessage Lib"User"(ByVal hWnd _ As Integer,ByVal wMsg As Integer,ByVal wParam As Integer,_lParam As Any)As Long Public Const WM_SYSCOMMAND=&H112 Public Const SC_MOVE=&HF010 Public Const HTCAPTION=2 然后,在Form的MouseDown事件中加入下列代码: ReleaseCapture Ret&=SendMessage(Me.hWnd,WM_SYSCOMMAND,_SC_MOVE+HTCAPTION,0) …… 程序运行后,只要当光标落在Form区域时按住鼠标左键,便可以拖动窗口了。在一些要求生动活泼的界面的程序设计中,开发者常常希望自制风格独特的标题栏,以满足整个界面的要求。通过这个方法,就可以使自制的标题栏达到乱真的地步。不过,用作自制标题栏的控件,必须具有MouseDown事件以摆放上述代码。 |
移动没有标题栏的窗口 |
我们一般是用鼠标按住窗口的标题栏,然后移动窗口,当窗口没有标题栏时,我们可以用下面的方法来移动窗口: 在 BAS 文件中声明: Declare Function ReleaseCapture Lib "user32" () As Long Declare Function SendMessage Lib "user32" _ Alias "SendMessageA" ( _ ByVal hwnd As Long, ByVal wMsg As Long, _ ByVal wParam As Long, lParam As Any) As Long Public Const HTCAPTION = 2 Public Const WM_NCLBUTTONDOWN = &HA1 然后,在 Form_MouseDown 事件中: Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) ReleaseCapture SendMessage hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0& End Sub |
VB编程中窗体的控制技巧 |
在Visual Basic中,每个应用程序都是从窗体(Form)开始的,窗体是构成用户接口的所有控件的容器。录活运用窗体的各项属性和操作,可以为用户设计出赏心悦目的操作界面。 1.窗体以当前屏幕分辨率全屏显示? 在应用程序的编制调试过程中,用于经常用到菜单、工具条和工具框等辅助工具,一般不将窗体设为全屏显示,以便于操作;另外,当屏幕分辨率改变时,窗体可能不能正常显示,可以在窗体的Load事件中插入下列代码,即可使窗体启动时以当前屏幕分辨率全屏显示: Private Sub Form_Load() Form1.top=0 ‘设置窗体上边界位置 Form1.left=0 ‘设置窗体左边界位置 Form1.Width=Screen.Width ‘设置窗体宽度为屏幕宽度 Form1.Height=Screen.Height ‘设置窗体高度为屏幕高度 End Sub 2.使窗体保持在最上层? 有时应用程序需要一个信息或查询窗体总保持在最上层,即使用读书切换到其他窗体也能看到该窗体,如Microsoft Word中的Find窗体,这是通过调用Windows API函数SetWindowPos()实现的,示例如下:? Option Explicit Private Declare Function SetWindowPos Lib“User32”(ByValhwnd As Long,ByVal h WndInsertAfter As Long,ByVal x As Long,ByVAl y As Long,ByVal cx As Long,ByVal cy As Long,ByVal wFlags As Long)As Long Const HWND_TOPMOST=-1 Const SWP_SHOWWINDOW=&H40 Private Sub Form_load() Dim retValue As Long RetValue=setWindowPos(me.hwnd,HWND_TOPMOST,Me.CurrentX,Me.CurrentY,300,300,SWP_SHOWWINDOW) End Sub 3.窗体装入速度慢的处理技巧? 在缺省情况下,Visual Basic装入和显示项目的第一个窗体。如果窗体装入过程超过一秒,用户只好耐心等待,特别是在窗体中含有大型位图或许多控件时。其实,微软在OFFICE组件中已经很好地处理了这一问题。下面的程序演示了处理低速窗体的装入技巧,在应用程序启动时,首先启动一个简单的快速装入窗体,可以将公司标志或其他信息显示在上面,然后在快速窗体后台中装入慢速窗体,慢速窗体装入后将快速窗体卸出,从而解决了让用户厌烦的等待问题。? Private Sub Form_Load() Form1.Show Form1.Refresh Load Form2 ‘装入慢速窗体 Form2.Show ‘显示慢速窗体 End Sub 如果省略Form1.Show方法,则需装入慢速窗体后才能显示信息窗体。Refresh方法让Visual Basic更新显示后再执行后面的命令,缺省情况下,Visual Basic只在不执行其他代码时,才有机会刷新显示。慢速窗体Form2装入后,用下列代码将快速窗体Fomr1卸出:? Private Sub Form_Load() UnLoad Form1 ‘卸出快速窗体 End Sub 一旦装入窗体,它就占用了所要的资源,所以不再需要的窗体应及时卸出,将占用的资源交还系统。另外,由于窗体装入比较慢,特别是包含位图或其他资源的大文件装入更慢,所以应用程序运行期间应尽量避免频繁装入/卸出窗体,而最好在应用程序启动时把窗体装入内存,需要时再显示。? |
利用VB控制窗口显示风格 广州 郭少越 |
软件界面生动与否很大程度上决定于你对窗口的设计和控制。事实上,Windows程序员可以对系统中的任何窗口进行操纵,它意味着,Windows程序员可以直接操纵任何正在运行的应用窗口;可以发现一个特定的应用是否在运行,如果该应用没有运行还可以启动它;可以重新排列屏幕上的所有窗口;还可以使其他应用的窗口最大化或最小化。下面我们探讨一种十分有意义的应用。 我们很希望在程序激活其它窗口时仍使得封面窗口处于前台,也就是说该窗口具有“ 总在最前面”(“Always On Top”)这一特性。其实Microsoft系列软件都是这样做的,当你运行Word、Excel或PowerPoint时,你会发现它们的封面窗口不随系统激活其它窗口而消失。 Visual Basic For Windows(以下简称VB)作为一种可视化编程软件,以其优秀的图形化界面设计风格而著称。利用它可使软件开发周期大为缩短,然而VB对Windows DLL(动态链接库)调用的强大功能却易受不少程序员所忽略。事实上,灵活应用Windows DLL的API(应用程序接口)才能使你开发的系统更加充满活力。正是由于VB支持DLL使得我们可以随心所欲地控制窗口显示风格,从而我们可以让系统封面总处于前台,下面说明用到的API函数。 .SetWindowPOS VB定义: Declare Sub SetWindowPosLib“User” (Bybal hWnd as Integer ,hWndInsertAfter as Integer,ByVal X as Integer,ByVal Y as Integer,ByVal cx as Integer ,ByVal cy as Integer,ByVal wFlags as Integer) 说明:能改变窗口的位置和大小,并能修改窗口在内部窗口列表中所处的位置, 以控制显示次序。 参数 类型/说明 hWnd Integer-需定位的窗口 hWndInsertAfter Integer-窗口句柄,在窗口列表里, 窗口hWnd将放在该窗口句柄的后面,它可以取以下值: hWnd_BOTTOM:把窗口放在窗口列表的底部; hWnd-TOP:把窗口放在Z序的顶部。Z序是窗口按层次级别显示的顺序; hWnd_TOP(MOST):把窗口放在列表的顶部,位于所有最顶窗口之后。 X Integer—窗口新的X坐标,如果hWnd是一个子窗口,X给出的是父窗口的客户坐标。 Y Integer—窗口新的Y坐标,如果hWnd是一个子窗口,Y给出的是父窗口的客户坐标。 cx Integer—指定新窗口宽度。 cy Integer—指定新窗口高度。 wFlags Integer—包含下列标志之一的整数: SWP_DRAWFRAME:围绕窗口画一个边框; SWP_HIDEWINDOW:隐藏该窗口; SWP_NOACTIVATE:不激活该窗口; SWP_NOMOVE:保持当前位置(X和Y被忽略); SWP_NOREDRAW:窗口不自动重画; SWP_NOSIZE:保持当前大小(cx和cy被忽略); SWP_NOZORDER:保持窗口列表中的当前位置(hWndInsertAfter被忽略); SWP_SHOWWINDOW:显示该窗口。 注释:当一个窗口成为最顶窗口时,它所有的从属窗口也成为最顶窗口;当它成为非最顶窗口时,它全部的从属窗口和拥有窗口也成为非最顶窗口,Z序表示窗口沿着从屏幕里向外延伸的假想Z轴,从顶到底的排列次序。 VB实现窗口拥有“Always On Top”特性: 首先,定义全局常量及函数。 Global Const hWnd_TOPMOST=-1 Global Const SWP_NOACTIVATE=&H10 Global Const SWP_SHOWWINDOW=&H40 Declare Sub SetWindowPosLib “User” ByBal hWnd as Integer,hWndInsertAfter as Integer,ByVal X as Integer,ByVal Y as Integer,ByVal cx as Integer,ByVal cy as Integer,ByVAL wFlags as Integer) 主程序如下编写: Sub Main 0 Screen.MousePointer=11'使鼠标变为漏斗状 Load SystemCover'装载系统封面窗体 SetWindowPos SystemCover.hWnd,hWnd_TOPMOST,0,0,0,0,SWP_NOACTIVATE Or SWP_SHOWWINDOW'使得封面总处于最前面 Load InitWindow1'装载初始化窗体1 Load InitWindow2'装载初始化窗体2 : : Unload SystemCover'关闭系统封面窗体 Screen.MousePointer=0 '使鼠标变为缺省形状 End Sub |
让窗口一直在上面 |
很多流行软件都有这样一个选项:Always on Top。它可以让窗口在最上面,别的窗口不能覆盖它。我们在 VB 中,可以使用下面的方法来实现: Private Const SWP_NOSIZE = &H1 Private Const SWP_NOMOVE = &H2 Private Const SWP_NOZORDER = &H4 Private Const SWP_NOREDRAW = &H8 Private Const SWP_NOACTIVATE = &H10 Private Const SWP_FRAMECHANGED = &H20 Private Const SWP_SHOWWINDOW = &H40 Private Const SWP_NOCOPYBITS = &H80 Private Const SWP_NOOWNERZORDER = &H200 Private Const SWP_DRAWFRAME = SWP_FRAMECHANGED Private Const SWP_NOREPOSITION = SWP_NOOWNERZORDER Private Const HWND_TOP = 0 Private Const HWND_BOTTOM = 1 Private Const HWND_TOPMOST = -1 Private Const HWND_NOTOPMOST = -2 Private Declare Function SetWindowPos Lib "user32" ( _ ByVal hwnd As Long, _ ByVal hWndInsertAfter As Long, _ ByVal X As Long, _ ByVal Y As Long, _ ByVal cx As Long, _ ByVal cy As Long, _ ByVal wFlags As Long) As Long Private mbOnTop As Boolean Private Property Let OnTop (Setting As Boolean) if Setting Then SetWindowPos hwnd, -1, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE Else SetWindowPos hwnd, -2, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE End If mbOnTop = Setting End Property Private Property Get OnTop() As Boolean 'Return the private variable set in Property Let OnTop = mbOnTop End Property 调用 OnTop=True 即可让窗口 Always On Top。 |
创建无 Icon 的窗口 |
我们在很多时候都需要那种无 Icon 的 窗口,如“关于……”“查找”等。在 VB 中,我们可以按以下步骤来创建此类窗口: 1、设置窗口的 BorderStyle = 3; 2、在 Form_Load 中加入:Me.Icon = LoadPicture("") |
创建不规则窗口 |
Win32 API 有很多让你意想不到的功能。要创建特殊的不规则窗口看上去似乎很难。但我们如果我们说我们用几行代码就可以实现,这似乎不可思议。但事实就是如此!请试试: Private Declare Function CreateEllipticRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long Private Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long Private Sub Form_Load() Show 'The form! SetWindowRgn hWnd, CreateEllipticRgn(0, 0, 300, 200), True End Sub 上述代码可以创建一个椭圆形状的窗口。怎么样?? |
用VB5.0获取正在系统中运行的窗口标题 山东德州 胥智强 |
熟悉Visual Basic的读者都知道,AppActivate语句是激活一个应用程序窗口其后所带的参数是指要被子激活的应用程序窗口标题条的字符串。如果要激活的是一个常见的应用程序,我们在编写程序时就可以直接写上此程序的窗口标题。例如,我们想激活Windows95的计算器,可先运行程序x=SHELL("Calc.exe",1),然后再激活计算器窗口AppActivate“计算器”,则程序焦点自动转到计算器窗口上。然而单纯使用该方法局限性非常大,比如上述例子,如果我们放在英文Windows95上运行,计算器的窗口标题就不是“计算器”,而是“Calculator”。再一个局限性就是在很多情况下我们并不知道要激活的程序窗口标题名称,如何编制一个能自动查找程序窗口标题名称的程序是本文要解决的问题。 我们可以采取如下办法,来获取正在系统运行的窗口标题。 在WindowsAPI中有一个函数: Get Windows (ByVal hWnd As Long ,ByVal wCmd As Long) As Long 其中,hWnd是当前窗口句柄,wCmd是与hWnd有联系的常量,其含义如下: wCmd值 含义 GW-GHILD 第一个子窗口 GW-HWNDFIRST 子窗口的第一兄弟窗口,其第一个顶层窗口 GW-HWNDLAST 子窗口的最后一个兄弟窗口,或最后一个顶层窗口 GW-HWNDNEXT 后继窗口 GW-HWNDPRCV 先前窗口 GW-OWNER 窗口拥有者 此函数返回值是wCmd所指的窗口的句柄。 我们利用此句柄 ,再用函数Get WindowsText (ByVal hWnd As Long ,ByVal Ipstring As String, ByVal cch As Long) As Long,将句柄hWnd指定的窗口标题放入一个字符串变量Ipstring中,cch是指放入Ipstring中的最大字符数。此函数成功时返回字符串长度,如果窗口无标题则返回零。 在使用Get WindowsText函数前,还要先用函数Get WindowsTextLength (ByVal hWnd As Long )As Long得到hWnd指定窗口标题的长度,放入cch中。 自编一个过程FindTitle()查找系统中正在运行的所有标题,首先获得第一个顶层窗口句柄currwnd,而后采用While…Wend循环结构,当currwnd不为零而且标题文本长度不为零时,将获得的标题存入列表框Combo1,再找后继窗口的句柄,当句柄currwnd=0时表示已没有了后继窗口,退出循环。这样就将系统中所有的窗口句柄及标题找出来了。 然而调试中发现用此方法找到的窗口标题非常多,这说明Windows系统运行时有许多隐含的窗口,而这些窗口是我们所不需要的,而且用AppActivate激活时也出现错误。 因此我们再自编一个过程Sift ()查找可激活的窗口。其方法是用AppActivate逐个激活所有窗口,出现错误的丢掉,保留可激活的窗口标题,放入列表框Combo2。 首先新建窗体Form1,Caption=“获取窗口标题”,在窗体Form1上建立两个标签,Label1,Caption=“所有窗口标题”,Label2.Caption=“可激活的窗口标题”;建立两个下拉列表框,Combo1存放系统中的所有标题名称,Combo2存放可激活的标题名称;再建立两个命令按钮,Command1.Caption=“激活窗体”,可对所列窗体进行测试,命令按钮Command2.Caption=“刷新”,点击它可重新查找所有在系统中的窗体名称,当本程序运行以后又运行了新程序时使用此按钮。 从VB系统菜单上选取Project中的Add Module,将下述API函数及一些常量录入。 'Module 模块 Declare Function GetWindow Lib "user32"(ByVal hwnd As Long, ByVal wCmd As Long)As Long Declare Function GetWindowText Lib "user32" Aias"GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String,ByVal cch As Long)As Long Declare Function GetWindowText Length Lib "user32" Aias"GetWindowTextLengthA" (ByVal hwnd As Long)As Long Public Const GW-HWNDFIRST=0 Public Const GW-HWNDLAST=1 Public Const GW-HWNDNEXT=2 Public Const GW-HWNDPREV=3 Public Const GW-OWNER=4 建立两个子程序: Sub FindTitle () '查找桌面上的所有窗口标题 Dim currwnd As Integer Combo1.Clear Currwnd=GetWindow (hwnd, GW-HWNDFIRST) While currwnd<>0 Length= GetWindow TextLength (currwnd) listitem$=Space $(length +1) length= GetWindow Text (currwnd,listitem$,length+1) if length>0 Then Combo1.Addltem listitem $ End if currwnd= GetWindow (currwnd, GW-HWNDNEXT) if Combl1.ListCount>0 Then Combo1.Text=Combol.List (0) Combo1.Listindex =0 Else MsgBox“没有发现可活动的窗口”,16,“活动” End if Wend End Sub Sub Sift () 相关软件
下载说明
本站目前主要提供易语言源码、模块、支持库等下载大部分源码均为ZIP打包,
注:本站源码主要来源于网络收集。如有侵犯您的利益,请联系我们,我们将及时删除! 部分源码可能含有危险代码,(如关机、格式化磁盘等),请看清代码在运行。 由此产生的一切后果本站均不负责。源码仅用于学习使用,如需运用到商业场景请咨询原作者。 使用本站源码开发的产品均与本站无任何关系,请大家遵守国家相关法律。 推荐排行
随机浏览最新文档本周下载排行
|