Tự động điều chỉnh Form tùy theo cỡ màn hình

Liên hệ QC

Duong gia

Thành viên thường trực
Tham gia
15/1/07
Bài viết
352
Được thích
118
Chào các bạn. Nhờ các bạn viết cho một đoạn Code để tự động điều chỉnh Form tùy theo kích cỡ của màn hình. Do màn hình VT ở nhà là màn hình thường, còn lên CQ là màn hình Wide. Có cách nào đó khi mình mở Form thì nó tự động bung Form cho phù hợp với màn hình không. Trên Form còn có các Command, TextBox, và vv... Mong các bạn chỉ giúp. Thanks
 
Lần chỉnh sửa cuối:
Chào các bạn. Nhờ các bạn viết cho một đoạn Code để tự động điều chỉnh Form tùy theo kích cỡ của màn hình. Do màn hình VT ở nhà là màn hình thường, còn lên CQ là màn hình Wide. Có cách nào đó khi mình mở Form thì nó tự động bung Form cho phù hợp với màn hình không. Trên Form còn có các Command, TextBox, và vv... Mong các bạn chỉ giúp. Thanks
Mình chỉ có cách là khi viết chương trình dựa vào 1 chế độ phân giải màn hình nào đó sau khi phát hành thì các máy sử dụng phải chỉnh lại cấu hình cho tương thích, code như sau:

Trong Module:
Mã:
Declare Function EnumDisplaySettings Lib "user32" _
        Alias "EnumDisplaySettingsA" _
        (ByVal lpszDeviceName As Long, _
        ByVal iModeNum As Long, _
        lpDevMode As Any) As Boolean
Declare Function ChangeDisplaySettings Lib "user32" _
        Alias "ChangeDisplaySettingsA" _
        (lpDevMode As Any, ByVal dwFlags As Long) As Long
