不同分辨率,控件大小如何设置? 我在800*600下做的界面,Frame宽度高度正好可是一到1024*768下就变成很小了,有否方法让在不同分辨率下显示的比例一样,在form中都占那么大的地方 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 自动改变控件大小当 窗 体 大 小 改 变 时, 如 何 动 态 的 改 变 控 件 的 大 小 是 许 多VB 程 序 员 头 痛 的 事。 有 的 人 设 置 窗 体Resizable 但 却 不 改 变 控 件 的 大 小; 有 的 人 则 根 据 控 件 的 绝 对 位 置 与 窗 口 大 小 相 加 减 的 办 法 来 重 新 定 位 控 件 与 改 变 大 小, 这 种 办 法 比 较 繁 琐, 且 不 可 重 用; 当 然 也 有 人 则 限 定 窗 口 干 脆 不 让 改 变。有 没 有 一 种 简 便 易 行 的 办 法 ? 答 案 是 肯 定 的, 下 面 给 出 一 个 一 劳 永 逸 的 办 法, 源 程 序 如 下: Option Explicit Private FormOldWidth As Long '保存窗体的原始宽度 Private FormOldHeight As Long '保存窗体的原始高度 '在调用ResizeForm前先调用本函数 Public Sub ResizeInit(FormName As Form) Dim Obj As Control FormOldWidth = FormName.ScaleWidth FormOldHeight = FormName.ScaleHeight On Error Resume Next For Each Obj In FormName Obj.Tag = Obj.Left & " " & Obj.Top & " " & Obj.Width & " " & Obj.Height & " " Next Obj On Error GoTo 0 End Sub '按比例改变表单内各元件的大小, 在调用ReSizeForm前先调用ReSizeInit函数 Public Sub ResizeForm(FormName As Form) Dim Pos(4) As Double Dim i As Long, TempPos As Long, StartPos As Long Dim Obj As Control Dim ScaleX As Double, ScaleY As Double ScaleX = FormName.ScaleWidth / FormOldWidth '保存窗体宽度缩放比例 ScaleY = FormName.ScaleHeight / FormOldHeight '保存窗体高度缩放比例 On Error Resume Next For Each Obj In FormName StartPos = 1 For i = 0 To 4 '读取控件的原始位置与大小 TempPos = InStr(StartPos, Obj.Tag, " ", vbTextCompare) If TempPos > 0 Then Pos(i) = Mid(Obj.Tag, StartPos, TempPos - StartPos) StartPos = TempPos + 1 Else Pos(i) = 0 End If '根据控件的原始位置及窗体改变大小 的比例对控件重新定位与改变大小 Obj.Move Pos(0) * ScaleX, Pos(1) * ScaleY, Pos(2) * ScaleX, Pos(3) * ScaleY Next i Next Obj On Error GoTo 0 End Sub Private Sub Form_Load() Call ResizeInit(Me) '在程序装入时必须加入 End Sub Private Sub Form_Resize() Call ResizeForm(Me) '确保窗体改变时控件随之改变 End Sub 本 例 中 给 出 了 二 个 函 数:ResizeInit 和ResizeForm, 在 调 用ResizeForm 之 前 必 须 先 调 用ResizeInit。 你 可 以 将 本 程 序 拷 到 窗 体 代 码 段 里, 然 后 在 窗 体 里 加 入 任 意 控 件 即 可 进 行 测 试。 去判斷分辨率吧,這個偶沒有試過。因為感覺不太好。我們開發環境喜歡放再800*600滿的,1024*768置中,如果改變大小再resize 指定frame1的大小始终是屏幕面积大小的1/4 :Me.Frame1.Move 100, 100, 0.5 * Screen.Width, 0.5 * Screen.Height 例如:你的程序在800*600下开发的.CALL AUTOSIZE 800Function AutoSize(SourWidth As Long) Dim Ctr As Control Dim Size As Double On Error Resume Next Size = Screen.Width / (SourWidth * 15) For Each Ctr In Me.Controls If UCase$(Ctr.Name) = "LINE" Then Ctr.X1 = Ctr.X1 * Size: Ctr.X2 = Ctr.X2 * Size Ctr.Y1 = Ctr.Y1 * Size: Ctr.Y2 = Ctr.Y2 * Size Else Ctr.Move Ctr.Left * Size, Ctr.Top * Size, Ctr.Width * Size, Ctr.Height * Size Ctr.FontSize = Ctr.FontSize * Size End If NextEnd Function 谢谢各位采用MSTOP(陈建华(东莞立晨企业资讯服务有限公司)) 的方法结帖 TO: MSTOP(陈建华(东莞立晨企业资讯服务有限公司)) 我结帖的时候大概网络问题,页面显示出现了点问题,所以帖子结了但分数没加给你我以前也遇过这样的事情,真不巧今天有这样了,真的不好意思,只能怪CSDN结帖做得还不完善了再次表示歉意 http://expert.csdn.net/Expert/topic/2845/2845943.xml?temp=.7621271 http://www.pdriver.com/display.asp?key_id=1332&ai_down=1 求助VB 我在这下载了宾馆管理系统,为什么加载不了。 显示日期和时间的对话框 数据绑定到datagrid中的问题 请都关于记录复制粘贴问题 我想实现我得应用程序只启动一次并打开,如果再一次打开则自动判断并退出?多谢各位 有关MsHFlexGrid的问题,请高手指点。 表查询与插入问题 在线等 帮帮我 一个关于ADO的问题 VB中如何锁住变量使其值不做改变 如何使用Bitblt函数实现截取屏幕上的特定区域 谁给提供一些vb网络编程方面的电子书籍,尤其是webbrowser控件的 还是用ADO代码连接SQL2000的问题! 在线等待!!!
程 序 员 头 痛 的 事。 有 的 人 设 置 窗 体Resizable 但 却 不 改 变 控
件 的 大 小; 有 的 人 则 根 据 控 件 的 绝 对 位 置 与 窗 口 大 小 相
加 减 的 办 法 来 重 新 定 位 控 件 与 改 变 大 小, 这 种 办 法 比 较
繁 琐, 且 不 可 重 用; 当 然 也 有 人 则 限 定 窗 口 干 脆 不 让 改 变。
有 没 有 一 种 简 便 易 行 的 办 法 ? 答 案 是 肯 定 的, 下 面 给 出
一 个 一 劳 永 逸 的 办 法, 源 程 序 如 下: Option Explicit Private FormOldWidth As Long '保存窗体的原始宽度
Private FormOldHeight As Long '保存窗体的原始高度
'在调用ResizeForm前先调用本函数
Public Sub ResizeInit(FormName As Form) Dim Obj As Control
FormOldWidth = FormName.ScaleWidth
FormOldHeight = FormName.ScaleHeight
On Error Resume Next
For Each Obj In FormName
Obj.Tag = Obj.Left & " " & Obj.Top & " " & Obj.Width & " " & Obj.Height
& " "
Next Obj On Error GoTo 0 End Sub '按比例改变表单内各元件的大小, 在调用ReSizeForm前先调用ReSizeInit函数 Public Sub ResizeForm(FormName As Form) Dim Pos(4) As Double
Dim i As Long, TempPos As Long, StartPos As Long
Dim Obj As Control
Dim ScaleX As Double, ScaleY As Double
ScaleX = FormName.ScaleWidth / FormOldWidth '保存窗体宽度缩放比例
ScaleY = FormName.ScaleHeight / FormOldHeight '保存窗体高度缩放比例 On Error Resume Next For Each Obj In FormName
StartPos = 1 For i = 0 To 4 '读取控件的原始位置与大小
TempPos = InStr(StartPos, Obj.Tag, " ", vbTextCompare)
If TempPos > 0 Then
Pos(i) = Mid(Obj.Tag, StartPos, TempPos - StartPos)
StartPos = TempPos + 1 Else Pos(i) = 0
End If '根据控件的原始位置及窗体改变大小 的比例对控件重新定位与改变大小 Obj.Move Pos(0) * ScaleX, Pos(1) * ScaleY, Pos(2) * ScaleX, Pos(3) *
ScaleY Next i Next Obj On Error GoTo 0 End Sub Private Sub Form_Load() Call ResizeInit(Me) '在程序装入时必须加入 End Sub Private Sub Form_Resize() Call ResizeForm(Me) '确保窗体改变时控件随之改变 End Sub 本 例 中 给 出 了 二 个 函 数:ResizeInit 和ResizeForm, 在 调 用
ResizeForm 之 前 必 须 先 调 用ResizeInit。 你 可 以 将 本 程 序 拷 到
窗 体 代 码 段 里, 然 后 在 窗 体 里 加 入 任 意 控 件 即 可 进 行 测
试。
我們開發環境喜歡放再800*600滿的,1024*768置中
,如果改變大小再resize
指定frame1的大小始终是屏幕面积大小的1/4 :Me.Frame1.Move 100, 100, 0.5 * Screen.Width, 0.5 * Screen.Height
CALL AUTOSIZE 800Function AutoSize(SourWidth As Long)
Dim Ctr As Control
Dim Size As Double
On Error Resume Next
Size = Screen.Width / (SourWidth * 15)
For Each Ctr In Me.Controls
If UCase$(Ctr.Name) = "LINE" Then
Ctr.X1 = Ctr.X1 * Size: Ctr.X2 = Ctr.X2 * Size
Ctr.Y1 = Ctr.Y1 * Size: Ctr.Y2 = Ctr.Y2 * Size
Else
Ctr.Move Ctr.Left * Size, Ctr.Top * Size, Ctr.Width * Size, Ctr.Height * Size
Ctr.FontSize = Ctr.FontSize * Size
End If
NextEnd Function
采用MSTOP(陈建华(东莞立晨企业资讯服务有限公司)) 的方法
结帖
我以前也遇过这样的事情,真不巧今天有这样了,真的不好意思,只能怪CSDN结帖做得还不完善了
再次表示歉意