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

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

当API遇到云平台,开发者面临的新抉择! 《近匠》欧朋流量宝,工具类应用开发之道 《近匠》Bmob:免费无限制的公有云服务 MDCC应用征集最新动态:3D手游成热点、硬件种类丰富 闪迪Ultra II SSD:采用TLC闪存,最低价为79.99美元 现有技能不浪费!基于Titanium的跨平台游戏引擎Platino 跳过开发者,专注补Bug的iOS 8 Beta 6悄然发布 集群管理可以很简单,Google又放大招 应用内直接打车:Uber面向第三方开发者开放API 百万美元巨奖!英特尔启动感知计算挑战赛 IBM 2014技术峰会在京开幕! OpenGL 4.5规范标准发布,大大提升API性能! 更萌更贱:Flappy Bird开发者推虐心新作Swing Copters 学习的革命:AR增强现实遇到儿童应用 颠覆旧概念,IBM Bluemix开启云开发时代 专访企业QQ SaaS团队,谈企业级LNMP架构设计 《近匠》Coding:将软件开发搬到云上 小米与美视频游戏服务Ouya合作 进军国内客厅 新工具Get!轻松实现2D画面动态光影的Sprite Lamp 一周消息树:罗升阳的Android之旅 手游不易:GungHo 3.44亿美元售Supercell股权 周末去哪儿 当然是去2014微信开发者大会!(附参会提醒和名单) 开源框架Ember.js迎来1.7.0和1.8 Beta 1更新 《近匠》RealSense:几行代码,为游戏添增实感交互 MDCC游戏应用征集关键词:中小团队,3D,转型,IP 共话HealthKit:能否颠覆医疗保健生态系统? Perception Neuron系统,让动作捕捉技术不再高冷 2014年DevOps实践调查报告 .NET程序性能的基本要领 百度手机卫士宣布开放三大能力 构建互联网安全生态 火速围观,AMD APU新芯片架构A68H呼之欲出! 你真的懂SQL语句的编写吗?快来,我给你分 重载与模板的问题 出租魏公村西口两居之一 不知哪有好一点的聊天室,各位大虾请推荐几个小弟几个!!!! jsp里面有类似于asp的response.end语法吗? 求教各位大虾,这样的数据库程序如何实现。急切中。。。。。 vb中有没有像CommonDialog选文件的定位文件夹的控件? 怎么一次性加入多个子目录中的CPP文件到VC工程中 关于pos系统数据同步传输,欢迎大家进入讨论! 怎么得到本机的ip地址? 关于package 的问题 关于打开网页的问题 怎么在文本文件中的两行中添加一行?怎么删除一行? “split”分割问题 请教:怎么配置Tomcat可以禁止访问目录 ,比如访问 http://127.0.0.1/test 不会出现文件列表? 请问怎样在对话框窗口中的Edit控件里按下Enter键后不要退出 有关dremveaver ultradev 的动态网页制作问题, 请教高手。。 在delphi中如何实现全屏?? 100分。请大虾帮忙搞定 谁有存储过程的学习资料? 怎样判断计算机上有没有装madc数据库连接,? 项目中的一个问题,急待解决,请帮忙,谢谢 无聊散分 鼠标在图片上移动所发生的事件 一个怪问题:ping得通却NetTerm不上? JBuilder中如何拖动控件到面板,位置放置的问题。(高手指教) 请问在那里有csdn helper 下载 是否可以给表的字段编号? 我想让程序启动该怎么做 这样一个项目计划怎么写? vb.net 附值问题,请教高人 一次檢索出DataSet數據存至Session還是每次DataGrid翻頁時檢索為好? 一个程序不停的写一个文件,越来越大。怎样把以前的数据拷出来然后把他们从文件里删去? 会自动关机的电脑 怎样在listCTRL中加入彩色字?Waiting Online 请问到哪里去找w2k下编译需要的头文件和库文件呀 请问各位哪里有UNIX平台或LINUX平台的POWERBUILDER下载? 吐血给分!小问题,简单的很! 请教有关ServerSocket的问题 请问到哪里去找w2k下编译需要的头文件和库文件呀 想玩网络游戏,各位给推荐一下,谢了先!!! 请各位在这里留下已知的并已解决的BCB的BUG问题,也好让大家少走弯路了,谢谢! CMOS的问题,我是XP系统! 看看流星花园的搞笑版吧(转载) Word 和 Excel 启动不了 问几个菜鸟问题关于数组的。请大家帮忙! 关于用asp.net代码实现文件上传的问题!急! 新手提问:如何在vb中设计一个扁平的按钮。----在线等待~!~!! 这个查询可以在一条语句中完成吗?高分! 保存问题 关于浮点数累积误差的问题:水平直线旋转180度后两端点相差了1个像素。如何解决~高分谢高手。(内有代码) 湖心亭看雪的文眼是什么,为什么 不要旅游的! 描写人物心里惧怕的四字词语 翻译湖心亭看雪的文眼是什么 暑假里的一次旅行作文 ( )奔( )突填动物的名字 湖心亭看雪的文眼是? 塞翁失马所阐明的是福祸可以相互转换的道理,用现在的话来说是什么 ()奔()突 (动物名称)()奔()突(动物名称) 幼时记趣中描写心理的句子 求一篇600字作文,主题是 明礼知耻,崇德向善. 第二个和第四个字是反义词的成语 (幼时记趣)描写热爱生活的是哪句 明礼知耻,崇德向善手抄报内容应该写哪些 不小心喝了泡过动物尸体的水会怎么样 自己的花是给别人看的 自己的花为什么要给别人看(根据课文回答) 关于开展"明礼知耻·崇德向善在校园"之我文明了吗 写一篇作文(600字左右 泡凤爪是不是用泡尸体的水做的 小学五年级下册第25课《自己的花是让别人看的》的课后问题谁知道? 求明礼知耻崇德向善演讲稿哪位大神帮忙写一篇明礼知耻崇德向善演讲稿啊?1000字左右,100分啊,满意的话再加一百分!跪求上传啊 干燥剂泡在水里喝能死人吗?那种超市里卖的饼干或者其他食品里有干燥剂,那种干燥剂吃了会死人吗?如果泡在水里一起喝下去呢?多少量的样子会死?劝人的爬,因为我本来就没说要自杀,只是很 急求小学一到五年级描写花的课文,把课题发到我邮箱,有链接更好!本人邮箱:ivy3012@163.com 明礼知耻崇德向善是意思 英语翻译1、部中议覆事件,出一言而势在必行,殆非怀谦集益之道.2、大臣任大责重,固不能免人指摘.闻过则喜,古人所尚.3、上临其丧,见其俭素,为之怮. is surprising to find out_____ we ike new people when we get to know them.A.how many.B.how much 请教初一上册几道数学题 先说声谢谢!(求详解)请把详细计算步骤列出并解释一下. 感谢!(先问一道吧 其他的还有图形没法传上来)1. 圆柱形无盖油桶的底面直径是0.6m,高1m,这个油桶的表面积 描写人表情或语言的四字词语和句子哪有? 关于赞美花,关于花的散文关于赞美花的散文,明天要的!短一点的也可以,最好是一篇阅读短文,把短文的问题也提出来.要记住:爱花的散文,或者是赞美花的散文,要写作者,写花的特征. 请教小学五年级上册的一道数学题.求助专业老师回答 先说声谢谢!学生在操场上做操,只知道人数在90到110之间.若排成3列,则不多不少;若排成5列,则少2人;若排成7列,则少4人.那么一共有多少 人从动物身上学到了什么?(物品) 自己的花是让别人看的课文中,季羡林先生真实地描述了德国人(),赞美了德国人民().急!!!作业上的,谢了。 红星小学六年一班同学去西湖坐船游玩,每船8人则会余下4人,如果每船坐9人,则余一只船,该班共有(   )人,共有(  )只船. 浪漫庄园动物有产品出了怎么办? 赞美花的文章有一小节是按总分总的结构来写的 写一封英文信,关于自我介绍的,有关我的爱好,工作,身体等,最好在50字以上 帮我写一篇描写学校教室和朋友的英语作文.描写学校教室和朋友的英语作文,一定要是英语的,用上一个比较级的一个最高级,80字左右就行了, 用花赞美夏季的文章必须用夏花注意是文章,不是句子。是用夏花 《塞翁失马》中的全篇原文急.因为有一句不知道是不是《塞翁失马》中的话. 从甲地到乙地有一段平路和上坡路,如果骑自行车保持平路每小时行15千米,上坡每小时行10千米,下坡每小时行18千米,那么从甲地到乙地需29分,从乙地到甲地需25分,则甲、乙两地相距多少千米? 达人快来在△ABC中,BC=14 AC=9 AB=13.他的内切圆分别和BC.AC.AB切与点D.E.F 求AF BD CE 的长 塞翁失马焉知非福的原文 怎样过小年作文 文言文塞翁失马,焉知非福的,全文翻译及原文! “杀()做() ”括号里填填动物名字 英语翻译4个单词 塞翁失马的翻译和原文 《智子疑邻》《塞翁失马》《山市》的原文 描写人物心理的四字词语 塞翁失马的译文 寒假有趣的事简要记录100多字 描写人物心态的四字词语 《湖心亭看雪》中的问题这是语文配套练习册第101页的第5题:《湖心亭看雪》中,“一痕”“一点”是作者远望所见,可若说“一芥”“两三粒”也是作者远望所见就不合情理,说说这是怎么回 关于寒假中做家务的事,作文100字, 2013新颖作文题目本人初一生,明天将参加市级别的作文大赛,有经验的大家麻烦提供些历年的大赛题目.帮忙帮到底的顺便指导个作文素材呗,THANK. 《湖心亭看雪》中诗人是无所事事才去湖心亭看雪? 塞翁失马的原文?急...... 过小年的作文,要写关于过小年的,不要啰里啰唆,简洁点,不要写废话,字数450字以上的六年级作文! 1.已知x²+X-1=0,求x³+2x²+3的值 42.无论xy取何值,代数式x²+y²+2x-4y+7的值A.总不小于2 B.总小于7C.可为任何实数 D.可能为负数3.已知代数式x²-ax-6能在整数范围内因式分解,则整数a 求塞翁失马原文 为什么我总喜欢对着天空发呆
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