VB自己设定消息框的显示位置
用VB实现任务栏右下角的小图标
用VB实现任务栏右下角的小图标将VB应用程序缩成系统状态栏图标二法第一种方法:VB光盘的tools\unsupport\systray目录下有一个例子,将此目录复制到硬盘,编译生成一个OCX控件,在自己的程序中使用此控件,可以实现将程序图标放于右下角系统图标区,这方法比调用API要简单得多第二种方法:梁洁仪---- 在很多应用程序中,其操作窗口缩小后将变成一图标放置在系统状态栏中。
---- 为什么有的程序可以缩小成图标呢?---- 对于Windows来说,这些图标并非窗口或程序,它们只是图标,能作出这样的功能,关键在于调用了Windows的API函数Shell_NotifyIcon,在Visual Basic开发环境中,通过其所附带的API浏览器,我们可查找出Shell_NotifyIcon 的声明格式如下:---- Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias"Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long---- 现把本函数声明中的参数分别说明如下:---- 参数dwMessage为消息设置值,它可以是以下的几个常数值:0、1、2。
在程序中为了使用更方便,我们把它们定义为三个常量:NIM_ADD、NIM_MODIFY及NIM_DELETE,本示例中的常量及Shell_NotifyIcon调用都可以在窗口新建的模块中声明它:Public Const NIM_ADD = 0 //加入图标到系统状态栏中Public Const NIM_MODIFY = 1 //修改系统状态栏中的图标Public Const NIM_DELETE = 2 //删除系统状态栏中的图标---- 这三个常量的应用将中下文中具体介绍。
VB实现窗口总是在最前面
Long, ByVal wFlags As Long) As Long
Private Const HWND_TOPMOST& = -1 ' 将窗口置于列表顶部,并位于任何最顶部窗口的前面
Private Const SWP_NOSIZE& = &H1 ' 保持窗口大小
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
SWP_NOMOVE 保持当前位置(x和y设定将被忽略)
SWP_NOREDRAW 窗口不自动重画
SWP_NOSIZE 保持当前大小(cx和cy会被忽略)
SWP_NOZORDER 保持窗口在列表的当前位置(hWndInsertAfter将被忽略)
SWP_SHOWWINDOW 显示窗口
在VB中声明此函数之后,我们就可以用以下调用将窗口放置在最前面了
SetWindowPos Me.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE
其中SWP_NOMOVE是常量H1,SWP_NOSIZE是常量H2
一个简单的例子:
Long,非零表示成功,零表示失败。会设置GetLastError
参数表
参数 类型及说明
hwnd Long,欲定位的窗口
VB-自定义对话框
(3)设置焦点。当窗体被显示时,带有最低的 TabIndex 设置的 控件接收焦点。按下 ENTER 键会调用缺省命令按钮或者有焦点的 命令按钮的 Click 事件。要在窗体被显示时将焦点给某个命令按钮, 则设置该命令按钮的 TabIndex 为 0,它的 TabStop 属性为 True。 也可以用 SetFocus 方法在窗体被显示时将焦点给指定的控件。 5、使对话框上的控件无效 有时候需要使控件无效,因为它们的动作在当前的上 下文中不适用。例如,当 Visual Basic 的“查找”对话框第一 次显示时,“查找下一个”按钮应无效。设置对话上的控件的 Enabled 属性为 False,可以使其无效。 三、自定义对话框的种类
2、设置对话框的属性 一般来说,用户响应对话框时,先提供信息,然后用“确定” 或者“取消”命令按钮关闭对话框。因为对话框是临时性的,用 户通常不需要对它进行移动、改变尺寸、最大化或最小化等操作。 其结果是:随新窗体出现的可变尺寸边框类型、“控制”菜单框、 “最大化”按钮以及“最小化”按钮,在大多数对话框中都是不 需要的。 3、添加和放置命令按钮 模式对话框必须至少包含一个退出该对话框的命令按钮。 通常用两个命令按钮:其中一个按钮开始动作,而另一个按钮关 闭该对话框而不做任何改变。典型状态是,这两个按钮的 Caption 属性设置“确定”与“取消”。在这个方案中,“确定”命令按 钮的 Default 属性设置为 True,而 Cancel 命令按钮的 Cancel 属 性设置为 True。虽然“确定”与“取消”是最常用的按钮,其他 的按钮标题组合也可使用。
一、创建自定义对话框的窗体 创建新的对话框,按照以下步骤执行: 1. 从“工程”菜单中选取“添加窗体”。 - 或者 在工具栏上单击“窗体”按钮,创建新的 窗体。 2. 如有必要,自定义窗体外观。 3. 在“代码”窗口中自定义事件过程。 二、设置自定义对话框 1、添加标题 对话框总应当有标识它的标题。要创建标题,设置该 窗体的 Caption 属性为将在标题条中显示的文本字符串。通常, 这一步是在设计时使用“属性”窗口来完成的,但也可以用代 码来完成这一步。 提示 如果想完全删除此标题栏,可以设置窗体的 ControlBox、MinButton 和MaxButton 为 False;设置 BorderStyle 为尺寸不可变的设置(0、1 或 3),并设置 Caption 为空字符串 ("")。
vb创建对话框的方法
VB创建对话框的方法1. 简介对话框是一种常见的用户界面元素,用于与用户进行交互和获取输入。
在VB (Visual Basic)中,创建对话框是一项重要的任务,可以通过几种不同的方法实现。
本文将介绍在VB中创建对话框的几种常用方法,并提供详细的步骤和示例代码。
2. VB中创建对话框的方法在VB中,创建对话框的方法主要包括以下几种:2.1 使用MessageBox.Show方法创建消息框MessageBox.Show方法是VB中创建对话框最简单和常用的方法之一。
该方法可以创建一个简单的消息框,用于显示一条消息并等待用户响应。
步骤:1.打开VB开发环境,创建一个新的Windows Forms应用程序项目。
2.在Form1的代码文件中,添加一个按钮控件,并为按钮的Click事件添加以下代码:Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Cl ickMessageBox.Show("Hello, World!", "提示", MessageBoxButtons.OK, MessageBoxI rmation)End Sub解释:上述代码中,MessageBox.Show方法的第一个参数是要显示的消息文本,第二个参数是对话框的标题,第三个参数指定了按钮的类型(这里使用了OK按钮),第四个参数指定了消息框的图标(这里使用了信息图标)。
结果:当用户点击按钮时,将显示一个带有消息文本”Hello, World!“的消息框,标题为”提示”,并包含一个OK按钮和一个信息图标。
2.2 使用InputBox函数创建输入框InputBox函数是VB中另一种创建对话框的方法,它可以显示一个输入框,用于获取用户的输入。
步骤:1.打开VB开发环境,创建一个新的Windows Forms应用程序项目。
vb6.0 对话框和菜单
阶段5 “字体”对话框
“字体”对话框用来设置并返回所用字体
的名称、样式、大小、效果及颜色等。
一.设计时建立“字体”对话框
设计时,在通用对话框控件的属性页窗 口“字体”选项卡中设置属性,包括字 体名称、字体大小、最小、最大、标志 、样式等。
二.运行时显示“字体”对话框
运行时,使用通用对话框控件的 ShowFont方法,或将Action属性赋值为4 ,可以显示“字体”对话框。在“字体 ”对话框中选定设置并关闭对话框。
一.控件名称 自定义,默认名称CommonDialog1、 CommonDialog2、……
二.设计时设置控件属性
用鼠标右键单击窗体上的CommonDialog控件图标,在 弹出的快捷菜单中选择“属性”选项,或在属性窗口 中选择“自定义”,再单击右侧的“„”按钮,就可 以打开”属性页“对话框。
三.打开通用对话框的Action 属性
⑴ 显示打开文件对话框 ⑵ 显示保存文件对话框 ⑶ 显示颜色对话框 ⑷ 显示字体对话框 ⑸ 显示打印机设置对话框 ⑹ 显示Windows帮助对话框
四.打开通用对话框的“方法”
⑴ ⑵ ⑶ ⑷ ⑸ ⑹ 显示打开文件对话框 显示保存文件对话框 显示颜色对话框 显示字体对话框 显示打印机设置对话框 显示Windows帮助对话框
菜单的类型 菜单编辑器 下拉式菜单 弹出式菜单
阶段1 菜单的类型
菜单是界面设计的重要组成部分,一般有两种基本类型:
下拉式菜单和弹出式菜单。 下拉式菜单通过打击菜单栏中的菜单标题来打开。
弹出式菜单则通过用鼠标左键或右键单击某个 区域的方式打开。
阶段2 菜单编辑器
VB
6.0没有菜单控件,但提供了建立菜单的菜单编辑器。 在VB 6.0集成开发环境中,选择“工具”菜单中的“菜 单编辑器”选项,可以进入菜单编辑器,为窗体编辑菜 单。
vb自定义对话框(CommonDialog)
自定义对话框1. 对话框:特殊类型的窗体对象。
2. 作用:是用户和应用程序交互的主要途径。
3. 建立方法:A 使用预定义对话框,即输入框、消息框。
B 自定义对话框(窗体)。
C 使用CommonDialog控件创建通用对话框。
自定义对话框设计步骤:(1) 添加窗体: 工程→添加窗体。
(2) 将窗体定义成对话框风格。
如:不能移动、改变尺寸、最大或最小化例: BorderStyle设置为1—单边框,不能改变大小ControlBox设置为False—删除控制菜单框MaxButton设置为False—删除最大化按钮MinButton设置为False—删除最小化按钮(3) 在对话框上添加按钮,如―确定‖与―取消‖按钮。
(4) 在对话框上添加其它控件。
(5) 在适当的位置编写显示对话框的代码。
两种显示方式: 模式对话框与无模式对话框。
• 显示模式对话框:窗体名.Show vbModal 或:窗体名.Show 1• 显示无模式对话框:窗体名.Show vbModeless或: 窗体名.Show 0 或: 窗体名.Show例如: Form2.Show vbModalForm2.Show vbModeless为确保对话框可以随其父窗体的最小化而最小化,随其父窗体的关闭而关闭,需要在Show方法中定义父窗体。
例如: Private Sub Command1_Click()Form2.Show vbModeless, Form1End Sub(6) 编写从对话框退出的代码例如: Unload Form2或: Form2.Hide【例10-4】设计对话框Form2如下图所示。
当输入某文件所在的路径及名称后,单击―确定‖按钮按所选择的运行方式运行该文件,单击―取消‖按钮取消本次操作,返回窗体Form1中。
如果输入文件名错误,将给出警告并返回该对话框。
通用对话框控件(CommonDialog)使用通用对话框控件(CommonDialog)可以创建6种标准对话框。
【VB】SetWindowPos改变窗口位置,样式
【VB】SetWindowPos改变窗口位置,样式【转】【VB】SetWindowPos改变窗口位置,样式2011-12-16 18:56转载自 aboutvb最终编辑 aboutvbSetWindowPos 改变窗口位置、样式、尺寸函数功能详解函数原型: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 LongBOOL SetWindowPos(HWND hWnd,HWND hWndlnsertAfter,int X,int Y,int cx,int cy,UNIT.Flags);函数功能:该函数改变一个子窗口,弹出式窗口式顶层窗口的尺寸,位置和Z 序。
子窗口,弹出式窗口,及顶层窗口根据它们在屏幕上出现的顺序排序、顶层窗口设置的级别最高,并且被设置为Z序的第一个窗口。
参数:hWnd:窗口句柄。
hWndlnsertAfter:在z序中的位于被置位的窗口前的窗口句柄。
该参数必须为一个窗口句柄,或下列值之一:HWND_BOTTOM:将窗口置于Z序的底部。
如果参数hWnd标识了一个顶层窗口,则窗口失去顶级位置,并且被置在其他窗口的底部。
HWND_NOTOPMOST:将窗口置于所有非顶层窗口之上(即在所有顶层窗口之后)。
如果窗口已经是非顶层窗口则该标志不起作用。
HWND_TOP:将窗口置于Z序的顶部。
HWND_TOPMOST:将窗口置于所有非顶层窗口之上。
即使窗口未被激活窗口也将保持顶级位置。
查看该参数的使用方法,请看说明部分。
x:以客户坐标指定窗口新位置的左边界。
深入浅出VB.NET提示对话框
深⼊浅出提⽰对话框 ⼀.输⼊对话框: 制作输⼊对话框相对信息提⽰框来相对简单,在Visual Basic .Net,输⼊对话框是通过InputBox函数来完成的。
以下是InputBox函数在Visual Basic .Net中的语法:Public Function InputBox (ByVal Prompt As String ,Optional ByVal Title As String = "" , _Optional ByVal DefaultResponse As String = "" ,Optional ByVal XPos As Integer = -1 , _Optional ByVal YPos As Integer = -1) As String 参数说明: Prompt: 必选项。
以消息形式显⽰在对话框中的String表达式。
Prompt的最⼤长度⼤约为1024个字符,具体取决于所⽤字符的宽度。
如果Prompt 中包含多个⾏,则可在各⾏之间⽤回车符(Chr(13))、换⾏符(Chr(10))或回车换⾏符的组合(Chr(13)&Chr(10))分隔各⾏。
Title: 可选项。
显⽰在对话框标题栏中的String表达式。
如果省略Title则将应⽤程序名放在标题栏中。
DefaultResponse: 可选项。
显⽰在⽂本框中的String表达式,在没有提供其他输⼊时作为默认响应。
如果省略DefaultResponse,则显⽰的⽂本框为空。
XPos: 可选项。
数值表达式,以缇为单位指定对话框的左边与屏幕左边的距离。
如省略XPos,对话框将⽔平居中。
YPos: 可选项。
数值表达式,以缇为单位指定对话框的上边与屏幕上边的距离。
如果省略ypos,则对话框位于在屏幕垂直⽅向距下边缘⼤约三分之⼀处。
以下就是在Visual Basic .Net中使⽤InputBox函数制作如图01所⽰对话框的具体代码:Dim message , title , defaultValue As StringDim myValue As Objectmessage = "请输⼊数值,数值在1-3之间!" '设定对话框提⽰信息title = "输⼊提⽰框!" '设置对话框标题defaultValue = "1" '设定对话框中缺省的数值myValue = InputBox ( message , title , defaultValue , 100 , 100 )'设定对话框在左上⾓坐标位于桌⾯(100,100)区域显⽰图01:通过InputBox函数制作的提⽰对话框⼆.信息对话框简介: 由于信息对话框使⽤的频率较⾼,并且结构相对复杂,所以本⽂的重点就是介绍在Visual Basic .Net各种类型信息对话框的制作⽅法。
VB程序设计第6章对话框的设计
• MsgBox函数返回值为1~6之间的 一个整数,表示用户按下了“确定”、 “取消”、“终止”、“重试”、“忽略”或 “是”按钮。
VB程序设计第6章对话框的设计
2、通用对话框 (1)通用对话框的使用 把“通用对话框(Common
VB程序设计第6章对话框的设计
(3)“保存”对话框 • “保存”对话框也是在Windows应用
程序中经常用到的。用ShowSave 方法显示对话框,它同样能指定文件 的驱动器、目录、文件扩展名和文件 名,其使用方法和“打开”对话框的使 用方法基本相同。
VB程序设计第6章对话框的设计
(4)“颜色”对话框 • “颜色”对话框用来在调色板中选择颜
对出现,指出对话框左上角的屏幕坐标。 • InputBox函数返回文本框中输入的内容,
为字符串类型。
VB程序设计第6章对话框的设计
(2)消息框 • 创建消息框的标准函数是MsgBox
函数,该函数在对话框中显示消息, 等待用户按下按钮,并返回一个整数 来表示用户按下了哪一个按钮。 • MsgBox函数的语法格式为:
VB程序设计第6章对话框的设计
其中: • Prompt为必需的字符串表达式参数,提
供显示在对话框中的提示文本。 • Title为可选字符串表达式参数,提供标题
显示在对话框的标题栏中。 • Default为可选字符串表达式参数,提供
输入框的缺省输入文本。 • Xpos和Ypos都是可选的数值表达式,成
VB程序设计第6章对话框的设计
• ⑧过滤器索引(FilterIndex属性): 用索引值来指定对话框使用哪一个过 滤器。
• ⑨取消引发错误(CancelError属 性):决定当用户单击对话框上的 “取消”按钮时,是否会显示一个报错 信息的消息框。
第六章 vb6.0对话框的设计
第六章对话框的设计6.1 预定义对话框在应用程序中添加对话框最容易的方法是使用预定义对话框,因为不必考虑设计、装载或者显示对话框方面的问题。
然而,其控件在外观上要受到限制。
预定义的对话框总是模式的。
表6.1中列出了在Visual Basic应用程序中添加预定义对话框时所使用的函数。
6.1.1 输入框InputBox函数用来产生要求输入数据的输入框;在输入框中显示提示文本、文本框和按钮;等待用户的输入或按下按钮,并返回用户在文本框中输入的内容。
如图6.1所示的输入框就是使用InputBox函数所产生的,用来提示用户输入要在窗体上显示的内容。
生成该输入框的代码如下所示:Word=InputBox(“请输入要在窗体中显示的内容:”、“输入”)只需再做一点工作就可以将上面的文本输入框使用到程序中了。
实例6.1使用输入框。
在窗体中放置一个按钮控件,并设置它的Caption属性的值为“输入要显示的内容”,双击这个按钮控件打开它的代码窗口,编写如下代码:个参数是指输入框中的用户提示字符串,第二个参数是指输入框的标题:InputBox(prompt[,title][,default][,spos][,ypos][,helpfile,context])InputBox函数语法中的各参数的含义如表6.2所示。
如果同时提供了Helpfile与Context,用户可以按F1键来查看与Context相应的帮助主题。
如果用户单击输入框中的【确定】按钮,则InputBox函数返回文本框中的内容。
如果用户单击【取消】按钮,则此函数返回一个长度为零的字符串(“”)。
如果要省略某些位置参数,则必须加入相应的逗号分界符。
例如,要指定实例6.1中输入框的位置,而缺省输入框的初始值,则语句如下:word =InputBox(“请输入要在窗体中显示的内容:”,“输入”,200,200)。
6.1.2 消息框MsgBox函数用来产生一个消息框。
VB教案消息框(MsgBox)输入框(InputBox)
(十一)消息对话框和输入对话框消息对话框一般用MsgBox函数生成。
(比自行设计窗体来得方便)。
用于在程序运行过程中,对用户提示一些简短的信息,并根据用户的选择回答进行相应的处理。
一.消息对话框(MsgBox)1.格式:MsgBox(<提示字符串> [,<图标按钮类型值>] [,<标题字符串>])2.功能:按指定格式,输出一个含<提示字符串>的对话框,供用户进行选择处理。
3.说明:(1)<提示字符串>:为C型表达式,其值显示在消息对话框中。
字符串长度≤1KB。
若要分行显示,应在分行处用“+”或“&”连接Chr(13)(回车符)或Chr(10)(换行符)或二者组合。
(2)[<图标,按钮类型值>]:缺省值为0,是各种类型值的总和。
各种类型的值表示内容为:0:只显示“确定”按钮(OK)1:显示“确定”和“取消”按钮(OK,Cancel)2:显示“终止(Abort)”、“重试(Retry)”、“忽略(Ignore)”按钮3:显示“是(Yes)”、“否(No)”、“取消(Cancel)”按钮。
4:显示“是(Yes)”、“否(No)”按钮。
5:显示“重试()”和“取消(Cancel)”按钮。
16:显示图标表示错误批评32:显示图标表示疑问48:显示图标表示警告64:显示图标i 表示信息资料0:表示第一个按钮为缺省活动按钮。
256:表示第二个按钮为缺省活动按钮。
512:表示第三个按钮为缺省活动按钮。
768:表示第四个按钮为缺省活动按钮。
注:每组最多只能取一个数值,相加产生类型值总和。
(3)单击不同按钮后,MsgBox的返回值:1:单击“确定(Ok)”2:单击“取消(Cancel)”3:单击“终止(Abort)”4:单击“重试(Retry)”5:单击“忽略(Ignore)”6:单击“是(Yes)”7:单击“否(No)”(4)[<标题字符串>]:决定消息对话框标题栏中显示的内容。
VB6下的动态调整Form控件位置和布局的模块
动态调整控件位置和布局可以实现对每个控件只要设置相应的Tag值即可很方便的实现类似.net里的Anchor的功能!!!'*简单使用说明:'*'*1. 在Form的Load事件Form_Load()中加入以下一句'* resizeinit Me'*'*2. 在Form的Resize事件Form_Resize()中加入以下一句'* resizeform Me'*'*3. 剩下的就是在设计界面中设置你想要控制的控件的位置标识名了'* 设置控件的Tag的值,不分大小写,但建议最好用小写,因为我担心我有可能不小心代码中忘写转换了'* 可选的Tag值为:'* left'* right'* top'* right'*'* a. 啥都不写,不控制该控件的位置'* b. 要想想控制生效,上面的可选值要不低于2个'* c. 即如果我想控件xxx 的位置一直保持在右上角,即在设计界面中设置xxx的Tag为right,top 即可'*'* Tag设置实例:'*'* left,right 水平方向随窗口大小改变,垂直方向不控制'* left,top 左上(效果与不设置Tag值一样,VB默认的样式)'* left,bottom 左下'* right,top 右上'* right,bottom 右下'* left,top,bottom 水平方向靠左布局,垂直方面按窗口高的比例动态调节控件的高'* right,top,bottom 水平方向靠右布局,垂直方面按窗口高的比例动态调节控件的高'* left,right,top 水平方向随窗口大小改变,垂直方向不控制'* left,right,bottom 水平方向随窗口大小改变,垂直方向靠下变化'* ..............'* left,right,top,bottom 水平方向随窗口大小改变,垂直方面随窗口大小改变'*Option Explicit'在调用resizeform前先调用本函数Public Sub resizeinit(formname As Form)Dim obj As Controlformname.Tag = Trim(str(formname.ScaleWidth)) & " " &Trim(str(formname.ScaleHeight)) & " "formname.Tag = Trim(formname.Tag) & " "On Error Resume Next' 对每个控件保存初始尺寸信息For Each obj In formnameIf Len(obj.Tag) Thenobj.Tag = obj.Tag & "!" & obj.Left & " " & obj.Top & " " _& (formname.ScaleWidth - (obj.Left + obj.width)) & " " & (formname.ScaleHeight - (obj.Top + obj.height)) & " " & obj.width & " " & obj.height & " "End IfNext objOn Error GoTo 0End Sub'按比例改变表单内各元件的大小,在调用resizeform前先调用resizeinit函数Public Function resizeform(formname As Form)Dim pos(4) As DoubleDim i As Long, temppos As Long, startpos As LongDim obj As ControlDim scalex As Double, scaley As DoubleDim tmpLeft, tmpRight, tmpTop, tmpBottom As IntegerDim tmpLAnchor, tmpRAnchor, tmpTAnchor, tmpBAnchor As BooleanDim offsetX, offsetY As IntegerDim strAnchor, strInitPos As StringDim splitPos As IntegerDim initPos(6) As DoubleDim formoldwidth, formoldheight As Integerstartpos = 1For i = 0 To 1Dim tempos As Integertemppos = InStr(startpos, formname.Tag, " ", vbTextCompare)If temppos > 0 TheninitPos(i) = Mid(formname.Tag, startpos, temppos - startpos)startpos = temppos + 1ElseinitPos(i) = 0End IfNext iformoldwidth = initPos(0)formoldheight = initPos(1)If formoldwidth = 0 Thenresizeform = FalseExit FunctionEnd IfIf formoldheight = 0 Thenresizeform = FalseExit FunctionEnd Ifscalex = formname.ScaleWidth / formoldwidth'保存窗体宽度缩放比例scaley = formname.ScaleHeight / formoldheight'保存窗体高度缩放比例' 保存当前窗体偏移量offsetX = formname.ScaleWidth - formoldwidthoffsetY = formname.ScaleHeight - formoldheightOn Error Resume NextFor Each obj In formname' 将输入转变为小写obj.Tag = LCase(obj.Tag)splitPos = InStr(obj.Tag, "!")If (splitPos > 0) ThenstrAnchor = Left(obj.Tag, splitPos - 1)strInitPos = Mid(obj.Tag, splitPos + 1)If Len(strAnchor) > 0 Then'读取控件的原始位置与大小startpos = 1For i = 0 To 5temppos = InStr(startpos, strInitPos, " ", vbTextCompare)If temppos > 0 TheninitPos(i) = Mid(strInitPos, startpos, temppos - startpos)startpos = temppos + 1ElseinitPos(i) = 0End IfNext i' 检查Left Anchor是否存在If InStr(1, strAnchor, "left", vbTextCompare) > 0 Then tmpLAnchor = TrueElsetmpLAnchor = FalseEnd If' 检查Right Anchor是否存在If InStr(1, strAnchor, "right", vbTextCompare) > 0 Then tmpRAnchor = TrueElsetmpRAnchor = FalseEnd If' 检查Top Anchor是否存在If InStr(1, strAnchor, "top", vbTextCompare) > 0 Then tmpTAnchor = TrueElsetmpTAnchor = FalseEnd If' 检查Bottom Anchor是否存在If InStr(1, strAnchor, "bottom", vbTextCompare) > 0 Then tmpBAnchor = TrueElsetmpBAnchor = FalseEnd If' 改变位置和大小' 如果Left Anchor存在,则保持左间距不变If (tmpLAnchor) Thenpos(0) = initPos(0)ElseIf (tmpRAnchor) Thenpos(0) = initPos(0) + offsetXElse ' 啥都没写,默认靠左pos(0) = initPos(0)End If' 如果Top Anchor存在,则保持上间距不变If (tmpTAnchor) Thenpos(1) = initPos(1)ElseIf (tmpBAnchor) Thenpos(1) = initPos(1) + offsetYElse ' 啥都没写,默认靠上pos(1) = initPos(1)End If' 如果Right Anchor存在,则保持上间距不变pos(2) = initPos(2)If (tmpRAnchor) Thenpos(2) = initPos(2)Elsepos(2) = formname.ScaleWidth - pos(0) - initPos(4) End If' 如果Bottom Anchor存在,则保持下间距不变pos(3) = initPos(3)If (tmpBAnchor) Thenpos(3) = initPos(3)Elsepos(3) = formname.ScaleHeight - pos(1) - initPos(5)End IfIf TypeOf obj Is ComboBox Thenobj.Move pos(0), pos(1), formname.ScaleWidth - pos(2) - pos(0) Elseobj.Move pos(0), pos(1), formname.ScaleWidth - pos(2) - pos(0), formname.ScaleHeight - pos(3) - pos(1)End IfEnd IfEnd Ifresizeform = TrueNext objOn Error GoTo 0End Function。
VB的TextBox文本框实现垂直居中显示的方法
VB的TextBox⽂本框实现垂直居中显⽰的⽅法本⽂实例代码可以实现让VB的TextBox⽂本框垂直居中显⽰效果。
此处需要注意:Form_Load()窗体代码中的多⾏属性设置必须为真,即Text1.MultiLine = True,该属性为只读属性,请在设计时修改,换⾏会被之后的代码屏蔽,不想屏蔽可⾃⾏修改,调⽤此函数就好了。
具体的功能代码如下:'================================================================================'| 模块名 | TextBoxMiddle'| 说明 | ⽂本框居中显⽰'=================================================================================Option ExplicitPrivate Type RECTLeft As LongTop As LongRight As LongBottom As LongEnd TypePrivate Declare Function SendMessage Lib "user32 " Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As LongPrivate Declare Function SetWindowText Lib "user32" Alias "SetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String) As LongPrivate Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As LongPrivate Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPrivate Const EM_GETRECT = &HB2Private Const EM_SETRECTNP = &HB4Private Const GWL_WNDPROC = (-4)Private Const WM_CHAR = &H102Private Const WM_PASTE As Long = &H302Private prevWndProc As LongPublic ClipText As StringPublic Sub DisableAbility(TargetTextBox As TextBox)prevWndProc = GetWindowLong(TargetTextBox.hwnd, GWL_WNDPROC)SetWindowLong TargetTextBox.hwnd, GWL_WNDPROC, AddressOf WndProcEnd SubPrivate Function WndProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As LongDim Temp As StringSelect Case MsgCase WM_CHARIf wParam <> 13 Then WndProc = CallWindowProc(prevWndProc, hwnd, Msg, wParam, lParam)Case WM_PASTEClipText = Clipboard.GetTextTemp = Replace(ClipText, Chr(10), "")Temp = Replace(Temp, Chr(13), "")Clipboard.ClearClipboard.SetText TempWndProc = CallWindowProc(prevWndProc, hwnd, Msg, wParam, lParam)Clipboard.ClearClipboard.SetText ClipTextCase ElseWndProc = CallWindowProc(prevWndProc, hwnd, Msg, wParam, lParam)End SelectEnd FunctionSub VerMiddleText(mForm As form, mText As TextBox)If mText.MultiLine = False Then Exit SubDim rc As RECT, tmpTop As Long, tmpBot As LongSendMessage mText.hwnd, EM_GETRECT, 0, rcWith mForm.Font.Name = .Size = mText.Font.Size.Bold = mText.Font.BoldEnd WithtmpTop = ((rc.Bottom - rc.Top) - _(mText.Parent.TextHeight("H ") \ Screen.TwipsPerPixelY)) \ 2 + 2tmpBot = ((rc.Bottom - rc.Top) + _(mText.Parent.TextHeight("H ") \ Screen.TwipsPerPixelY)) \ 2 + 2rc.Top = tmpToprc.Bottom = tmpBotmText.Alignment = vbCenterSendMessage mText.hwnd, EM_SETRECTNP, 0&, rcmText.RefreshDisableAbility mTextEnd Sub'///////////////////////////////////////////////////////'以下为窗体代码'///////////////////////////////////////////////////////Private Sub Form_Load()'================注意================='多⾏属性必须为真,暨Text1.MultiLine = True'该属性为只读属性,请在设计时修改'换⾏会被之后的代码屏蔽,不想屏蔽可⾃⾏修改'==========================================='调⽤此函数就好了VerMiddleText Me, Text1Caption = Len(Text1)End Sub。
用VBA实现消息框
用VBA实现消息框用VB显示消息框需要用 MsgBox 函数,在过程中添加一个赋值语句,将 MsgBox 函数的返回值赋给一个变量。
该函数根据用户在消息框中的选择返回不同的值。
语法如下:MsgBox(prompt[, buttons] [, title] [, helpfile, context])MsgBox 函数的参数说明prompt必要字符串表达式,作为显示在对话框中的消息。
prompt 的长度大约为 1024 个字符,由所用字符的宽度决定。
如果 prompt 的内容超过一行,则可以在每一行之间用回车符 (Chr(13))、换行符 (Chr(10)) 或是回车与换行符的组合 (Chr(13) & Chr(10)) 将各行分隔开来。
buttons可选数值表达式是值的总和,指定显示按钮的数目及形式,使用的图标样式,缺省按钮是什么以及消息框的强制回应等。
将这些数字相加以生成 buttons 参数值的时候,只能由每组值取用一个数字。
如果省略,则 buttons 的缺省值为 0。
title可选在对话框标题栏中显示的字符串表达式。
如果省略 title,则将应用程序名“Microsoft Access”放在标题栏中。
helpfile可选字符串表达式,识别用来向对话框提供上下文相关帮助的帮助文件。
如果提供了 helpfile,则也必须提供 context。
context可选数值表达式,由帮助文件的作者指定给适当的帮助主题的帮助上下文编号。
如果提供了context,则也必须提供 helpfile。
一般我们只用前3个参数,有关帮助的参数,需要先建立一个帮助文件,而这个帮助文件的设计恐怕比设计数据库还要麻烦。
当不需要返回值时,还有一种形式:MsgBox prompt[, buttons] [, title]比如:MsgBox "这是只有确定按钮的例子", 0 + 64, "消息框演示"将显示一个消息框,标题为“消息框演示”,内容是“这是只有确定按钮的例子”,只有一个确定按钮,消息框类型为信息。
Excel VBA实例教程 #052:返回窗口的可视区域地址
VBA中使用VisibleRange属性返回当前窗口的可视区域,如下面的代码所示。
1.Sub VbRange()
2. Dim s As String
3. s = ActiveWindow.VisibleRange.Address(0, 0)
4. MsgBox "窗口的可视区域为:" & s
5.End Sub
代码解析:
VbRange过程使用消息框显示当前窗口的可视区域的地址。
应用于当前Window对象的VisibleRange属性返回一个Range对象,代表当前窗口的可视区域。
窗口的可视区域就是用户可以在窗口或窗格中看到的单元格区域,如果行或列部分可见,该行或列也包括在可视区域中。
因为VisibleRange属性返回的是一个Range对象,因此可以直接使用该对象的属性和方法。
当窗口的大小发生变化时,返回的可视区域的地址也会不同,如图52 1、图52 2所示。
图1 自定义大小的窗口
图2 最大化时的窗口。
VB自己设定消息框的显示位置
VB自己设定消息框的显示位置一般来说,无论你使用VB自带的MsgBox还是API函数MessageBox,消息框都会在屏幕的中央弹出。
但有时候我们希望它能出现在程序的主窗口附近,这样无论从察看还是操作方面都会给用户带来方便。
记得我们前面是怎么找到消息框窗口句柄的吗?既然我们能得到窗口的句柄,就一定能移动它!现在我们就来做一个在程序主窗口居中显示的消息框。
在Module模块中添加以下API函数、类型以及常量的声明:Public Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As LongPublic Type RECTLeft As LongTop As LongRight As LongBottom As LongEnd TypePublic 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 LongPublic Const SWP_NOSIZE As Long = &H1&Public Const SWP_NOZORDER As Long = &H4&Public Const HWND_TOP As Long = 0&在刚才的窗体上再添加一个Command按钮和一个Timer控件,代码如下:Private Sub Command2_Click()' 这里我们将自己设置消息框的位置' 打开计时器,设定10毫秒后改变消息框的位置Timer2.Interval = 10Timer2.Enabled = True' 调用messagebox API 函数MessageBox Me.hwnd, "你见过不在屏幕中央的消息框吗?", "改变位置的MessageBox", vbQuestionEnd SubPrivate Sub Timer2_Timer()Dim hMsgBox As Long, xPoint As Long, yPoint As LongDim stMsgBoxRect As RECT, stParentRect As RECT' 找到消息框窗口hMsgBox = FindWindow("#32770", "改变位置的MessageBox")' 如果找到窗口就移动它If hMsgBox Then' 得到消息框和父窗口的矩形位置GetWindowRect hMsgBox, stMsgBoxRectGetWindowRect Me.hwnd, stParentRect' 计算位置,以便把消息框放到窗体的中央xPoint = stParentRect.Left + (((stParentRect.Right - stParentRect.Left) \ 2) - ((stMsgBoxRect.Right - stMsgBoxRect.Left) \ 2))yPoint = stParentRect.Top + (((stParentRect.Bottom - stParentRect.Top) \ 2) - ((stMsgBoxRect.Bottom - stMsgBoxRect.Top) \ 2))' 这里还要确定消息框的显示位置不会超出屏幕If xPoint < 0 Then xPoint = 0If yPoint < 0 Then yPoint = 0If (xPoint + (stMsgBoxRect.Right - stMsgBoxRect.Left)) > (Screen.Width \ Screen.TwipsPerPixelX) ThenxPoint = (Screen.Width \ Screen.TwipsPerPixelX) - (stMsgBoxRect.Right - stMsgBoxRect.Left)End IfIf (yPoint + (stMsgBoxRect.Bottom - stMsgBoxRect.Top)) > (Screen.Height \ Screen.TwipsPerPixelY) ThenyPoint = (Screen.Height \ Screen.TwipsPerPixelY) - (stMsgBoxRect.Bottom - stMsgBoxRect.Top)End If' 移动位置SetWindowPos hMsgBox, HWND_TOP, xPoint, yPoint, 0, 0, SWP_NOZORDER Or SWP_NOSIZEEnd If' 关闭计时器Timer2.Enabled = FalseEnd Sub。
VB6下的动态调整Form控件位置和布局的模块
VB6下的动态调整Form控件位置和布局的模块动态调整控件位置和布局可以实现对每个控件只要设置相应的Tag值即可很方便的实现类似.net里的Anchor的功能'*简单使用说明:'*'*1. 在Form的Load事件Form_Load()中加入以下一句'* resizeinit Me'*'*2. 在Form的Resize事件Form_Resize()中加入以下一句'* resizeform Me'*'*3. 剩下的就是在设计界面中设置你想要控制的控件的位置标识名了'* 设置控件的Tag的值,不分大小写,但建议最好用小写,因为我担心我有可能不小心代码中忘写转换了'* 可选的Tag值为:'* left'* right'* top'* right'*'* a. 啥都不写,不控制该控件的位置'* b. 要想想控制生效,上面的可选值要不低于2个'* c. 即如果我想控件xxx 的位置一直保持在右上角,即在设计界面中设置xxx的Tag为right,top 即可'*'* Tag设置实例:'*'* left,right 水平方向随窗口大小改变,垂直方向不控制'* left,top 左上(效果与不设置Tag值一样,VB默认的样式)'* left,bottom 左下'* right,top 右上'* right,bottom 右下'* left,top,bottom 水平方向靠左布局,垂直方面按窗口高的比例动态调节控件的高'* right,top,bottom 水平方向靠右布局,垂直方面按窗口高的比例动态调节控件的高'* left,right,top 水平方向随窗口大小改变,垂直方向不控制'* left,right,bottom 水平方向随窗口大小改变,垂直方向靠下变化'* ..............'* left,right,top,bottom 水平方向随窗口大小改变,垂直方面随窗口大小改变'*Option Explicit'在调用resizeform前先调用本函数Public Sub resizeinit(formname As Form)Dim obj As Controlformname.Tag = Trim(str(formname.ScaleWidth)) & " " &Trim(str(formname.ScaleHeight)) & " "formname.Tag = Trim(formname.Tag) & " "On Error Resume Next' 对每个控件保存初始尺寸信息For Each obj In formnameIf Len(obj.Tag) Thenobj.Tag = obj.Tag & "!" & obj.Left & " " & obj.Top & " " _& (formname.ScaleWidth - (obj.Left + obj.width)) & " " & (formname.ScaleHeight - (obj.Top + obj.height)) & " " &obj.width & " " & obj.height & " "End IfNext objOn Error GoTo 0End Sub'按比例改变表单内各元件的大小,在调用resizeform前先调用resizeinit函数Public Function resizeform(formname As Form)Dim pos(4) As DoubleDim i As Long, temppos As Long, startpos As LongDim obj As ControlDim scalex As Double, scaley As DoubleDim tmpLeft, tmpRight, tmpTop, tmpBottom As IntegerDim tmpLAnchor, tmpRAnchor, tmpTAnchor, tmpBAnchor As BooleanDim offsetX, offsetY As IntegerDim strAnchor, strInitPos As StringDim splitPos As IntegerDim initPos(6) As DoubleDim formoldwidth, formoldheight As Integerstartpos = 1For i = 0 To 1Dim tempos As Integertemppos = InStr(startpos, formname.Tag, " ", vbTextCompare) If temppos > 0 TheninitPos(i) = Mid(formname.Tag, startpos, temppos - startpos) startpos = temppos + 1ElseinitPos(i) = 0End IfNext iformoldwidth = initPos(0)formoldheight = initPos(1)If formoldwidth = 0 Thenresizeform = FalseExit FunctionEnd IfIf formoldheight = 0 Thenresizeform = FalseExit FunctionEnd Ifscalex = formname.ScaleWidth / formoldwidth '保存窗体宽度缩放比例scaley = formname.ScaleHeight / formoldheight '保存窗体高度缩放比例' 保存当前窗体偏移量offsetX = formname.ScaleWidth - formoldwidth offsetY = formname.ScaleHeight - formoldheight On Error Resume NextFor Each obj In formname' 将输入转变为小写obj.Tag = LCase(obj.Tag)splitPos = InStr(obj.Tag, "!")If (splitPos > 0) ThenstrAnchor = Left(obj.Tag, splitPos - 1) strInitPos = Mid(obj.Tag, splitPos + 1)If Len(strAnchor) > 0 Then'读取控件的原始位置与大小startpos = 1For i = 0 To 5temppos = InStr(startpos, strInitPos, " ", vbTextCompare)If temppos > 0 TheninitPos(i) = Mid(strInitPos, startpos, temppos - startpos)startpos = temppos + 1ElseinitPos(i) = 0End IfNext i' 检查Left Anchor是否存在If InStr(1, strAnchor, "left", vbTextCompare) > 0 Then tmpLAnchor = TrueElsetmpLAnchor = FalseEnd If' 检查Right Anchor是否存在If InStr(1, strAnchor, "right", vbT extCompare) > 0 Then tmpRAnchor = TrueElsetmpRAnchor = FalseEnd If' 检查Top Anchor是否存在If InStr(1, strAnchor, "top", vbTextCompare) > 0 Then tmpTAnchor = TrueElsetmpTAnchor = FalseEnd If' 检查Bottom Anchor是否存在If InStr(1, strAnchor, "bottom", vbTextCompare) > 0 Then tmpBAnchor = TrueElsetmpBAnchor = FalseEnd If' 改变位置和大小' 如果Left Anchor存在,则保持左间距不变If (tmpLAnchor) Thenpos(0) = initPos(0)ElseIf (tmpRAnchor) Thenpos(0) = initPos(0) + offsetXElse ' 啥都没写,默认靠左pos(0) = initPos(0)End If' 如果Top Anchor存在,则保持上间距不变If (tmpTAnchor) Thenpos(1) = initPos(1)ElseIf (tmpBAnchor) Thenpos(1) = initPos(1) + offsetYElse ' 啥都没写,默认靠上pos(1) = initPos(1)End If' 如果Right Anchor存在,则保持上间距不变pos(2) = initPos(2)If (tmpRAnchor) Thenpos(2) = initPos(2)Elsepos(2) = formname.ScaleWidth - pos(0) - initPos(4) End If ' 如果Bottom Anchor存在,则保持下间距不变pos(3) = initPos(3)If (tmpBAnchor) Thenpos(3) = initPos(3)Elsepos(3) = formname.ScaleHeight - pos(1) - initPos(5)End IfIf TypeOf obj Is ComboBox Thenobj.Move pos(0), pos(1), formname.ScaleWidth - pos(2) - pos(0) Elseobj.Move pos(0), pos(1), formname.ScaleWidth - pos(2) - pos(0), formname.ScaleHeight - pos(3) - pos(1)End IfEnd IfEnd Ifresizeform = TrueNext objOn Error GoTo 0End Function。
为VB应用程序定制浮动提示
为V B应用程序定制浮动提示在Win95中,当我们将鼠标移至某个控件上时,便会在鼠标所指之处弹出一个小窗口,告诉我们这个控件的用途,这便是"浮动提示"。
这种提示方式可以及时地提供有关信息,那么怎样在VB中实现这种功能呢?首先我们在Form的任意位置放一个Textl作为浮动提示的通用文本显示框,几个重要属性设置为:Appearance:O--FlatBackColor:窗口背景颜色BorderStyle:l--FixedSingleForeColor:窗口文本颜色Height:文本框高度,一般取286左右Visible:False如果该Textl不是在所有按钮设置以后才放置的,则在显示在它之后放置的按钮的浮动提示时,浮动提示将被该按钮所掩盖,这时需要按Ctrl+J或者在UEdit" 菜单中选择"BringtoFront"将Textl带回前台。
然后,在Modulelii用模块中定义一个用于存放任意浮动提示文本的公共FloatMessage 字符串变量: PublicFloatMessageAsString再在Form的General中加入一个如下公用函数,其功能是用一个文本框自动匹配和管理所有浮动提示: PublicFunctionShowMessage()IfTextl Visible二FalseThenTextl Left二CurrentXTextl Top二CurrentY'以上两句定制文本框显示的左上角坐标,下句计算文本框长度Textl Width二TextWidth(FloatMessage)+72Textl Text二FloatMessage'初始化浮动提示信息Textl Visible=True' 显示浮动提示Endlf' 删除这个If循环将出现游走效果EndFunction最后要做的就是在调用该函数的所有事件中为这个FloatMessageM值。
自动调节VB程序窗体中控件的位置
自动调节VB程序窗体中控件的位置
胡奇光;李正华
【期刊名称】《计算机与数字工程》
【年(卷),期】2005(33)1
【摘要】介绍了当VB程序窗体的大小发生变化时,自动调节窗体中控件位置的方法,并给出了实现其方法的程序代码.
【总页数】3页(P60-62)
【作者】胡奇光;李正华
【作者单位】湖南城市学院计算机科学系,益阳,413000;湖南城市学院计算机科学系,益阳,413000
【正文语种】中文
【中图分类】TP31
【相关文献】
1.控件在窗体中相对位置的确立 [J], 何跃兵;王世平
2.可视化编程工具中控件自动适应窗体大小的实现 [J], 陈正铭;田丽平;蔡天平
3.控件随窗体变化而自动调整 [J], 徐洪雷
4.Excel中的滚动条窗体控件在价格定位中的应用 [J], 顾运筠
5.VB控件随窗体变化自动调整的实现 [J], 王英豪;严泰来
因版权原因,仅展示原文概要,查看原文内容请购买。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VB自己设定消息框的显示位置
一般来说,无论你使用VB自带的MsgBox还是API函数MessageBox,消息框都会在屏幕的中央弹出。
但有时候我们希望它能出现在程序的主窗口附近,这样无论从察看还是操作方面都会给用户带来方便。
记得我们前面是怎么找到消息框窗口句柄的吗?既然我们能得到窗口的句柄,就一定能移动它!现在我们就来做一个在程序主窗口居中显示的消息框。
在Module模块中添加以下API函数、类型以及常量的声明:
Public Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Public Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Public 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
Public Const SWP_NOSIZE As Long = &H1&
Public Const SWP_NOZORDER As Long = &H4&
Public Const HWND_TOP As Long = 0&
在刚才的窗体上再添加一个Command按钮和一个Timer控件,代码如下:
Private Sub Command2_Click()
' 这里我们将自己设置消息框的位置
' 打开计时器,设定10毫秒后改变消息框的位置
Timer2.Interval = 10
Timer2.Enabled = True
' 调用messagebox API 函数
MessageBox Me.hwnd, "你见过不在屏幕中央的消息框吗?", "改变位置的MessageBox", vbQuestion
End Sub
Private Sub Timer2_Timer()
Dim hMsgBox As Long, xPoint As Long, yPoint As Long
Dim stMsgBoxRect As RECT, stParentRect As RECT
' 找到消息框窗口
hMsgBox = FindWindow("#32770", "改变位置的MessageBox")
' 如果找到窗口就移动它
If hMsgBox Then
' 得到消息框和父窗口的矩形位置
GetWindowRect hMsgBox, stMsgBoxRect
GetWindowRect Me.hwnd, stParentRect
' 计算位置,以便把消息框放到窗体的中央
xPoint = stParentRect.Left + (((stParentRect.Right - stParentRect.Left) \ 2) - ((stMsgBoxRect.Right - stMsgBoxRect.Left) \ 2))
yPoint = stParentRect.Top + (((stParentRect.Bottom - stParentRect.Top) \ 2) - ((stMsgBoxRect.Bottom - stMsgBoxRect.Top) \ 2))
' 这里还要确定消息框的显示位置不会超出屏幕
If xPoint < 0 Then xPoint = 0
If yPoint < 0 Then yPoint = 0
If (xPoint + (stMsgBoxRect.Right - stMsgBoxRect.Left)) > (Screen.Width \ Screen.TwipsPerPixelX) Then
xPoint = (Screen.Width \ Screen.TwipsPerPixelX) - (stMsgBoxRect.Right - stMsgBoxRect.Left)
End If
If (yPoint + (stMsgBoxRect.Bottom - stMsgBoxRect.Top)) > (Screen.Height \ Screen.TwipsPerPixelY) Then
yPoint = (Screen.Height \ Screen.TwipsPerPixelY) - (stMsgBoxRect.Bottom - stMsgBoxRect.Top)
End If
' 移动位置
SetWindowPos hMsgBox, HWND_TOP, xPoint, yPoint, 0, 0, SWP_NOZORDER Or SWP_NOSIZE
End If
' 关闭计时器
Timer2.Enabled = False
End Sub。