我在800*600下做的界面,Frame宽度高度正好
可是一到1024*768下就变成很小了,
有否方法让在不同分辨率下显示的比例一样,在form中都占那么大的地方

解决方案 »

  1.   

    自动改变控件大小当 窗 体 大 小 改 变 时, 如 何 动 态 的 改 变 控 件 的 大 小 是 许 多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。 你 可 以 将 本 程 序 拷 到 
    窗 体 代 码 段 里, 然 后 在 窗 体 里 加 入 任 意 控 件 即 可 进 行 测 
    试。 
      

  2.   

    去判斷分辨率吧,這個偶沒有試過。因為感覺不太好。
    我們開發環境喜歡放再800*600滿的,1024*768置中
    ,如果改變大小再resize
      

  3.   


        指定frame1的大小始终是屏幕面积大小的1/4 :Me.Frame1.Move 100, 100, 0.5 * Screen.Width, 0.5 * Screen.Height
      

  4.   

    例如:你的程序在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
      

  5.   

    谢谢各位
    采用MSTOP(陈建华(东莞立晨企业资讯服务有限公司)) 的方法
    结帖
      

  6.   

    TO: MSTOP(陈建华(东莞立晨企业资讯服务有限公司)) 我结帖的时候大概网络问题,页面显示出现了点问题,所以帖子结了但分数没加给你
    我以前也遇过这样的事情,真不巧今天有这样了,真的不好意思,只能怪CSDN结帖做得还不完善了
    再次表示歉意
      

  7.   

    http://expert.csdn.net/Expert/topic/2845/2845943.xml?temp=.7621271
      

  8.   

    http://www.pdriver.com/display.asp?key_id=1332&ai_down=1