| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2807 人关注过本帖
标题:关于窗体自适应分辨率的问题
只看楼主 加入收藏
ictest
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:333
专家分:114
注 册:2010-2-17
结帖率:70%
收藏
 问题点数:0 回复次数:4 
关于窗体自适应分辨率的问题
我在家里编写了一个程序,家里显示器的分辨率是1440*900(宽屏),在窗体中我把各个控件放在了合适的位置,但拿到单位使用发现单位的各个电脑的分辨率不尽相同,有800*600、1024*768等等等等,这样就造成窗体和内部的控件显示不全的现象,不知是否有方法可以根据分辨率的不同而自动放大或缩小窗体和内部的控件?我看到网上说可以先求出分辨率后再根据分辨率设置窗体和内部的控件的长和宽,分不同的情况用上几个if。。。then。。。。语句,但是我的这个软件中用上了200多个控件,一一修改是不是太麻烦了?麻烦告知是否有较简便的方法?谢谢啦!

最好附上实例,谢谢了!
搜索更多相关主题的帖子: 分辨率 窗体 
2010-06-13 12:46
bczgvip
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:66
帖 子:1310
专家分:5312
注 册:2009-2-26
收藏
得分:0 
200多个...恩,一定功能强大。
我也只能说慢慢改吧。或者可以把一部分放到Frame上面去。
2010-06-13 14:36
ictest
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:333
专家分:114
注 册:2010-2-17
收藏
得分:0 
我在网上找到一段例子,带到程序里后发现窗体里的控件字体都变小了,这是怎么回事?在那里修改呀?
MSSCCPRJ.rar (2.32 KB)
2010-06-13 15:34
bczgvip
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:66
帖 子:1310
专家分:5312
注 册:2009-2-26
收藏
得分:0 
程序代码:
   ScaleX = FormName.ScaleWidth \ ObjOldWidth
   '保存窗体宽度缩放比例
   ScaleY = FormName.ScaleHeight \ ObjOldHeight
   '保存窗体高度缩放比例

   ObjOldFont = FormName.Font.Size \ ObjOldHeight
用"\"来做运算。
2010-06-13 18:25
erhu10
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2010-9-4
收藏
得分:0 
Public fbl As Integer
Public shuiping As Integer
Public cuizhi As Integer

Sub SetDeviceIndependentWindow(thisform As Form)
Dim Obj As Control
Dim DesignX As Integer
Dim DesignY As Integer
Dim XFactor As Single
Dim YFactor As Single
Dim X As Integer
    DesignX = 1440: DesignY = 900
    XFactor = (Screen.Width / Screen.TwipsPerPixelX) / DesignX
    YFactor = (Screen.Height / Screen.TwipsPerPixelY) / DesignY
  If XFactor = 1 And YFactor = 1 Then
     fbl = 0
  Else: fbl = 1
  End If
End Sub
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 = shuiping / 1440
ScaleY = cuizhi / 900
On Error Resume Next
   For Each Obj In formname
     StartPos = 1
       For i = 0 To 3
        TempPos = InStr(StartPos, Obj.Tag, " ", vbTextCompare)
        If TempPos > 0 Then
          pos(i) = Val(Mid(Obj.Tag, StartPos, TempPos - StartPos))
          StartPos = TempPos + 1
        Else
          pos(i) = 0
        End If
      Next i
     Obj.Move pos(0) * ScaleX, pos(1) * ScaleY, pos(2) * ScaleX, pos(3) * ScaleY
     If TypeOf Obj Is OptionButton Then
        Obj.FontSize = Obj.FontSize * ScaleX
       ElseIf TypeOf Obj Is ComboBox Then
         Obj.FontSize = Obj.FontSize * ScaleX
        ElseIf TypeOf Obj Is TextBox Then
          Obj.FontSize = Obj.FontSize * ScaleX
         ElseIf TypeOf Obj Is Label Then
           Obj.FontSize = Obj.FontSize * ScaleX
        ElseIf TypeOf Obj Is CheckBox Then
          Obj.FontSize = Obj.FontSize * ScaleX
       ElseIf TypeOf Obj Is CommandButton Then
         Obj.FontSize = Obj.FontSize * ScaleX
     ElseIf TypeOf Obj Is Frame Then
       Obj.FontSize = Obj.FontSize * ScaleX
     End If
  Next Obj
On Error GoTo 0
End Sub
Public Sub ResizeInit(formname As Form)
Dim Obj As Control
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
试试这个,不过据说这种遍历函数并不是对所有的控件都适用
2010-09-05 10:23
快速回复:关于窗体自适应分辨率的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017498 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved