赛迪网 > IT技术 编程语言 > 文章
  IT资讯搜索
 
IT产品搜索
[程序开发][网管世界][网络安全][数据库技术]
[操作系统][嘉宾聊天·在线访谈][活动集锦]
[精彩专题][Symantec专区][订阅IT技术周刊]
[开发论坛][网管论坛][安全论坛][数据库论坛]
[操作系统论坛][Sybase专区][IBM dW技术专区]
[病毒求助][病毒与漏洞播报][文档·源码下载]

常见问题:自动调整窗口内控间的大小

发布时间:2006.08.16 03:05     来源:plwww    作者:

这是一个类模块:
1. 建立一个新的类模块,加入下列代码,并给类模块起名(例:autosize)
2. 加入一个窗口并且加入:Private el as new autosize
3. 在 Form_Load 事件中加入 el.init me
4. 在 Form_Resize 事件中加入 el.formresize me


Option ExplicitPrivate nFormHeightAs IntegerPrivate nFormWidth As IntegerPrivate nNumOfControlsAs IntegerPrivate nTop()As IntegerPrivate nLeft() As IntegerPrivate nHeight()As IntegerPrivate nWidth()As IntegerPrivate nFontSize()As IntegerPrivate nRightMargin()As IntegerPrivate bFirstTime As Boolean

Sub Init(frm As Form, Optional nWindState As Variant)Dim I As IntegerDim bWinMax As BooleanbWinMax = Not IsMissing(nWindState)nFormHeight = frm.HeightnFormWidth = frm.WidthnNumOfControls = frm.Controls.Count - 1bFirstTime = TrueReDim nTop(nNumOfControls)ReDim nLeft(nNumOfControls)ReDim nHeight(nNumOfControls)ReDim nWidth(nNumOfControls)ReDim nFontSize(nNumOfControls)ReDim nRightMargin(nNumOfControls)On Error Resume NextFor I = 0 To nNumOfControlsIf TypeOf frm.Controls(I) Is Line ThennTop(I) = frm.Controls(I).Y1nLeft(I) = frm.Controls(I).X1nHeight(I) = frm.Controls(I).Y2nWidth(I) = frm.Controls(I).X2ElsenTop(I) = frm.Controls(I).TopnLeft(I) = frm.Controls(I).LeftnHeight(I) = frm.Controls(I).HeightnWidth(I) = frm.Controls(I).WidthnFontSize(I) = frm.FontSizenRightMargin(I) = frm.Controls(I).RightMarginEnd IfNextIf bWinMax Or frm.WindowState = 2 Thenfrm.Height = Screen.Heightfrm.Width = Screen.WidthElsefrm.Height = frm.Height * Screen.Height / 7290frm.Width = frm.Width * Screen.Width / 9690End IfbFirstTime = TrueEnd Sub

Sub FormResize(frm As Form)Dim I As IntegerDim nCaptionSizeAs IntegerDim dRatioX As DoubleDim dRatioY As DoubleDim nSaveRedrawAs LongOn Error Resume NextnSaveRedraw = frm.AutoRedrawfrm.AutoRedraw = TrueIf bFirstTime ThenbFirstTime = FalseExit SubEnd IfIf frm.Height < nFormHeight / 2 Then frm.Height = nFormHeight / 2EndifIf frm.Width < nFormWidth / 2 Thenfrm.Width = nFormWidth / 2EndifnCaptionSize = 400dRatioY = 1# * (nFormHeight - nCaptionSize) _ / (frm.Height - nCaptionSize)dRatioX = 1# * nFormWidth / frm.WidthOn Error Resume NextFor I = 0 To nNumOfControlsIf TypeOf frm.Controls(I) Is Line Thenfrm.Controls(I).Y1 = Int(nTop(I) / dRatioY)frm.Controls(I).X1 = Int(nLeft(I) / dRatioX)frm.Controls(I).Y2 = Int(nHeight(I) / dRatioY)frm.Controls(I).X2 = Int(nWidth(I) / dRatioX)Elsefrm.Controls(I).Top = Int(nTop(I) / dRatioY)frm.Controls(I).Left = Int(nLeft(I) / dRatioX)frm.Controls(I).Height = Int(nHeight(I) / dRatioY)frm.Controls(I).Width = Int(nWidth(I) / dRatioX)frm.Controls(I).FontSize = Int(nFontSize(I) / _dRatioX) + Int(nFontSize(I) / dRatioX) Mod 2frm.Controls(I).RightMargin = Int(nRightMargin(I) / dRatioY)End IfNextfrm.AutoRedraw = nSaveRedrawEnd Sub


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· 使用ADO操作SQL SERVER 通过OLE DB 访问 ACCE (09-28) · 如何用VB6写COM组件(二) (03-23)
· 如何用VB6写COM组件(一) (02-03) · Visual Basic 的未来 (06-08)
· 一个自动生成用ADO调用SQL SERVER的存储过程V (10-26) · vb中从域名得到IP及从IP得到域名 (06-21)
· 直接从系统得到错误描述 (10-19) · 2、全局变量和枚举常量 (07-01)
· 7、支持函数 (01-08) · 6、ExportToGIF函数 (11-14)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
  赛迪推荐  
  手机·资费 ·新品·导购·评测·手机资费·宽带
手机搜索  诺基亚 N73 MOTO Z6
  IT产品 ·笔记本·台式机·服务器·打印·投影
IT产品搜索 
  IT技术 ·开发·网管·安全·数据库·操作系统
  信息化 ·热点·专题·访谈·周刊·方案案例
[政务][电信][金融][农业][制造业][中小企业]
[CIO][ERP][协同][IT管理][中间件][电子商务]
[政策][地方][专家][评估][辞典][博客][社区]
· 专题:一路畅通构想曲——让出行不再遭遇堵车
· CIO工作亲历:企业ERP选型不能忽视"选人关"
· 综述:信息化建设给中国监狱带来的各种变化
· 金融业风险管理和法规遵从有五点需考虑的因素
· 保险业CIO关注:该如何建立统一高效的CRM体系
· 调查显示:多数CIO对IT规划仍存在困惑和误解
  博客·论坛 ·曾剑秋·项立刚·Java学习·网管