-
Tùy biến kích thước Form
Noname > 27-08-10, 09:53 AM
Bạn hoaipnb vừa sưu tầm 1 đoạn code rất thú vị có thể tăng/ giảm kích thước form theo 1 hằng số cho trước trong table.
Tuy nhiên, vì thiếu thông tin nên bạn ấy chưa biết sử dụng thế nào.
Nhân đó mình đã chế biến lại thành 1 form có 2 nút cho phép tăng/giảm kích thước.
Đầu tiên, ta qua cửa sổ VBA thêm 1 module mới. Copy đoạn code sau vào:
Mã:Private Sub FormReSize(giatri As Single)
Me.InsideHeight = Me.InsideHeight / giatri
Me.InsideWidth = Me.InsideWidth / giatri
Dim ctrl As Control
For Each ctrl In Me.Controls
ctrl.Height = ctrl.Height / giatri
ctrl.Width = ctrl.Width / giatri
ctrl.Left = ctrl.Left / giatri
ctrl.Top = ctrl.Top / giatri
Next
Me.Repaint
End Sub
Sau đó, trong form, ta tạo hai nút tăng/ giảm kích thước, để cho nhanh mình để tên mặc định . Và gọi thủ tục trên :
Mã:Private Sub Command0_Click()
FormReSize 1.1
End Sub
Private Sub Command1_Click()
FormReSize 0.9
End Sub
Bạn có thể thay thế chỗ mình tô đỏ cho phù hợp với sở thích của mình. Mời Xem chương trình demo:
Download -
RE: Tùy biến kích thước Form
DoquangLam > 31-10-10, 11:03 PM
Noname và các bạn ! Cho mình hỏi tí nhé :
Khi khởi động forms có cách nào để forms tự động co dãn đầy theo kích thước của màn hình không (Chỉ những nội dung có trên forms thôi) Không dùng docmd.Maximize nhé. Cám ơn.
-
RE: Tùy biến kích thước Form
Noname > 31-10-10, 11:43 PM
Mình chưa có hàm nào lấy về độ phân giải màn hình nên chưa thể viết thủ thuật cho việc đó! :P
Cao thủ nào có thì share cho anh em nhé! -
RE: Tùy biến kích thước Form
Cafe Via He > 01-11-10, 01:16 PM
(31-10-10, 11:43 PM)Noname Đã viết: Mình chưa có hàm nào lấy về độ phân giải màn hình nên chưa thể viết thủ thuật cho việc đó! :P
Cao thủ nào có thì share cho anh em nhé!
Mã:Option Compare Database
Declare Function GetDesktopWindow Lib "user32" () As Long
Declare Function GetWindowRect Lib "user32" (ByVal hWnd As Long, rectangle As Rect) As Long
Type Rect
x1 As Long
y1 As Long
x2 As Long
y2 As Long
End Type
'*****************************************************************
' Xác định độ phân giải hiện tại .
'
' Kết quả thường là:
' 640 x 480
' 800 x 600
' 1024 x 768
' 1280 x 800
'*****************************************************************
Function GetScreenResolution() As String
Dim R As Rect
Dim hWnd As Long
Dim RetVal As Long
hWnd = GetDesktopWindow()
RetVal = GetWindowRect(hWnd, R)
ResWidth = CInt((R.x2 - R.x1))
ResHeight = CInt((R.y2 - R.y1))
GetScreenResolution = ResWidth & "x" & ResHeight
End Function -
RE: Tùy biến kích thước Form
pthamnb > 06-04-12, 08:56 AM
(01-11-10, 01:16 PM)Cafe Via He Đã viết:
(31-10-10, 11:43 PM)Noname Đã viết: Mình chưa có hàm nào lấy về độ phân giải màn hình nên chưa thể viết thủ thuật cho việc đó! :P
Cao thủ nào có thì share cho anh em nhé!
Mã:Option Compare Database
Declare Function GetDesktopWindow Lib "user32" () As Long
Declare Function GetWindowRect Lib "user32" (ByVal hWnd As Long, rectangle As Rect) As Long
Type Rect
x1 As Long
y1 As Long
x2 As Long
y2 As Long
End Type
'*****************************************************************
' Xác định độ phân giải hiện tại .
'
' Kết quả thường là:
' 640 x 480
' 800 x 600
' 1024 x 768
' 1280 x 800
'*****************************************************************
Function GetScreenResolution() As String
Dim R As Rect
Dim hWnd As Long
Dim RetVal As Long
hWnd = GetDesktopWindow()
RetVal = GetWindowRect(hWnd, R)
ResWidth = CInt((R.x2 - R.x1))
ResHeight = CInt((R.y2 - R.y1))
GetScreenResolution = ResWidth & "x" & ResHeight
End Function
cảm ơn bạn rất nhiều nhưng cho mình hỏi thêm tí nhé!
nếu mình có một đề bài mà người ta đã cho sẵn kích thước độ phân giải là 1024x768
thì mình vào đâu để đặt thuộc tính kích thước cho nó hay là vẫn phải lập trình???????? -
RE: Tùy biến kích thước Form
pthamnb > 06-04-12, 04:51 PM
hix. bài cần gấp mà ko ai trả lời! -
RE: Tùy biến kích thước Form
quyvt1993 > 26-11-12, 10:50 PM
(01-11-10, 01:16 PM)Cafe Via He Đã viết:
(31-10-10, 11:43 PM)Noname Đã viết: Mình chưa có hàm nào lấy về độ phân giải màn hình nên chưa thể viết thủ thuật cho việc đó! :P
Cao thủ nào có thì share cho anh em nhé!
Mã:Option Compare Database
Declare Function GetDesktopWindow Lib "user32" () As Long
Declare Function GetWindowRect Lib "user32" (ByVal hWnd As Long, rectangle As Rect) As Long
Type Rect
x1 As Long
y1 As Long
x2 As Long
y2 As Long
End Type
'*****************************************************************
' Xác định độ phân giải hiện tại .
'
' Kết quả thường là:
' 640 x 480
' 800 x 600
' 1024 x 768
' 1280 x 800
'*****************************************************************
Function GetScreenResolution() As String
Dim R As Rect
Dim hWnd As Long
Dim RetVal As Long
hWnd = GetDesktopWindow()
RetVal = GetWindowRect(hWnd, R)
ResWidth = CInt((R.x2 - R.x1))
ResHeight = CInt((R.y2 - R.y1))
GetScreenResolution = ResWidth & "x" & ResHeight
End Function
cho mình hỏi mình viết fun này vào Form_Load được không ? Mình có thử thì báo là : "Cannot define a Public User-denifed type whith in an Object module". Giúp mình với cafe via he -
RE: Tùy biến kích thước Form
thanhtruong > 03-08-15, 08:11 PM
đúng. cái này đưa vào sự kiện nào của from -
RE: Tùy biến kích thước Form
tranthanhan1962 > 04-08-15, 12:51 AM
(31-10-10, 11:03 PM)DoquangLam Đã viết: Noname và các bạn ! Cho mình hỏi tí nhé :
Khi khởi động forms có cách nào để forms tự động co dãn đầy theo kích thước của màn hình không (Chỉ những nội dung có trên forms thôi) Không dùng docmd.Maximize nhé. Cám ơn.
Câu hỏi của bạn hơi bị khó hiểu.
“Khi khởi động forms có cách nào để forms tự động co dãn đầy theo kích thước của màn hình không (Chỉ những nội dung có trên forms thôi) Không dùng docmd.Maximize nhé. Cám ơn.”
Bởi vì nếu “forms tự động co dãn đầy theo kích thước của màn hình” thì chính là Maximize.
Theo suy nghĩ của mình bạn muốn hỏi là cân chỉnh hay là co dãn các control theo kích thước Form. Bởi vì Form chỉ co dãn trong 2 trường hợp:
1. Khi form resize do bạn nắm biên form để kéo.
2.Khi form Maximize, nó sẽ bi resize khi windows access resize, trừ trường hợp thiết đặt pop up=Yes.
Và bạn nói “Chỉ những nội dung có trên forms thôi” thì mình nghĩ “nội dung” này chính là các “control” trên Form
Nếu đúng như vậy thì với 2 chú “InsideHeight” và “InsideWidth” của bạn Noname đã đủ để giải quyết yêu cầu của bạn mà không cần quan tâm nhiều lắm về độ phân giải màn hình (điều kiện là khi resize form nhỏ quá lúc đó chiều cao hoặc chiều ngang của control <0 sẽ gây ra lỗi )
Muốn được như vậy bạn phải xử lý kích thước các control bằng VBA theo tỷ lệ của InsideHeight và InsideWidth trong event Form_resize. Sau đó gọi sub Form_resize tại event Form_Open là xong.
Vấn đề là những control nào bạn muốn co dãn theo event Form_resize đều phải viết code cho Control.Left, Control.Top, Control.Width, Control.Width.Height, càng nhiều control viết càng mệt.
Ngoài ra các control chứa text nếu muốn đẹp bạn phải viết tỷ lệ cho Control.FontSize. Nên nhớ mỗi font khác nhau thì tỷ lệ này khác nhau, nếu xử lý sai tỷ lệ bạn có thể sẽ gặp cảnh khung không vừa font và việc mất chữ hoặc đứt đầu, đứt đuôi là chuyện bình thường.
Mình post lên file demo, thực ra file này cũng chỉ tương đối đầy đủ, nhưng với nhiều các xử lý cho các control trong demo có thể bạn sẽ nắm bắt phần nào cách thay đổi tỷ lệ control theo kích thức form.
Demo