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

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

以色列玫瑰:细数十位科技创新领域的女性佼佼者 8款最佳的开源在线学习CMS系统 在发布站点前,Web开发者需要关注哪些技术细节? TOCC、中航信、高德、北斗平台重磅专家登场 邀您共享ITS技术盛宴 腾讯大数据之TDW计算引擎解析——Shuffle AMD APU14 BEIJING技术创新大会精彩看点 这是云整合时代开始的节奏吗?Rackspace考虑退出 一周热点:如何使用15美元每月的机器实现百万文档检索 黑客获取数据信息的目的和进攻手段及应对之策 Surface Pro 3遭大曝光:799$起、四色可选、12寸屏幕 当软件遇上设计,浅谈敏捷UX VS.精益UX DIY“物联网”——自己动手处理传感器数据 AMD成首家X86+ARM双架构计算 欲寻新蓝海 锤子手机发布:Smartisan T1与其背后的开发团队 第六届中国云计算大会在北京隆重举行 替代笔记本的Surface Pro 3:800g、9.1mm,极致轻薄 PWorld2014:畅谈企业软件向“大平台”+“微应用”变革 微软公司全球资深副总裁张亚勤:云计算引领互联网物理化 亚马逊网络服务全球市场副总裁Ariel Kelman:亚马逊AWS云服务推动创新 终超苹果,谷歌成全球最有价值品牌 高通业务拓展总监沈周全:以软件为基础建立差异化优势 设计你所需要的,而不是你想要的 疯狂谷歌建广告天网:电冰箱、汽车仪表盘、恒温器、眼镜和手表 开发者眼中的编程语言…… 寻下一突破口?黑莓推Project Ion项目,正式进军物联网 无人驾驶汽车真的要来了:飞思卡尔研制视觉芯片 支持物联网开发! Qt发布5.3版与嵌入式企业版 5月23日:Java已经19岁啦! Google发布Dart1.4版本,新增Observatory工具 《近匠》Mixtile:跑在盒子中的嵌入式平台 从研发、平台化到营销:移动时代,汽车厂商如何升级? 用notes做论坛:用户登录接收到的用户名存在某一个地方,供后面几个页面中的发表及回复使用? 屏幕取词的问题 宝兰的回信 里程表的制作,大家谈。 偶想编个网络游戏的外挂程序,请网络编程高手近来讨论一下(来者有分) 有兴趣的过来看一看! JSP中如何调用SERVLET? 怎样自动检测OICQ是不是在线,用C/C++A做,我可以自己输入号码(OICQ) 怎样自动检测OICQ是不是在线,用C/C++A做,我可以自己输入号码(OICQ),大家帮忙 请问各位高手改变字段类型和向一个已存在的表添加新字段的SQl怎么写? 请问在XML规范里TR是什么的缩写? 关于COM中“聚合”的问题,那位大侠给小第指点迷津,多谢多谢! 呵呵!! CSDN 茶馆 再次开张!!!!(东北分店)欢迎光临 那有pdf版的经典的英文计算机书下载。 来指教一下http://www.csdn.net/expert/topic/383/383603.shtm 发送Microsoft.XMLHTTP怎样获得验证 ldap的问题,大家都来看那, 【怎样在韩文版的windows中调出输入法?】 :)java参考书指点................. 怎样获得Microsoft.XMLHTTP请求验证??? 关于asp.net的web控件的响应事件问题! DOS程序后台运行问题? 高手请指教->多个Form间怎么互通消息? 菜问题....D3D的 谁知道怎么做oicq,分全部归他。 各位兄台:如何激活一个窗口! 我发送Microsoft.XMLHTTP怎样获得验证??? 高分相送:有没有能察看一个dll文件中包含哪些函数的工具??????? help!!!! 怎样发送Microsoft.XMLHTTP获得验证???????? 请问,ASP中,能使用类似VB中的“On Error GoTo XXXX”这样的语句吗? foxpro怎样倒入sql server? 我现在有foxpro的dbf文件?应该怎样做? 多谢 mediaplayer的问题。 告诉我tostring 函数什么用途我们感到阿!谢谢了一个初学者! 请问VB6如何才能认到access2000的数据库文件? 关于对象序列化问题 怎样让返回值为自定义结构? 怎么在对话框上面话线? 请解释一下跃点数 小问题一个,但是需要高手................. 我想把公司的网站改放到公司,该怎么办? ——如需要还有很多分送 请帮忙,我自己觉得问题很难(特急)!!!!!!!!!!!!!!!!!!!! 明天我哥结婚,我很开心啊!!! 我想把公司的网站改放到公司,该怎么办? ——如需要还有很多分送 关于存储过程和触发器的问题?(高分求助) WIN2000机器上ADSL,另一台linux下如何做ADSL的代理让局域网中机器上网! 为什么新生成一个session对象后,jsp page中的scope=session的bean会不正常? ★★oracle中ora-04031错误 请问:在安装MSSQL2000 时(因为公司的电脑是对等网的原因)我装完后出现以下错误: 我应该去东软吗? 冰心对读书有什么体会 阅读短文《瞬间的永恒人性》,1917年圣诞节前几周,欧洲大地上战争的硝烟日趋浓烈.其时正值第一次世界大战,在美国军队的中间,是一条狭窄的无人区.一个年轻的德国士兵在执行任务时被击倒 语文填句子小学课本第一课,访照写句子早晨,从( ),人( ),从( ),走来了许多小学生.看,那个低年级的小同学,(    ),那个(   )的中年级同学(    ),那个(    ) 课文以跨越百年的美丽为题,居里夫人跨越百年的美丽指的是什么? 关于什么的春节的作文题目 阅读短文,飞 入我家的绿毛龟 生命的品格阅读答案_ 冰心对读书的最大感受是什么 幸福是什么?牛郎说:“幸福就是男耕女织,勤勤恳恳地过日子.”哈尔威说:“幸福就是( )”霍金说:“幸福就是( )”钱学森说:“幸福就是( )” 居里夫人的美丽指什么? 居里夫人的故事有那些? 跨越百年的美丽中心是什么? 居里夫人的品质是什么? 绿手指 阅读短文1.在法国一个小镇,有位老奶奶,长着“绿手指”.你可千万别奇怪,“绿手指”是当地人对好园丁的称赞. 2.一天,她在报上看到一条消息,园艺所重金悬赏纯白的金盏花.老奶奶想 有关父爱、母爱的文章123快 生命的品格阅读答案帮帮忙 绿手指这篇文章的题目好在哪里? 写一篇关于月球的作文,100字 父爱母爱名人名言急切!1 绿手指这篇文章的答案比较下面两个绿手指的不同.1、美国某小镇有一位绿手指.2、但愿你我还能长出新的绿手指. 以”月”为话题,写一篇800字的作文. 关于父爱母爱的名言警句 绿手指阅读答案1.在法国一个小镇,有位老奶奶,长着“绿手指”.你可千万别奇怪,“绿手指”是当地人对好园丁的称赞. 2.一天,她在报上看到一条消息,园艺所重金悬赏纯白的金盏花.老奶奶想 60~64 父爱和母爱的名人名言我要各5句 关于写父爱和母爱作文的结尾怎么写? 六下语文课堂作业本中总复习的第六题6月24日8点之前 关于父爱母爱的名言语气亲和、态度友好 求作文 题材要写父爱母爱的叙事要明确 清晰最好与初三生活结合起来 六下语文课堂作业本中总复习的所有题目我的书不见了,作业有正好有很多,好心人啊,我需要六年级下册语文人教版《课堂作业本》中最后的总复习的所有题目!急需,在线等! 关于母爱、父爱的名言警句 虚掩着的门阅读答案,下面是短文和问题.在四小时之前迅速发来答案,一天,某公司总经理叮嘱全体员工——“谁也不要走进8楼那个没挂门牌的房间”,但也没解释为什么.在这家效益相当不错的 六下语文课堂作业本总复习第四大题答案要正确 没有遗漏 快 是本册的成语 写人类 叙事类 绘景类 状物类 冰心《忆读书》作者感悟到了什么 冰心的赏析 一篇描写无月亮的中秋节作文 600字左右 冰心写的读后感(500字)意义要深刻一点 读过冰心的作品之后,你有什么感受?请给出准确答案! 过中秋节的作文600字以上 没有月亮 帮忙想一个作文题目的开头(关于春节)如题.关于写春节来临的开头 冰心家庭背景 没月亮的中秋节作文 600字以上的 《落叶》这篇短文阅读答案 ”我惊叫道,不知什么时候,地上已铺满了落叶!看看这片片枯黄的落叶静静的躺在地上,真让人了难以相信它们曾经还在微风中满是美丽和骄傲. 真是秋天到 友谊的作文题目要求新颖 以月亮为线索,人物是游子,时间是中秋,600字以上的作文 我爱落叶短文答案我爱落叶阅读题答案待解决 [ 标签:落叶阅读题,] ぺ灬葬、爱、 2009-05-13 18:54 我爱落叶我爱春风和朝霞,也爱小草和鲜花,但我更爱落叶.在瑟瑟的秋风中,落叶簌簌地飘到地上 填空:“( )的春节”(要与众不同、新颖一些)是作文题目 回顾·拓展二的第5题 落叶作文 绿手指阅读答案要快 六下语文课堂作业本拓展五第五、7题的答案 人教版六年级上册语文课堂作业本第六单元第一课诗海拾贝全部答案.快今晚就要!除了画图题外其余都要!如果有全部的更好(第六单元)我会追加悬赏分! 阅读“绿手指” 1.在法国一个小镇,有位老奶奶,长着“绿手指”.你可千万别奇怪,“绿手指”是当地人对好园丁的称赞.2.一天,她在报上看到一条消息,园艺所重金悬赏纯白的金盏花.老奶奶想: 语文课本上册 第一课它主要让我们学什么? 人教版六年级上册语文课堂作业本第六单元第一课诗海拾贝全部答案.快今晚就要! 绿手指阅读答案 用一句简短的话,概括第四节主要内容1.在法国一个小镇,有位老奶奶,长着“绿手指”.你可千万别奇怪,“绿手指”是当地人对好园丁的称赞.2.一天,她在报上看到一条消息,园艺 《回顾拓展五 急 六年级上册课堂作业本诗海拾贝答案语文(人教版)我急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急 在5 31之前给我 语文课本上册 第一课《观潮》它主要让我们学什么? 作文题目 春节要明简一点 幸福是什么感觉? 凤凰出版社小学四年级语文课本中第一课“甘露”是什么
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn