VB自己设定消息框的显示位置
- 格式:doc
- 大小:15.50 KB
- 文档页数:2
用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创建对话框的方法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应用程序项目。
自定义对话框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改变窗口位置,样式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:以客户坐标指定窗口新位置的左边界。
深⼊浅出提⽰对话框 ⼀.输⼊对话框: 制作输⼊对话框相对信息提⽰框来相对简单,在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各种类型信息对话框的制作⽅法。
第六章对话框的设计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函数用来产生一个消息框。
(十一)消息对话框和输入对话框消息对话框一般用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)[<标题字符串>]:决定消息对话框标题栏中显示的内容。
动态调整控件位置和布局可以实现对每个控件只要设置相应的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⽂本框垂直居中显⽰效果。
此处需要注意: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实现消息框用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, "消息框演示"将显示一个消息框,标题为“消息框演示”,内容是“这是只有确定按钮的例子”,只有一个确定按钮,消息框类型为信息。
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自带的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控件位置和布局的模块动态调整控件位置和布局可以实现对每个控件只要设置相应的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。
为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程序窗体中控件的位置
胡奇光;李正华
【期刊名称】《计算机与数字工程》
【年(卷),期】2005(33)1
【摘要】介绍了当VB程序窗体的大小发生变化时,自动调节窗体中控件位置的方法,并给出了实现其方法的程序代码.
【总页数】3页(P60-62)
【作者】胡奇光;李正华
【作者单位】湖南城市学院计算机科学系,益阳,413000;湖南城市学院计算机科学系,益阳,413000
【正文语种】中文
【中图分类】TP31
【相关文献】
1.控件在窗体中相对位置的确立 [J], 何跃兵;王世平
2.可视化编程工具中控件自动适应窗体大小的实现 [J], 陈正铭;田丽平;蔡天平
3.控件随窗体变化而自动调整 [J], 徐洪雷
4.Excel中的滚动条窗体控件在价格定位中的应用 [J], 顾运筠
5.VB控件随窗体变化自动调整的实现 [J], 王英豪;严泰来
因版权原因,仅展示原文概要,查看原文内容请购买。
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。