ปรับขนาด Form ให้เข้ากับขนาดของหน้าจอแต่ละเครื่อง
กระทู้เก่าบอร์ด อ.Yeadram

 15,289   8
URL.หัวข้อ / URL
ปรับขนาด Form ให้เข้ากับขนาดของหน้าจอแต่ละเครื่อง

รบกวนด้วยครับ..ท่านใดพอจะทราบวิธีตั้งค่าให้ Form ที่สร้างขึ้นมีขนาดเท่าหน้าจอของผู้ใช้งานโดยอัตโนมัติ เนื่องจากที่สำนักงานมี จอคอมหลายขนาด ทำให้formที่สร้างขึ้นมาเพือป้อนข้อมูล มีขนาดเกินความกว้างของหน้าจอ ของพนักงานที่มีจอแคบ แต่พอดีกับของพนักงานที่มีจอใหญ่ ???
อยากให้ปรับขนาดอัตโนมัติ จะทำอย่างไรดีครับ?

ขอบคุณครับ

8 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R03910
2 @R03916
หลักการ
1 เก็บ screen resolution เดิม ไว้ที่ตัวแปร (Get Screen Resolution)
2 เปลี่ยน screen resolution เป็น resolution ที่พอดีกับจอ
   (Change Scren Resolution)
3 คืนค่า screen resolution ตามข้อ 1 (Change Scren Resolution)

ค้นคำในวงเล็บจาก google ต่อท้ายด้วย VBA จะได้เจาะจงมากขึ้น
3 @R03985
ต่อให้หน่อยได้ใหมครับ ยังทำไม่ได้เลย
4 @R03986
ทำเองไม่เป็นหรอกนะครับแต่อาศัยตัวอย่าง จากที่นี่ มาลองปรับใช้ดู
หากเป็น Ms97 ดูจะไม่ค่อยมีปัญหา
แต่ถ้าเป็น XP หรือ 2003 จะมีปัญหากับ Subform อยู่

5 @R03987
วาง modGetResolution ที่ module

Global scrWidth As Single
Global scrHeight As Single

Public Declare Function GetSystemMetrics Lib _
"User32" (ByVal nIndex As Long) As Long
Public Const SM_CXSCREEN = 0
Public Const SM_CYSCREEN = 1

Public Function screenHeight() As Long
screenHeight = GetSystemMetrics(SM_CYSCREEN)
End Function

Public Function screenWidth() As Long
screenWidth = GetSystemMetrics(SM_CXSCREEN)
End Function

Public Function Change_Resolution(iWidth As Single, iHeight As Single)

Dim DevM As DEVMODE
Dim a As Boolean
Dim i As Long
Dim b As Long

i = 0

'Enumerate settings
Do
a = EnumDisplaySettings(0&, i&, DevM)
i = i + 1
Loop Until (a = False)

'Change settings
DevM.dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT

DevM.dmPelsWidth = iWidth
DevM.dmPelsHeight = iHeight

b = ChangeDisplaySettings(DevM, 0)

End Function

ที่ Form
Private Sub Form_Load()
        scrWidth = screenWidth
        scrHeight = screenHeight
        Call Change_Resolution(800, 600)
End sub

Private Sub Form_Unload(Cancel As Integer)
      Call Change_Resolution(scrWidth, scrHeight)    
      DoCmd.Quit
End Sub

ลองทดสอบดูก่อนนะครับว่าติดปัญหาตรงไหน ทำแบบย่อ ถ้าเอามาทั้งหมดมันยาวครับ
6 @R03988
เพิ่มเติมข้อมูลครับ copy มาไม่หมด

วางไว้ที่ module ด้วยกัน

Type RECT
x1 As Long
y1 As Long
x2 As Long
y2 As Long
End Type

' NOTE: The following declare statements are case sensitive.

Declare Function GetDesktopWindow Lib "User32" () As Long

Declare Function GetWindowRect Lib "User32" _
(ByVal hWnd As Long, rectangle As RECT) As Long
' 32-bit API declaration

Private Declare Function ChangeDisplaySettings Lib "User32" Alias _
"ChangeDisplaySettingsA" (lpDevMode As Any, ByVal dwFlags As Long) As Long

Private Declare Function EnumDisplaySettings Lib "User32" Alias _
"EnumDisplaySettingsA" (ByVal lpszDeviceName As Long, ByVal iModeNum As _
Long, lpDevMode As Any) As Boolean

Const DM_PELSWIDTH = &H80000
Const DM_PELSHEIGHT = &H100000
Const CCFORMNAME = 32
Const CCDEVICENAME = 32

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
7 @R03989
เพิ่มเติมหน่อยครับคุณ ditasilk
เอาแบบเต็มๆเลยได้ใหมครับ

ตั้งแต่

Module ชื่อ อะไร?

ที่เหลือCopy วางได้เลยใช่ใหม?

ต้องตั้งค่าอะไรที่ form รึป่าว?

ขอบคุณ ครับ
8 @R03996
วางที่ module ชื่อ modGetResolution

Global scrWidth As Single
Global scrHeight As Single

Type RECT
x1 As Long
y1 As Long
x2 As Long
y2 As Long
End Type


Declare Function GetDesktopWindow Lib "User32" () As Long

Declare Function GetWindowRect Lib "User32" _
(ByVal hWnd As Long, rectangle As RECT) As Long
' 32-bit API declaration

Private Declare Function ChangeDisplaySettings Lib "User32" Alias _
"ChangeDisplaySettingsA" (lpDevMode As Any, ByVal dwFlags As Long) As Long

Private Declare Function EnumDisplaySettings Lib "User32" Alias _
"EnumDisplaySettingsA" (ByVal lpszDeviceName As Long, ByVal iModeNum As _
Long, lpDevMode As Any) As Boolean

Const DM_PELSWIDTH = &H80000
Const DM_PELSHEIGHT = &H100000
Const CCFORMNAME = 32
Const CCDEVICENAME = 32

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

Public Declare Function GetSystemMetrics Lib _
"User32" (ByVal nIndex As Long) As Long
Public Const SM_CXSCREEN = 0
Public Const SM_CYSCREEN = 1

Public Function screenHeight() As Long
screenHeight = GetSystemMetrics(SM_CYSCREEN)
End Function

Public Function screenWidth() As Long
screenWidth = GetSystemMetrics(SM_CXSCREEN)
End Function

Public Function Change_Resolution(iWidth As Single, iHeight As Single)

Dim DevM As DEVMODE
Dim a As Boolean
Dim i As Long
Dim b As Long

i = 0

'Enumerate settings
Do
a = EnumDisplaySettings(0&, i&, DevM)
i = i + 1
Loop Until (a = False)

'Change settings
DevM.dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT

DevM.dmPelsWidth = iWidth
DevM.dmPelsHeight = iHeight

b = ChangeDisplaySettings(DevM, 0)

End Function



ที่ Form เริ่มต้น

Private Sub Form_Load()
   'เก็บค่า resolution ที่ใช้งานอยู่
        scrWidth = screenWidth
        scrHeight = screenHeight
    'เปลี่ยน resolution เป็น resolution ที่ Full screen
    'สมมติเป็น 800*600
        Call Change_Resolution(800, 600)
End sub

Private Sub Form_Unload(Cancel As Integer)
     'เปลี่ยนค่า resolution กลับเป็นค่าเริ่มต้น ตอนก่อนเปิดโปรแกรม
      Call Change_Resolution(scrWidth, scrHeight)     
      DoCmd.Quit
End Sub
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.2714s