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

运行时改变控件大小的两种方法-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

增加 MsFlexGrid 的编辑功能-VB资料 真正删除数据库的记录 -VB资料 用VB制作屏幕保护程序 VB多媒体程序设计 VB设计动画时钟 VB游戏写作技巧(1)秀图篇 VB游戏写作技巧(2)网络篇 VB中播放WAV文件 VB中播放三维动画编程一例 Visual Basic 5.0多媒体创作技巧 Visual Basic 5.0中实现视频画中画 Visual Basic 中制作流水灯 Visual Basic动画编程技术 Visual Basic环境下Video/ Audio压缩数据流播放技术 Visual Basic设计多媒体应用程序 Visual Basic影音控制 Web动画图像分解在VB动画设计中的应用 播放 .flc 动画 -VB资料 播放 AVI -VB资料 播放MP3文件 -VB资料 播放背景音乐 -VB资料 播放声音文件 -VB资料 播放资源文件文件中的声音-VB资料 不用ActiveX控件也能播放声音文件-VB资料 VB创建动态图标 电影结束画面的卷动效果-VB资料 二进制操作截取VCD片断 -VB资料 非常VB测声卡 关闭屏幕保护功能,改变屏保等待时间 -VB资料 VB获取桌面窗口图象 红色警戒&终级动员令-VB资料 请问:自动化这个专业怎么学 C++高手们,谁能讲一下extern的用法? 请高手们谈谈,如何在客户本地硬盘里获取其敏感信息???? MSHFlexGrid的分层记录集问题 关于NMHTTP的问题,急急急!!! 请问哪里有支持 ASP 的服务器下载?(空) 为什么我的硬盘找不到了呢? 如何在sqlserver7中实现ID字段自动递增?(SOS) 为什么98下可以到2000下不行了.关于openfilename???????????????????????????? (困惑请教 )关于内存释放的一些问题! 数据库操作出错该如何避免???? 我是第一次来到CSDN,大家多关照! YYSUN关于大富翁论坛的解释(从水母看到的) vb 访问SYBASE的问题 支持北京伸奥的朋友,进来签个名吧! 怎样截获一个应用程序的消息? 数据结构得答案 大连的软件人员工作环境怎么样? 不好意思,小弟又来麻烦大家了! 上次的文章到那儿去了? enmity,进来,我给你结帐 enmity,进来,我给你结帐!! 各位侠客帮忙啊,重新装系统出了问题! 将10进制转换成16进制的函数是什么啊? VC高手,怎样以编程的方法实现磁带机的Backup 和 Restore. enmity,进来,我给你结帐.共200分 支援白菜300分,支持白菜个人网站建设:))) CMM 的缩写是什么? 想和大家讨论一下怎样系统的编制软件 如何实现和Word、CorelDRAW同样效果缩放位图 请问各位大哥大爷大妈大。。。。。。。。。。。。。哪里有支持 ASP 的服务器软件下载 我该如何控制IP地址??高手请进。。。 弱弱地问:关于SQL server中的中括号。 各位侠客帮忙啊,重新装系统出了问题!! 一点点小问题????? 请问在 WINDOWS98 下面,除了IIS,还有没有支持 PHP 的服务器软件呢? 在ADO中如何获取表名 关于ASN树的问题(snmp中的MIB的拓扑树) 你是高手你进来!!!!! 各位的顶级域名都在哪申请?价格/速度如何?大家都来说说! DirectX8的MultiFileReader过滤器怎么找不到? 关于用VB显示ado数据库中的图像字段问题 大家来谈谈Msdn如何有效利用 请各位帮忙查看我这段程序错在哪里 , 我是照书上做的 , 可就是无法保存. SQL plus 为何无法登录?? 谁要下载msdn? 紧急求救!寻找工作! 最新新消息~~~~~~~台灣地區中午地震最大震度花蓮市5級 有没有大连的公司要俺? 请教大家!!!java如何实现多重继承?接口该如何使用?份数可以再加,只要我明白了 怎样以编程的方法实现磁带机的Backup. 谷歌地球出现这个是什么意思啊为什么我持续放大那个叉就会没了而且还可以看到地下的东西? 各位帮帮忙 可不可以告诉我在那里可以看到谷歌地球啊? 谢谢 到底月球上有没有外星人 有谁知道怎么用? 谷歌地球飞行模拟器怎么用 月亮上有没有外星人呢? 谷歌地球上比例尺寸是什么意思 月球上发现5亿年前的飞船, 月球里真有外星人吗?据科学家发现好象有 谷歌地球的这个图是什么意思 在月球上已经坠毁1亿年的巨型飞船,各国争相登月就是为了研究它 有这回事吗? 月球上有外星人吗? 谷歌地球是什么意思啊? 美国宇航员在月球发现15亿年前的飞船是真还是假? 月球有外星人吗? Google的三维卫星地图软件“谷歌地球”(GoogleEarth)能成虚拟三维地图.怎么操作?到哪下载插件啊? 在谷歌月球上那个月球飞船残骸的坐标是多少? 才下了谷歌地球,有月球火星的那海洋怎么没有呢?看到错误的标记点我如何提示出这个错误呢? 谷歌地图好还是谷歌地球好? 在谷歌月球上那个月球飞船残骸的坐标是多少? 如何用鼠标操作谷歌地球的飞行模拟器? 我搞不懂,霍金说黑洞不存在,可是天鹅座又是有黑洞的.灰道他又怎么证的呢?又有什么美国女科学家算出宇宙爆炸论是假的.还有,质量足够大,是不是引力也大?那一个物体质量达到一定程度不 GOOGLE EARTH谷歌地球储存所有地图文件的服务器容量有多大?如题.GOOGLE EARTH的地图那么详细,要保存下来一个地球,需要多大容量的硬盘? 谷歌上的月球背面的外星飞船坐标是多少?首先强烈谴责这段视频的制造者,连个坐标都不给,它断子绝孙! 详细介绍一下天鹅座X-1 7月22日日全食时间 要详细的全国各个地点的时间 美国的阿波罗20号在月球上发现飞船和外星人,这个有可信度吗?是不是太荒唐了.我本人不相信这个事.从视频上看我认为也不应该是真的.但我希望他是真实的,大家都谈谈这个话题从目前人类 白鸟座和天鹅座是同一星座吗?在百度里搜索白鸟座居然介绍的是天鹅座!请问这是同一星座吗? 2009年7月22日日全食时间我们衢州开化看的到日全食吗 美宇航员称在月球发现巨大外星飞船残骸 天鹅座X-2星距我们有多少光年?意思是说就算是光速也要走8000年从地球,才能到达天鹅座么?以光速能到达离地球最近的可居住行星么? 浙江7月22日日全食具体时间浙江7月22日出现日全食具体时间具体指上午级时或中午几时或下午几时 月球是外星飞船么? 天鹅座X-1是黑洞吗? A 是 B不是 C可能是(请在自己所选的选项后面说明理由) 2009年7月22日日全食具体时间1.在日全食带吗?(山西南部)2.具体时间(具体到分)回二楼:临汾市襄汾县 阿波罗11号飞船的宇航员在月球上安装了一个什么? 天鹅座是不是黑洞 7月22日日全食上海的具体观测时间顺便问一下,什么时候戴墨镜,什么时候可摘掉(答者加10分)回答要有重点好不好,不要给我一大筐东西 阿波罗11号之前还有什么宇宙飞船拍摄到过月球的表面吗? 一队双星向撞可以产生黑洞吗? 谷歌地球上,火星和月球上面的国旗是什么含义?还有火星上2个小绿人的标记怎样解释? 阿波罗11号真的上过月球吗?月球上的日夜温差很大的,白天几百慑氏度,夜里零下几百度!一般的金属在这种温差下都是要分解的!美国人的太空车的金属能熬住这么大温差?太空人的装备能熬住? 如果,黑洞与另一个黑洞在比较相近的地点上,会发生什么事?黑洞会移动吗? 为什么谷歌地球看到的图像不像是真实的? 美国的阿波罗20号飞船从月球带回外星人的尸体,是不是恶作剧或骗人的? 关于银河系中心的黑洞?我们的银河系中心 据说是一个 超大黑洞.而且 我们的太阳系 围绕银河系中心 旋转,我们知道 黑洞是不断 吞噬 物质的,而且 吞噬的越多 其 体积就越大,体积越大 引力 下载的谷歌地球安装不了出现这个画面 这是为什么? 谷歌地球上有关麦田怪圈或是UFO坠毁或者沉船的座标! 银河系最中间是黑洞吗 谷歌地球可以看立体照片了?最近我在使用该软件观赏美国地区时无论是在城市市区里还是在州际公路上都可以显示立体图像,就仿佛你是站在地面上观赏周围景观,而不是像以前只能从上往下 我用谷歌地球的时候,在非洲好望角上有一个照片(球形的),里面发现了一个酷似UFO的东西, 宇宙中有比银河系大的黑洞有没有可能银河系被比它大的黑洞吞噬了? 谷歌地球中怎么弄立体图形 这个是不是UFO啊!我用谷歌地球6.2看到的,是在美国,大家看下到底是神马? 关于银河系黑洞问题?银河系中心是个黑洞,我们太阳系位于银河系边缘,如果位置在黑洞旁边,我们会怎样呢? 谷歌地球如何才能看清图像 月球上有没有外星人 银河系的中心是黑洞吗? 谷歌地球怎样才能看到3D图原来在右边还有滑标,不知咋搞的没有了,咋弄出来呀? 月亮上有外星人吗?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn