Thủ Thuật Access

Phiên bản đầy đủ: Căn Chỉnh Form Tự Động
Bạn đang xem phiên bản rút gọn. Bạn có thể xem bản đầy đủ.
Chào mọi người!
Em có thiết kế 1 unbound form đặt tên là F_Main để khi mở chương trình Access, form này sẽ luôn hiển thị thường trực. Trên F_Main, em có gắn Menu Bar do em thiết kế (Bao gồm các menu: Danh Mục Hàng Hóa, Danh mục Khách hàng, Danh mục Nhân viên, Nhập Hàng, Xuất hàng, In,.........).
Em muốn là khi mở F_Main ở bất kỳ máy nào thì nó tự động tinh chỉnh lại cho vừa màn hình với máy tính đó, và lúc này trên F_Main sẽ ở chế độ full màn hình, trên đầu F_Main có gắn Menu Bar (nghĩa là: vẫn còn hiển thị Menu Bar do mình thiết kế, các nút: Max, Min, Restore, Close sẽ không còn).
Em đã làm được tới đây: 
Mã:
Private Sub Form_Open(Cancel As Integer)
   CommandBars("menu bar").Enabled = True
   ' Laáy ñoä phaân giaûi maøn hình & ñoåi ra twips. 1 twip = 1/15 pixels; 1/20 point; 1/567 cm ; 1/1440 inch
   TwipResW = GetSystemMetrics(0) * 14.948
   TwipResH = GetSystemMetrics(1) * 14.435
   DoCmd.MoveSize 0, 0, TwipResW - 100, TwipResH - 100
   Me.Width = Me.WindowWidth
   Me.Detail.Height = Me.WindowHeight
End Sub

Tuy nhiên, khi qua máy khác, em sẽ phải vào lại module sửa lại code rất cực. Cụ thể là sửa lại 2 dòng: 
Mã:
TwipResW = GetSystemMetrics(0) * 14.948

  TwipResH = GetSystemMetrics(1) * 14.435
Mong mọi người xem thử, liệu có cách nào mà mình không cần vào sửa mà nó tự động canh chỉnh cho mình không.

Xin chân thành cảm ơn!
Form có thuộc tính Maximize sao bạn ko sử dụng.
Ở sựsự kiện Form_Open
Docmd.Maximize
(21-12-17, 04:49 PM)ongke0711 Đã viết: [ -> ]Form có thuộc tính Maximize sao bạn ko sử dụng.
Ở sựsự kiện Form_Open
Docmd.Maximize

E có thử làm theo cách của a, nhưng Form xuất hiện nút Restore Window ạ (nút vuông Restore Window bên phải phía trên Form). Nếu e ấn vô nút Restore Window đó, Form sẽ bị trôi. Có cách nào cho nút Restore Window đó mất luôn không a?
Thay thế lệnh Docmd.Maximize và vô hiệu hóa nút Restore của Window.
----------------------------------------------------------------------------------------------------------------------

Sau đây là hàm tự tạo dùng thay thế lệnh Docmd.Maximize khi bạn muốn Form sẽ bung toàn màn hình khi khởi động và vượt qua cái phiền toái là vẫn còn nút Restore trên Form lỡ khi người dùng bấm vào thì Form sẽ thu lại như ban đầu thiết kế.
- Copy code sau vào module: 

Mã PHP:
Option Compare Database
Option Explicit

Type Rect
   x1 
As Long
   y1 
As Long
   x2 
As Long
   y2 
As Long
End Type
Declare Function IsZoomed Lib "user32" (ByVal hWnd As Long) As Long
Declare Function ShowWindow Lib "user32" (ByVal hWnd As LongByVal _
   nCmdShow 
As Long) As Long
Declare Function MoveWindow Lib "user32" (ByVal hWnd As LongByVal _
   X 
As LongByVal Y As LongByVal nWidth As LongByVal nHeight _
   As Long
ByVal bRepaint As Long) As Long
Declare Function GetParent Lib "user32" (ByVal hWnd As Long) As Long
'Use following instead of GetWindowRect'
Declare Function GetClientRect Lib "user32" (ByVal hWnd As LonglpRect _
   As Rect
) As Long

Public Const SW_MAXIMIZE 3
Public Const SW_SHOWNORMAL 1

Sub MaximizeRestoredForm
(As Form)
   Dim MDIRect As Rect
   
' If the form is maximized, restore it.
   If IsZoomed(F.hWnd) <> 0 Then
       ShowWindow F.hWnd, SW_SHOWNORMAL
   End If
   ' 