Declare Function ExitWindowsEx Lib "user32" _
        (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
Public Const EWX_LOGOFF = 0
Public Const EWX_SHUTDOWN = 1
Public Const EWX_REBOOT = 2
Public Const EWX_FORCE = 4
Public Const CCDEVICENAME = 32
Public Const CCFORMNAME = 32
Public Const DM_BITSPERPEL = &H40000
Public Const DM_PELSWIDTH = &H80000
Public Const DM_PELSHEIGHT = &H100000
Public Const CDS_UPDATEREGISTRY = &H1
Public Const CDS_TEST = &H4
Public Const DISP_CHANGE_SUCCESSFUL = 0
Public Const DISP_CHANGE_RESTART = 1
Type DEVMODE
    dmDeviceName As String * CCDEVICENAME
    dmSpecVersion As Integer
    dmDriverVersion As Integer
    dmSize As Integer
    dmDriverExtra As Integer
    dmFields As Long
    dmOrientation As Integer
    dmPaperSize As Integer
    dmPaperLength As Integer
    dmPaperWidth As Integer
    dmScale As Integer
    dmCopies As Integer
    dmDefaultSource As Integer
    dmPrintQuality As Integer
    dmColor As Integer
    dmDuplex As Integer
    dmYResolution As Integer
    dmTTOption As Integer
    dmCollate As Integer
    dmFormName As String * CCFORMNAME
    dmUnusedPadding As Integer
    dmBitsPerPel As Integer
    dmPelsWidth As Long
    dmPelsHeight As Long
    dmDisplayFlags As Long
    dmDisplayFrequency As Long
End Type

Trong form:

Mã:
Private Sub UserForm_Initialize()
Dim DevM As DEVMODE
    erg& = EnumDisplaySettings(0&, 0&, DevM)
    
    DevM.dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT
    DevM.dmPelsWidth = [COLOR=red]1280[/COLOR]
    DevM.dmPelsHeight = [COLOR=red]800
[/COLOR]     
    erg& = ChangeDisplaySettings(DevM, CDS_TEST)
    
    Select Case erg&
        Case DISP_CHANGE_RESTART
            an = MsgBox("Ban phai khoi dong lai may vi dang thiet lap do phan giai man hinh", vbYesNo + vbQuestion, "Chu y")
            If an = vbYes Then
                erg& = ExitWindowsEx(EWX_REBOOT, 0&)
            End If
        Case DISP_CHANGE_SUCCESSFUL
            erg& = ChangeDisplaySettings(DevM, CDS_UPDATEREGISTRY)
            MsgBox "Do phan giai mang hinh duoc thiet lap xong", vbOKOnly + vbSystemModal, "Thong bao!"
        Case Else
            MsgBox "Do phan giai man hinh [COLOR=red]'1280 x 800'[/COLOR] may cua ban khong duoc ho tro", vbOKOnly + vbInformation, "Thong bao"
    End Select
End Sub
Lưu ý:
Bạn thay đổi độ phân giải cho tương ứng nhé.

 

File đính kèm

  • Do phan giai.xls
    33 KB · Đọc: 187
Upvote 0
Chào các bạn. Nhờ các bạn viết cho một đoạn Code để tự động điều chỉnh Form tùy theo kích cỡ của màn hình. Do màn hình VT ở nhà là màn hình thường, còn lên CQ là màn hình Wide. Có cách nào đó khi mình mở Form thì nó tự động bung Form cho phù hợp với màn hình không. Trên Form còn có các Command, TextBox, và vv... Mong các bạn chỉ giúp. Thanks
Thủ tục khi mở form sẽ bung form bằng màn hình
Mã:
Private Sub UserForm_Initialize()
Me.Width = Application.Width
Me.Height = Application.Height
Me.Top = 0
Me.Left = 0
End Sub
 
Upvote 0
Thủ tục khi mở form sẽ bung form bằng màn hình
Mã:
Private Sub UserForm_Initialize()
Me.Width = Application.Width
Me.Height = Application.Height
Me.Top = 0
Me.Left = 0
End Sub
Thầy ơi! còn các Object trên Form thì sao? Theo em biết thì cách này chỉ làm cho Form "to" ra thôi ---> Các Object không "to lên" tương ứng
 
Upvote 0
Thủ tục khi mở form sẽ bung form bằng màn hình
Mã:
Private Sub UserForm_Initialize()
Me.Width = Application.Width
Me.Height = Application.Height
Me.Top = 0
Me.Left = 0
End Sub
Nhưng nó không tự động điều chỉnh kích cở của các control trong form anh à.
 
Upvote 0
Thầy ơi! còn các Object trên Form thì sao? Theo em biết thì cách này chỉ làm cho Form "to" ra thôi ---> Các Object không "to lên" tương ứng
Cái này mới là vấn đề đáng bàn. Form to lên thì các Object như TextBox, ListBox, ComboBox (các Object hiển thị, nhập dữ liệu) có thể tăng kích cở, nhưng các Object khác đâu có cần tăng kích cở ? Mình điều chỉnh kích thước các cửa sổ, thì cở font, kích thước các điều kiển, nút lệnh đâu có phình lên đâu ?
Theo tôi, chỉ thay đổi các TextBox, ListBox, ComboBox, ... để có thể nhập, xem dữ liệu nhiều hơn. Người viết phải biết các kích cở các loại màn hình. Với mỗi Object, khai báo lại kích thước, vị trí của nó cho phù hợp.
Mã:
Private Sub UserForm_Initialize()
Dim w As Long, h As Long
w = Application.Width
w = Application.Height
Me.Width = w
Me.Height = h
Me.Top = 0
Me.Left = 0
If w = 800  Then
  TextBox1.Left = 50
  TextBox1.Width = 200
  .......
ElseIf w = 1600 Then
  TextBox1.Left = 100
  TextBox1.Width = 400
  .....
ElseIf ...... Then
  .......
End If

If h = 600  Then
  TextBox1.Top = 100
   .......
 ElseIf h = 1200 Then
  TextBox1.Top = 200
  ......  
ElseIf ..... Then
   ........
  End If
End Sub
Muốn cho đẹp, cân đối thì rất mất thì giờ cho giao diện của form
 
Lần chỉnh sửa cuối:
Upvote 0
Có thể dùng 1 kích thước tương đối được. Giả sử Form thiết kế trên giao diện 800 x 600:

Gán 1 biến cho chiều rộng màn hình hiện thời và 1 biến cho tỷ lệ giữa độ rộng đó và độ rộng thiết kế:

MyWidth= Application.Width
MyRate= MyWidth / 800

Sau đó, mỗi control cần thay đổi kích thước và vị trí sẽ tính lại theo tỷ lệ MyRate.

Thí dụ khi thiết kế 1 control có kích thước 25 x 100, vị trí Left là 200, Top là 150. Ghi lại các chỉ số này sau đó tính lại trong sự kiện Form Open:

PHP:
With Me.Control1
.Height = 25 * MyRate
.Width = 100 * MyRate
.Left = 200 * MyRate
.Top = 150 * MyRate
End With

Kể cả kích thước bản thân cái Form cũng nhân lên tương ứng.
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom