กระทู้เก่าบอร์ด อ.Yeadram
        
           15,884   8		  
          
					  
		    URL.หัวข้อ / 
		    URL
        
        ปรับขนาด Form ให้เข้ากับขนาดของหน้าจอแต่ละเครื่อง      
    
      รบกวนด้วยครับ..ท่านใดพอจะทราบวิธีตั้งค่าให้ Form ที่สร้างขึ้นมีขนาดเท่าหน้าจอของผู้ใช้งานโดยอัตโนมัติ เนื่องจากที่สำนักงานมี จอคอมหลายขนาด ทำให้formที่สร้างขึ้นมาเพือป้อนข้อมูล มีขนาดเกินความกว้างของหน้าจอ ของพนักงานที่มีจอแคบ แต่พอดีกับของพนักงานที่มีจอใหญ่ ???
อยากให้ปรับขนาดอัตโนมัติ จะทำอย่างไรดีครับ?
 
ขอบคุณครับ
    
    
  อยากให้ปรับขนาดอัตโนมัติ จะทำอย่างไรดีครับ?
ขอบคุณครับ
				8 Reply in this Topic. Dispaly 1  pages and you are on page number 1 
				
        
    1 @R03910    
        
  
      ลองอ่านที่นี่ครับ http://www.utteraccess.com/forums/showflat.php?Cat=&Board=83&Number=1350793&Zf=f83&Zw=resolution&Zg=0&Zl=c&Main=1350793&Search=true&where=&Zu=&Zd=l&Zn=&Zt=25&Zs=a&Zy=#Post1350793&Zp=    
    
  
        
    2 @R03916    
        
  
      หลักการ
1 เก็บ screen resolution เดิม ไว้ที่ตัวแปร (Get Screen Resolution)
2 เปลี่ยน screen resolution เป็น resolution ที่พอดีกับจอ
(Change Scren Resolution)
3 คืนค่า screen resolution ตามข้อ 1 (Change Scren Resolution)
ค้นคำในวงเล็บจาก google ต่อท้ายด้วย VBA จะได้เจาะจงมากขึ้น
    
  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 อยู่
    
    
  หากเป็น 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
ลองทดสอบดูก่อนนะครับว่าติดปัญหาตรงไหน ทำแบบย่อ ถ้าเอามาทั้งหมดมันยาวครับ
    
  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
    
  วางไว้ที่ 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 รึป่าว?
ขอบคุณ ครับ
    
  เอาแบบเต็มๆเลยได้ใหมครับ
ตั้งแต่
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
    
    
  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
      Time: 0.5070s
    
      
		