สมัครสมาชิก
 

ต้องการให้ฟอร์มแสดงผลพอดีกับจอ



0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

04 ธ.ค. 61 , 12:06:32
อ่าน 151 ครั้ง

prajak

คือรบกวนสอบครับ ผมสร้างฟอร์มแต่ต้องการให้เวลาไปเปิดกับจอขนาดอื่่น ให้มันแสดงผลพอดีกับหน้าจอ ต้องทำไงครับ

 

04 ธ.ค. 61 , 15:18:30
ตอบกลับ #1

pitakchan

: ต้องการให้ฟอร์มแสดงผลพอดีกับจอ
« ตอบกลับ #1 เมื่อ: 04 ธ.ค. 61 , 15:18:30 »
ถ้าต้องการให้แบบฟอร์ม พอดีกับจอของ Users ผมว่าน่าจะต้องมีการ lock spec ความละเอียดนะครับ
เช่น ตั้งไว้ที่ 1,024x768 ทุกเครื่อง รวมทั้งเครื่องที่สร้างฟอร์มด้วย
เพราะถ้าหลายๆเครื่องมีความหลากหลายในค่าความละเอียด ก็ไม่น่าจะเต็มจอได้ทุกจอนะครับ
ไม่รู้ผมเข้าใจถูกป่าว
ถ้าผิด ท่านผู้รู้ช่วยแก้ด้วยนะครับ

 
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

04 ธ.ค. 61 , 15:32:38
ตอบกลับ #2

ปิ่นณรงค์

: ต้องการให้ฟอร์มแสดงผลพอดีกับจอ
« ตอบกลับ #2 เมื่อ: 04 ธ.ค. 61 , 15:32:38 »
ถ้าต้องการให้แบบฟอร์ม พอดีกับจอของ Users ผมว่าน่าจะต้องมีการ lock spec ความละเอียดนะครับ
เช่น ตั้งไว้ที่ 1,024x768 ทุกเครื่อง รวมทั้งเครื่องที่สร้างฟอร์มด้วย
เพราะถ้าหลายๆเครื่องมีความหลากหลายในค่าความละเอียด ก็ไม่น่าจะเต็มจอได้ทุกจอนะครับ
ไม่รู้ผมเข้าใจถูกป่าว
ถ้าผิด ท่านผู้รู้ช่วยแก้ด้วยนะครับ

จากแนวคิิดของท่านงั้น ก็สร้างคำสั่งให้ปรับขนาดหน้าจอปลายทางอัตโนมัติเมื่อเปิดฟอร์ม หรือ Event ที่ต้องการไปเลยดีไหม เช่น อยากตั้ง ขนาด 1,024x768 กับทุกเครื่อง ก็ให้เปิดฟอร์มมาแล้ว ขนาดจะเปลี่ยนตามเลย Code ตามนี้ครับ

Code นี้วางใน Mudule

โค๊ด: [Select]
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

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 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
Do
a = EnumDisplaySettings(0&, i&, DevM)
i = i + 1
Loop Until (a = False)
DevM.dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT
DevM.dmPelsWidth = iWidth
DevM.dmPelsHeight = iHeight
b = ChangeDisplaySettings(DevM, 0)
End Function
Function GetScreenResolution() As String
Dim R As RECT
Dim hWnd As Long
Dim RetVal As Long
hWnd = GetDesktopWindow()
RetVal = GetWindowRect(hWnd, R)
GetScreenResolution = (R.x2 - R.x1) & "x" & (R.y2 - R.y1)
End Function
Sub SetAutoScreen()
Call Change_Resolution(1024, 768) ' กำหนดขนาดตรงนี้
End Sub

ต่อมาไปกำหนด Event Form_Open

โค๊ด: [Select]
Private Sub Form_Open(Cancel As Integer)
Call SetAutoScreen
End Sub
« แก้ไขครั้งสุดท้าย: 04 ธ.ค. 61 , 15:40:06 โดย ปิ่นณรงค์ »
:love: :grin:
 
โพสต์นี้ได้รับคำขอบคุณจาก: prajak, pitakchan

04 ธ.ค. 61 , 15:57:20
ตอบกลับ #3

pitakchan

: ต้องการให้ฟอร์มแสดงผลพอดีกับจอ
« ตอบกลับ #3 เมื่อ: 04 ธ.ค. 61 , 15:57:20 »
ขอบคุณครับอาจารย์ปิ่นณรงค์
สุดยอดมากครับ

 
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

04 ธ.ค. 61 , 16:13:55
ตอบกลับ #4

prajak

: ต้องการให้ฟอร์มแสดงผลพอดีกับจอ
« ตอบกลับ #4 เมื่อ: 04 ธ.ค. 61 , 16:13:55 »
ต้องกำหนดทุกฟอร์มเลยหรือเปล่าครับ แล้วถ้าเราปิดหรือออกจากโปรแกรม ความละเอียดหน้าจอจะกลับมาที่ความละเอียดปกติมั้ยครับ

 

04 ธ.ค. 61 , 16:16:44
ตอบกลับ #5

