说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

运行时改变控件大小的两种方法-VB资料

HTML文档下载 WORD文档下载 PDF文档下载
运行时改变控件大小的两种方法-VB资料


广东石碣源兴电脑 李法龙
  通常我们在设计应用程序时可以任意改变控件的大小( 除去象Timer这样的运行时不可显示的控件), 以使其满足我们的实际需要,使界面友好而且美观大方。但有些时候,我们为了方便用户,需要提供在运行时刻能够改变控件大小的功能,使用户能够根据程序显示,输出的需要通过鼠标的拖放改变控件的大小,从而方便用户的阅读浏览等。本文就此向诸位介绍两种方法来达到此目的。

  我们知道,运行时刻可见的控件都具有 Top, Left, Height, Width 等属性,用以定位其在窗体上的位置及大小,在运行时刻改变控件大小的原理也基于此。通过鼠标的拖放等操作,动态改变控件的Top, Left, Bottom, Height 属性值,从而定制控件的大小,甚至拖动整个控件。

  第一种方法需要 Win32 API 函数。所用到的 API 函数有:

Declare Function ScreenToClient Lib "user32"(ByVal hwnd As Long, lpPoint As POINTAPI) As Long
  获得鼠标的屏幕坐标放在lpPoint 中。

Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
  将屏幕坐标转化成客户区坐标系统的坐标,转换后的坐标仍在 lpPoint 中。

  新开一个工程,在 Form1 上放一个 TextBox 控件,命名为 Text1。在 Form 的 MouseMove 事件中捕获鼠标坐标,如果鼠标的位置与 Text1 的边界相距很近(比如说50 Twips,150 效果比较好),根据需要将 Form1 的MousePointer 属性值为 vbSizeNS (垂直尺寸线),或 vbSizeWE(水平尺寸线), 或 vbSizeNESW(右上-左下尺寸线),或 vbSizeNWSE(左上-右下尺寸线)。用户一看就知道可以改变该控件的尺寸。而在其余区域则将 Form1 的 MousePointer 属性设成缺省值(vbDefault)。当用户按下鼠标键并拖动鼠标时根据当前的 MousePointer 进行判断该如何改变控件的大小。具体操作可参看附带的例程。

  第二中方法不需要调用API 函数,但需要额外的控件。同样新开一个工程,在Form1 上放一个TextBox 控件,命名为Text1。然后紧靠Text1 的右侧放一个高度与Text1 相同但宽度尽量小的PictureBox 控件,命名为Picture1。宽度要小到看不见立体效果。将Picture1 的MousePointer 属性设置成9 (vbSizeWE) 。

  Picture1 的MouseMove 事件如下:

Private Sub Text1_MouseMove(Button As Integer,Shift As Integer, x As Single, y As Single)
If Button<>1 Then Exit Sub
Picture1.Left=Picture1.Left+X
'Move Picture
Text1.Width=Picture1.Left-Text1.Left
'Change TextBox's size
End Sub

  运行程序,将鼠标移到 Text1 的右边缘,这时鼠标变成水平尺寸线的样式,按住鼠标左键左右移动鼠标,你会看到 Text1 的大小可以自由改变。
  以上只是举一些简单的例子说明定制控件尺寸的基本方法,起到抛砖引玉的作用,读者可以根据需要增强相应的功能,但要注意建立错误陷阱捕获错误。

  附:

  第一种方法的源程序:

'API Function declare

Declare Function ScreenToClient Lib "user32"(ByVal hwnd As Long, lpPoint As POINTAPI) As Long
Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long

Type POINTAPI
x As Long
y As Long
End Type

Private Sub Form_MouseMove(Button As Integer,Shift As Integer, x As Single, y As Single)
Dim Pnt As POINTAPI
Dim CurX As Long
Dim CurY As Long
Dim DistX As Long
Dim DistY As Long

Const mDist = 150 '150 twips

GetCursorPos Pnt
'Get mouse position
ScreenToClient Me.hwnd, Pnt
'Convert to client coordinate
CurX = Pnt.x * Screen.TwipsPerPixelX
'Pixels to Twips
CurY = Pnt.y * Screen.TwipsPerPixelY
DistX = Abs(CurX - (Text1.Left + Text1.Width))
'distance to text1's
DistY = Abs(CurY - (Text1.Top + Text1.Height))

If DistX < = mDist And DistY < = mDist Then
  'set mouse pointer
  'according to distance 
  Form1.MousePointer = vbSizeNWSE
ElseIf DistX <= mDist And DistY > mDist Then
  Form1.MousePointer = vbSizeWE
  ElseIf DistX > mDist And DistY <= mDist Then
  Form1.MousePointer = vbSizeNS
Else
  Form1.MousePointer = vbDefault
End If

If Button <> 1 Then Exit Sub
If Form1.MousePointer = vbSizeNWSE Then
  'change text1' size
  Text1.Width = CurX - Text1.Left
  Text1.Height = CurY - Text1.Top
End If
If Form1.MousePointer = vbSizeWE Then
  Text1.Width = CurX - Text1.Left
End If
If Form1.MousePointer = vbSizeNS Then
  Text1.Height = CurY - Text1.Top
End If
End Sub

Private Sub Text1_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
Form1.MousePointer = vbDefault
'set default mouse pointer
End Sub

苹果发布OS X 10.8.3 新版Boot Camp可支持Windows 8 恭喜!麻省理工两密码学教授获2012图灵奖 Rovio的逆袭,发布首款RPG游戏“克鲁德一家” 百会呼吁微软提供合法经营Office&#160;365的相关证明 谁说Vim不是IDE?(四) 關於SQL問題:向另一台服務器的數據庫中插入一筆記錄?? 能否得到某文件的格式?结果如:image/gif image/jpg application/pdf application/zip 如果不用 HttpPostedFile控件,怎样把一个客户端文件上传到服务器。 请问在VB.net中计算datagrid中记录的总条数的member是什么? 使用eclipse和sysdeo进行开发时,为什么经常会出现8080端口被占用的情况? 在DBGrid中怎样使不同的数据行显示不同的颜色?(100分) 菜鸟请教三个简单问题,(四舍五入,小数显示成百分比...) 用VB自带打包生成安装程序,安装时出错 一个字段的SQL语句问题,百分有奖争答! 孔子七十二贤是怎么回事啊 Enrique Iglesias 的DON'T T 孔子弟子七十二贤是怎么分的?是说只要做过孔子弟子的 dont turn off the light歌词 Don't turn off the light Baby you can翻译一下 孔子最得意的72个徒弟是谁? 英语翻译要做到对铝灰的回收利用,我们要对铝灰有大量 lost and found可以用另外一句英文怎么 韩国三四流整形医生赴中国淘金 自称顶近二成美国人称见过鬼 女性比男性更易男子把鸡蛋强塞女子下体后捏碎性侵 辩短短数小时吸金近万 黑采砂船疯狂吞噬双十一:你的订单支付没成功 收到这样日媒:抛售美元 中国为何不再做美国最李小龙领衔的那些肌肉男神一大波智能手表来袭,尝鲜还是观望?下周将出现逆势转机!!新神翼新坐骑!《传世无双》“狼王”版财色官途天下无职吞日道念修魔商界全才九洲岛旅游上海城市雕塑艺术中心旅游上海民生现代美术馆旅游公盂村旅游平果鸳鸯滩漂流旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