Nguyen SVN > 26-09-19, 07:07 PM
tranthanhan1962 > 27-09-19, 07:54 PM
Private Sub Form_Load()
Me.Move(InsideWidth/4, InsideHight/4, InsideWidth/2, InsideHight/2)
End Sub
Cuong Servenet > 01-10-19, 09:14 AM
(27-09-19, 07:54 PM)tranthanhan1962 Đã viết: Vấn đề của bạn cũng là vần đề quan tâm của nhiều người. Tất nhiên là làm được, chính thức là xử lý form tự động điều chỉnh kích thước form với độ phân giải monitor (màn hình) còn chuyện lớn nhỏ không ảnh hưởng đến tỷ lệ form. Ví dụ bạn tạo một form vừa đầy màn hình laptop 13 inch (có độ phân giải 1920x1080) khi chuyển qua màn hình tivi 50 inch (có độ phân giải 1920x1080), cái form đó khi mở vẫn vừa đầy màn hình, nhưng khi đưa qua một máy tính có monitor 17 inch (có độ phân giải 1600x900) bạn sẽ thấy cái form kia trở nên rất lớn và màn hình không đủ chỗ cho nó, như vậy đối với form độ phân giải càng lớn thì màn hình càng to còn số đo lớn hay nhỏ không ảnh hưởng với nó. Tôi cũng có vài đoạn code để xử lý màn hình nhưng nó chuyên biệt và quá phức tạp nên không đưa lên đây làm demo cho bạn được nhưng có thể hỗ trợ bạn qua một số lý thuyết như sau:
Để giải quyết điều này trong VBA access có các đối tượng.
Chiều rộng của màn hình = InsideWidth
Chiều cao màn hình : InsideHight
Vị trí form trên màn hình : Me.Move(left, top, width, height)
Bạn phải bỏ thói quen thiết đặt độ dài, rộng trên properties mà phải xử lý trên tỷ lệ màn hình.
Ví dụ: bạn muốn tạo một fom có chiều rộng = 1/2 chiều rộng màn hình và nằm giữa màn hình thì tại event Form_Load phải đưa code vào
Mã:Private Sub Form_Load()
Me.Move(InsideWidth/4, InsideHight/4, InsideWidth/2, InsideHight/2)
End Sub
Ngoài ra nếu trên form còn form header, form footer bạn phải xử lý tỉ lệ form header, form footer, detail theo InsideHight.
Chưa xong, bạn vẫn còn xử lý các control trên form.
Dưới đây là một demo
http://www.mediafire.com/file/4c63drp9n9...accdb/file
Nên nhớ VBA này không xử lý được combobox, ngoài chuyện này còn một việc nữa là xử lý tỷ lệ font chữ trên các testbox, hình như cái này đã có một bạn post lên forum, bạn có thể tìm thấy.
Cuối cùng, để hoàn chỉnh bạn phải xử lý cho tất cả các form trong ứng dụng của mình, Và khi đó bạn sẽ có một ứng dụng chạy ì ạch mà đôi khi tác giả cũng không muốn sử dụng. Vì vậy, nếu cần thiết người ta chỉ xử lý một, 2 form chứ không ai viết tất cả các form, giải pháp tốt nhất cho nhiều máy là sẽ lựa một độ phân giải thấp để thiết kế các form khi đó gần như máy nào cũng có thể sử dụng được, tất nhiên với giải pháp đó nếu bạn sử dụng trên một máy laptop có màn hình nhỏ và độ phân giải cao (kiểu 13 inch full HD) thì chữ hiển thị sẽ rất nhỏ.
tranthanhan1962 > 01-10-19, 11:18 AM
Forms![Mainform]![SubForm].Form![Ctrl1].Top = X1/Y1*(KhungSubForm.Height)
Forms![Mainform]![SubForm].Form![Ctrl1].Left = X2/Y2*(KhungSubForm.Width)
Forms![Mainform]![SubForm].Form![Ctrl1].Height = X3/Y3*(KhungSubForm.Height)
Forms![Mainform]![SubForm].Form![Ctrl1].Width = X4/Y4*(KhungSubForm.Width)
Forms![Mainform]![SubForm].Form![Ctrl2].Top = X5/Y5*(KhungSubForm.Height)
...
Me.Repaint
Cuong Servenet > 02-10-19, 07:50 AM
(01-10-19, 11:18 AM)tranthanhan1962 Đã viết: Subform dễ hơn form bạn à. Form thì bạn còn cân ở màn hình còn subform có đầy đủ mốc để xử lý.
Ví dụ:
ta có cái khung của Subform tên là KhungSubForm (để phân biệt tên Subform và Khung chứa subform trên mainForm), trong subform có Ctrl1, Ctrl2... Ta có KhungSubform.hight, KhungSuform.width. Mấy thứ còn lại thì cứ xử lý.
Đưa code vào Mainform: Form_Load() hoặc Form_Resize() tùy trường hợp.
Các giá trị X1/Y1, X2/Y2...là tỉ lệ xử lý cân theo cái khung của subform. Muốn chắc ăn hơn ở dòng cuối code thêm một lệnhMã:Forms![Mainform]![SubForm].Form![Ctrl1].Top = X1/Y1*(KhungSubForm.Height)
Forms![Mainform]![SubForm].Form![Ctrl1].Left = X2/Y2*(KhungSubForm.Width)
Forms![Mainform]![SubForm].Form![Ctrl1].Height = X3/Y3*(KhungSubForm.Height)
Forms![Mainform]![SubForm].Form![Ctrl1].Width = X4/Y4*(KhungSubForm.Width)
Forms![Mainform]![SubForm].Form![Ctrl2].Top = X5/Y5*(KhungSubForm.Height)
...
Vậy là xong. Tất nhiên phải xử lý KhungSubform theo MainFrom trước khi xử lý phần subform nàyMã:Me.Repaint
tranthanhan1962 > 02-10-19, 08:08 AM
(02-10-19, 07:50 AM)Cuong Servenet Đã viết: Y1 thì X1 vs Y1 la gi vậy a?Là tỉ lệ xử lý cân theo cái khung của subform.
Nguyen SVN > 04-10-19, 12:19 PM
(02-10-19, 08:08 AM)tranthanhan1962 Đã viết:(02-10-19, 07:50 AM)Cuong Servenet Đã viết: Y1 thì X1 vs Y1 la gi vậy a?Là tỉ lệ xử lý cân theo cái khung của subform.
Ví dụ khi KhungSubform có (Hight=1000, Width=500) Và Ctrl1 (Top=10, Left=20, Hight=50, Width=100) thì
Forms![Mainform]![SubForm].Form![Ctrl1].Top = 10/1000*(KhungSubForm.Height)
Forms![Mainform]![SubForm].Form![Ctrl1].Left = 20/500*(KhungSubForm.Width)
Forms![Mainform]![SubForm].Form![Ctrl1].Height = 50/1000*(KhungSubForm.Height)
Forms![Mainform]![SubForm].Form![Ctrl1].Width = 100/500*(KhungSubForm.Width)
...
Khi KhungSubform có thay đổi như thế nào thì các control cũng thay đổi theo một tỷ lệ nhất định. (tất nhiên phải thêm code xử lý font nếu nó là textbox)
tranthanhan1962 > 04-10-19, 03:55 PM