Thông báo

Collapse
No announcement yet.

Làm sao tự động điều chỉnh độ phân giải màn hình ?

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Làm sao tự động điều chỉnh độ phân giải màn hình ?

    Mình đang gặp vấn đề khi viết giao diện trên VB6 : mình viết giao diện trên độ phân giải 800 x 600 nhưng khi chuyển sang chế độ phân giải 1024 x 768 thì giao diện bị thu nhỏ lại. Các bạn giúp minh với. Thanks

  • #2
    Để điều chỉnh giao diện không phụ thuộc vào độ phân giải của màn hình thì các thuộc tính Position của các điều khiển này phải tùy biến theo chiều dài và chiều rộng của màn hình. Do đó bạn cần thiết lập chiều dài, rộng, vị trí của các điều khiển ngay trong các hàm khởi tạo form_load() đó. ở đây tôi không nhớ rõ nhưng bạn dùng các hàm Screen.width và Screen.length thi phải( để mình về tra để trả lời bạn chi tiết hơn).
    Do đó bạn phải viết tương đối nhiều code đó.

    Tóm lại thì nếu viết chương trình thì bạn nên chọn độ phân giải cho phù hợp với mọi người dùng nhất đỡ phải viết những cái này.
    Technical sale at WT Microelectronics S'pore
    Hỗ trợ dự án sử dụng các hãng Texas Instrument, STMicro, Freescale, Fairchild, International Rectifier, Ublox, Lumiled, Maxim
    Liên hệ: 0915.560.511 hoặc ngo.haibac@wtmec.com

    Comment


    • #3
      Tặng cậu đoạn code thay đổi độ phân giải màn hình nhé:
      Option Explicit
      Const WM_DISPLAYCHANGE = &H7E
      Const HWND_BROADCAST = &HFFFF&
      Const EWX_LOGOFF = 0
      Const EWX_SHUTDOWN = 1
      Const EWX_REBOOT = 2
      Const EWX_FORCE = 4
      Const CCDEVICENAME = 32
      Const CCFORMNAME = 32
      Const DM_BITSPERPEL = &H40000
      Const DM_PELSWIDTH = &H80000
      Const DM_PELSHEIGHT = &H100000
      Const CDS_UPDATEREGISTRY = &H1
      Const CDS_TEST = &H4
      Const DISP_CHANGE_SUCCESSFUL = 0
      Const DISP_CHANGE_RESTART = 1
      Const BITSPIXEL = 12
      Private 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
      Private Declare Function EnumDisplaySettings Lib "user32" Alias "EnumDisplaySettingsA" (ByVal lpszDeviceName As Long, ByVal iModeNum As Long, lpDevMode As Any) As Boolean
      Private Declare Function ChangeDisplaySettings Lib "user32" Alias "ChangeDisplaySettingsA" (lpDevMode As Any, ByVal dwFlags As Long) As Long
      Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
      Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal nIndex As Long) As Long
      Private Declare Function CreateDC Lib "gdi32" Alias "CreateDCA" (ByVal lpDriverName As String, ByVal lpDeviceName As String, ByVal lpOutput As String, ByVal lpInitData As Any) As Long
      Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long
      Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
      Dim OldX As Long, OldY As Long, nDC As Long
      Sub ChangeRes(X As Long, Y As Long, Bits As Long)
      Dim DevM As DEVMODE, ScInfo As Long, erg As Long, an As VbMsgBoxResult
      'Get the info into DevM
      erg = EnumDisplaySettings(0&, 0&, DevM)
      'This is what we're going to change
      DevM.dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT Or DM_BITSPERPEL
      DevM.dmPelsWidth = X 'ScreenWidth
      DevM.dmPelsHeight = Y 'ScreenHeight
      DevM.dmBitsPerPel = Bits '(can be 8, 16, 24, 32 or even 4)
      'Now change the display and check if possible
      erg = ChangeDisplaySettings(DevM, CDS_TEST)
      'Check if succesfull
      Select Case erg&
      Case DISP_CHANGE_RESTART
      an = MsgBox("You've to reboot", vbYesNo + vbSystemModal, "Info")
      If an = vbYes Then
      erg& = ExitWindowsEx(EWX_REBOOT, 0&)
      End If
      Case DISP_CHANGE_SUCCESSFUL
      erg = ChangeDisplaySettings(DevM, CDS_UPDATEREGISTRY)
      ScInfo = Y * 2 ^ 16 + X
      'Notify all the windows of the screen resolution change
      SendMessage HWND_BROADCAST, WM_DISPLAYCHANGE, ByVal Bits, ByVal ScInfo
      MsgBox "Everything's ok", vbOKOnly + vbSystemModal, "It worked!"
      Case Else
      MsgBox "Mode not supported", vbOKOnly + vbSystemModal, "Error"
      End Select
      End Sub
      Private Sub Form_Load()
      Dim nDC As Long
      'retrieve the screen's resolution
      OldX = Screen.Width / Screen.TwipsPerPixelX
      OldY = Screen.Height / Screen.TwipsPerPixelY
      'Create a device context, compatible with the screen
      nDC = CreateDC("DISPLAY", vbNullString, vbNullString, ByVal 0&)
      'Change the screen's resolution
      ChangeRes 640, 480, GetDeviceCaps(nDC, BITSPIXEL)
      End Sub
      Private Sub Form_Unload(Cancel As Integer)
      'restore the screen resolution
      ChangeRes OldX, OldY, GetDeviceCaps(nDC, BITSPIXEL)
      'delete our device context
      DeleteDC nDC
      End Sub
      |

      Comment

      Về tác giả

      Collapse

      phamhoangdun Tìm hiểu thêm về phamhoangdun

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

      Collapse

      Đang tải...
      X