ปิ่นณรงค์

: ต้องการให้ฟอร์มแสดงผลพอดีกับจอ
« ตอบกลับ #5 เมื่อ: 04 ธ.ค. 61 , 16:16:44 »
ต้องกำหนดทุกฟอร์มเลยหรือเปล่าครับ แล้วถ้าเราปิดหรือออกจากโปรแกรม ความละเอียดหน้าจอจะกลับมาที่ความละเอียดปกติมั้ยครับ

เฉพาะ Event Form_Open ของฟอร์มล๊อกอินคับ เพราะมันต้องแสดงขึ้นมาก่อนอยู่แล้ว
ส่วนความละเอียดหน้าจอ ค่าปกติต้องดูว่ากำหนดที่เท่าไร ผมจะได้เพิ่ม Code คืนค่าปกติ เมื่อปิดโปรแกรม


แต่ถ้าเราจะให้มัน Shrinker หรือ Stretcher เดี่ยวขอลองทำดูก่อนนะครับ ได้ยังไงเดี่ยวมาอัพเดทผมว่าน่าจะพอทำได้อยู่คับ

« แก้ไขครั้งสุดท้าย: 04 ธ.ค. 61 , 16:33:14 โดย ปิ่นณรงค์ »
:love: :grin:
 
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

04 ธ.ค. 61 , 17:31:42
ตอบกลับ #6

ปิ่นณรงค์

: ต้องการให้ฟอร์มแสดงผลพอดีกับจอ
« ตอบกลับ #6 เมื่อ: 04 ธ.ค. 61 , 17:31:42 »
โอเคได้ละครับ พอดีไปค้นหาวิธีจากเว็บนอกได้มาประมาณนี้ คือ
ให้เราสร้างฟอร์มตามที่ต้องการโดยเราจะใช้ ความละเอียดจากเครื่องหลัก เพื่อใช้อ้างอิงว่าค่าเริ่มต้นของ form นั้นได้สร้างจากค่าความละเอียดเท่าไร
จากตัวอย่างผมได้ลองไปตั้งค่าความละเอียด 800x600 แล้วลองสร้างฟอร์มให้ได้ขนาดพอดีครับหน้าจอที่ต้องการแสดงครับ

วิธีการทดสอบ
1.ให้ลองตั้งค่าความละเอียด 800x600 แล้วลองเปิดฟอร์มดู (เพื่อดูว่าฟอร์มที่สร้างมาตอนแรกเป็นอย่างไร) ถ้าคิดว่าตำแหน่งจัดวางโอเคแล้วก็เรียบร้อย

2.ให้ลองตั้งค่าความละเอียด ตามปกติของเครื่องนั้นเลย แล้วลองเปิดฟอร์มดูเพื่อดูความเปลี่ยนแปลงครับ ฟอร์มและตัวคอนโทรลที่เปิดขึ้นมา จะขนาดใหญ่หรือเล็กตามขนาดของจอปลายทางที่เราต้องการแสดงครับจากตัวอย่างเครื่องผมปรับได้สุดแค่นี้ครับ 1366*768  pixels


ถ้าแบบนี้โอเคเดี่ยวจะอธิบายการนำ Code ไปประยุกต์ใช้อีกทีคับ ส่วนตัวอย่าง Code โหลดได้ด้านล่างคับ มีทั้งแบบ 64Bit และ 32Bit ครับ
« แก้ไขครั้งสุดท้าย: 07 ธ.ค. 61 , 08:26:10 โดย ปิ่นณรงค์ »
:love: :grin:
 
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

05 ธ.ค. 61 , 08:40:36
ตอบกลับ #7

prajak

: ต้องการให้ฟอร์มแสดงผลพอดีกับจอ
« ตอบกลับ #7 เมื่อ: 05 ธ.ค. 61 , 08:40:36 »
ไฟล์ที่แนบมาแตกไฟล์ไม่ได้ครับคุณปิ่นณรงค์

 

05 ธ.ค. 61 , 11:17:25
ตอบกลับ #8

ปิ่นณรงค์

: ต้องการให้ฟอร์มแสดงผลพอดีกับจอ
« ตอบกลับ #8 เมื่อ: 05 ธ.ค. 61 , 11:17:25 »
ไฟล์ที่แนบมาแตกไฟล์ไม่ได้ครับคุณปิ่นณรงค์

ปกติผม แตกไฟล์กับ 7zip ครับลองดูอันใหม่ครับว่าได้ไหม
:love: :grin:
 
โพสต์นี้ได้รับคำขอบคุณจาก: prajak, aek

06 ธ.ค. 61 , 19:48:23
ตอบกลับ #9

aek

: ต้องการให้ฟอร์มแสดงผลพอดีกับจอ
« ตอบกลับ #9 เมื่อ: 06 ธ.ค. 61 , 19:48:23 »
กำลังอยากได้อยู่พอดี ขอบคุณครับ :grin: :grin: :grin:

 


บอร์ดเรียนรู้ Access สำหรับคนไทย