Đánh giá chủ đề:
  • 3 Votes - 4.67 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Tùy biến kích thước Form
#1



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
Chữ ký của Noname 020
ღღღღღTài sản của Noname (View All Items) ღღღღღ
Reply
Những người đã cảm ơn Cafe Via He , Minh Tiên , thanhthienhg , ongke0711
#2
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.
Chữ ký của DoquangLam Hãy chia sẻ kinh nghiệm cùng mình trên ThuThuatAccess nhé! Chúc vui vẻ rose
Reply
Những người đã cảm ơn
#3
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é! 51_51
Chữ ký của Noname 020
ღღღღღTài sản của Noname (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#4
(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é! 51_51

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
Chữ ký của Cafe Via He Ở nhờ nhà mẹ mình big green
ღღღღღTài sản của Cafe Via He (View All Items) ღღღღღ
Reply
Những người đã cảm ơn Noname , haquocquan , pthamnb , khanhduycsgt , thuc1605 , Minh Tiên
#5
(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é! 51_51

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????????
Chữ ký của pthamnb Xin chào, mình là pthamnb, Tham gia http://thuthuataccess.com/forum từ ngày 28-03 -12.
rất mong trao đổi với các bạn: ptham_nb91@yahoo.com
pthamnb91@gmail.com
Reply
Những người đã cảm ơn
#6
hix. bài cần gấp mà ko ai trả lời!040
Chữ ký của pthamnb Xin chào, mình là pthamnb, Tham gia http://thuthuataccess.com/forum từ ngày 28-03 -12.
rất mong trao đổi với các bạn: ptham_nb91@yahoo.com
pthamnb91@gmail.com
Reply
Những người đã cảm ơn
#7
(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é! 51_51

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
Chữ ký của quyvt1993 Xin chào, mình là quyvt1993, Tham gia http://thuthuataccess.com/forum từ ngày 30-09 -12.
Reply
Những người đã cảm ơn
#8
đúng. cái này đưa vào sự kiện nào của from
Chữ ký của thanhtruong Xin chào, mình là thanhtruong, Tham gia http://thuthuataccess.com/forum từ ngày 23-06 -14.
Reply
Những người đã cảm ơn
#9
(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
Chữ ký của tranthanhan1962 Kết quả cuối cùng của một đời người, không phải bạn có được bao nhiêu tiền bạc, tài sản. Mà bạn còn bao nhiêu người bạn  thumbs up
ღღღღღTài sản của tranthanhan1962 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn thanhtruong


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
  [Hỏi] Refresh Form và tiếp tục hoạt động Godspear 2 84 08-12-16, 12:48 PM
Bài mới nhất: Godspear
  [Hỏi] Cách thêm dữ liệu vào form Main_Sub NganNguyen 1 39 06-12-16, 02:23 AM
Bài mới nhất: maidinhdan
  Tự động hiện Form khi loading hết thời gian ChiMai 1 49 02-12-16, 08:59 PM
Bài mới nhất: ongke0711
Photo [Hỏi] Mở Form trên access 2007 báo lỗi jason 5 195 22-11-16, 09:23 AM
Bài mới nhất: jason
  Query hiện lên trên form? feeling 4 167 09-11-16, 09:49 PM
Bài mới nhất: toancvp

Chuyển nhanh:


User(s) browsing this thread: 1 Guest(s)
Diễn Đàn Thơ Văn Thi Ẩm Lâu|Nhà Hàng Sông Thơ