根据每台计算机的分辨率自动调整表单/控件的大小

时间:2015-06-05 20:18:09

标签: vb6

我已经创建了一个功能齐全的程序,并将其发送给了一些客户。他们中的一些人拥有非常低分辨率的旧计算机,他们无法轻松访问它,因为表格和控件都是超大的。有没有一种简单的方法让我根据分辨率自动调整表单和控件的大小?

正如我在标题中所说,这是针对Visual Basic 6.0的。非常感谢你们所有人。

1 个答案:

答案 0 :(得分:1)

您可以在表单上存储每个控件的大小和位置,并根据需要移动或调整控件大小。

在下面的代码中,我使用“TabIndex”属性作为每个控件的唯一ID(我不记得在我的旧VB6内存中,如果这是正确的事情......)。 我在Form_Load事件中存储表单的大小,每个控件的大小和位置。

Private lWidth As Long
Private lHeight As Long

Private Enum ePROPERTY
    ep_Top = 0
    ep_Left = 1
    ep_Width = 2
    ep_Height = 3
End Enum

Private aControlSize() As Long

Private Sub Form_Load()

Dim ctlTmp As Control

lWidth = Me.Width
lHeight = Me.Height

ReDim aControlSize(3, Form1.Controls.Count)

For Each ctlTmp In Form1.Controls
    aControlSize(ctlTmp.TabIndex, ep_Top) = ctlTmp.Top
    aControlSize(ctlTmp.TabIndex, ep_Left) = ctlTmp.Left
    aControlSize(ctlTmp.TabIndex, ep_Width) = ctlTmp.Width
    aControlSize(ctlTmp.TabIndex, ep_Height) = ctlTmp.Height
Next

End Sub

然后每次调整表单大小(Form_resize事件)时,您必须移动或调整每个控件的大小。 其中一些需要锚定在右侧或底部(或两者)。有些需要调整大小并移动。其他人则不需要任何东西。

Private Sub Form_Resize()

Dim ctlTmp As Control

For Each ctlTmp In Form1.Controls

    Select Case LCase$(ctlTmp.Name)

        Case "text1"
            ' Text1 is anchored to the left and right borders of the form :
            ctlTmp.Width = Me.Width - (lWidth - aControlSize(ctlTmp.TabIndex, ep_Width))

        Case "command1"
            ' Command1 is anchored to the right border of the form :
            ctlTmp.Left = aControlSize(ctlTmp.TabIndex, ep_Left) - (lWidth - Me.Width)

        Case "check1"
            ' check1 is anchored to the bottom border of the form :
            ctlTmp.Top = aControlSize(ctlTmp.TabIndex, ep_Top) - (lHeight - Me.Height)

    End Select

Next

End Sub

表单已加载:

enter image description here

表单已调整大小:

enter image description here

请注意,我的代码基本上是可以完善的......

可能有一个更优雅的解决方案,通过重载每个控件,并添加像dotnet中现有的属性/方法。