Get the screen coordinates and window size of the
   
' MDIClient area.
   '
This is the line which is different
   GetClientRect GetParent
(F.hWnd), MDIRect
   
' Move the form to the upper left corner of the MDIClient
   ' 
window (0,0) and size it to the same size as the
   
' MDIClient window.
   MoveWindow F.hWnd, 0, 0, MDIRect.x2 - MDIRect.x1, MDIRect.y2 - MDIRect.y1, True
End Sub 

- Form nào cần chạy toàn màn hình thì thiết lập sự kiện Form_Load cho nó như bên dưới.

Mã PHP:
Private Sub Form_Load()
   MaximizeRestoredForm Me
End Sub 
(21-12-17, 08:24 PM)ongke0711 Đã viết: [ -> ]Thay thế lệnh Docmd.Maximize và vô hiệu hóa nút Restore của Window.
----------------------------------------------------------------------------------------------------------------------

Sau đây là hàm tự tạo dùng thay thế lệnh Docmd.Maximize khi bạn muốn Form sẽ bung toàn màn hình khi khởi động và vượt qua cái phiền toái là vẫn còn nút Restore trên Form lỡ khi người dùng bấm vào thì Form sẽ thu lại như ban đầu thiết kế.
- Copy code sau vào module: 

Mã PHP:
Option Compare Database
Option Explicit

Type Rect
   x1 
As Long
   y1 
As Long
   x2 
As Long
   y2 
As Long
End Type
Declare Function IsZoomed Lib "user32" (ByVal hWnd As Long) As Long
Declare Function ShowWindow Lib "user32" (ByVal hWnd As LongByVal _
   nCmdShow 
As Long) As Long
Declare Function MoveWindow Lib "user32" (ByVal hWnd As LongByVal _
   X 
As LongByVal Y As LongByVal nWidth As LongByVal nHeight _
   As Long
ByVal bRepaint As Long) As Long
Declare Function GetParent Lib "user32" (ByVal hWnd As Long) As Long
'Use following instead of GetWindowRect'
Declare Function GetClientRect Lib "user32" (ByVal hWnd As LonglpRect _
   As Rect
) As Long

Public Const SW_MAXIMIZE 3
Public Const SW_SHOWNORMAL 1

Sub MaximizeRestoredForm
(As Form)
   Dim MDIRect As Rect
   
' If the form is maximized, restore it.
   If IsZoomed(F.hWnd) <> 0 Then
       ShowWindow F.hWnd, SW_SHOWNORMAL
   End If
   ' 
Get the screen coordinates and window size of the
   
' MDIClient area.
   '
This is the line which is different
   GetClientRect GetParent
(F.hWnd), MDIRect
   
' Move the form to the upper left corner of the MDIClient
   ' 
window (0,0) and size it to the same size as the
   
' MDIClient window.
   MoveWindow F.hWnd, 0, 0, MDIRect.x2 - MDIRect.x1, MDIRect.y2 - MDIRect.y1, True
End Sub 

- Form nào cần chạy toàn màn hình thì thiết lập sự kiện Form_Load cho nó như bên dưới.

Mã PHP:
Private Sub Form_Load()
   MaximizeRestoredForm Me
End Sub 

Đúng là nó mất nút max-min-restore, nhưng nó lại xuất hiện 2 thanh cuộn dọc và ngang...
E gửi hình: 
http://www.mediafire.com/file/7x9dnfb6h1...titled.png
Vô Form Property - Format: bỏ 2 thanh cuộn đi là được rồi. Cái này thuộc về thiết kế form mà.
(21-12-17, 10:29 PM)ongke0711 Đã viết: [ -> ]Vô Form Property - Format: bỏ 2 thanh cuộn đi là được rồi. Cái này thuộc về thiết kế form mà.

Em đã tinh chỉnh trong format của form rồi ạ. E nghĩ cái này không phải do trong Property của form đâu. A có thử chạy form đó ko ạ.
Bạn bỏ Border của form luôn, đã maximize cần gì Border nữa.
(21-12-17, 11:06 PM)ongke0711 Đã viết: [ -> ]Bạn bỏ Border của form luôn, đã maximize cần gì Border nữa.

Em đã loại bỏ hết rồi ạ! Đây là hình Properties của Form nè: http://www.mediafire.com/file/7x9dnfb6h1...titled.png
Access 2003 thì tôi không biết sửa như thế nào rồi. Access 2007 trở lên thì không bị lỗi như bạn.