Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Hỏi] Căn Chỉnh Form Tự Động
#1
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!
Chữ ký của pherotao "Hạnh phúc ở đâu... biết tìm đâu,
Hồng trần là thế giới muôn màu,
Hội đủ nhân duyên... thời sinh quả,
Kết thúc... cũng là lúc bắt đầu".
Reply
Những người đã cảm ơn
#2
Form có thuộc tính Maximize sao bạn ko sử dụng.
Ở sựsự kiện Form_Open
Docmd.Maximize
Chữ ký của ongke0711 If you BORN poor, it's not your mistake. But if you DIE poor, It's your mistake!
ღღღღღTài sản của ongke0711 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn maidinhdan
#3
(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?
Chữ ký của pherotao "Hạnh phúc ở đâu... biết tìm đâu,
Hồng trần là thế giới muôn màu,
Hội đủ nhân duyên... thời sinh quả,
Kết thúc... cũng là lúc bắt đầu".
Reply
Những người đã cảm ơn
#4
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 
Chữ ký của ongke0711 If you BORN poor, it's not your mistake. But if you DIE poor, It's your mistake!
ღღღღღTài sản của ongke0711 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn pherotao
#5
(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
Chữ ký của pherotao "Hạnh phúc ở đâu... biết tìm đâu,
Hồng trần là thế giới muôn màu,
Hội đủ nhân duyên... thời sinh quả,
Kết thúc... cũng là lúc bắt đầu".
Reply
Những người đã cảm ơn
#6
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à.
Chữ ký của ongke0711 If you BORN poor, it's not your mistake. But if you DIE poor, It's your mistake!
ღღღღღTài sản của ongke0711 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn pherotao
#7
(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 ạ.
Chữ ký của pherotao "Hạnh phúc ở đâu... biết tìm đâu,
Hồng trần là thế giới muôn màu,
Hội đủ nhân duyên... thời sinh quả,
Kết thúc... cũng là lúc bắt đầu".
Reply
Những người đã cảm ơn
#8
Bạn bỏ Border của form luôn, đã maximize cần gì Border nữa.
Chữ ký của ongke0711 If you BORN poor, it's not your mistake. But if you DIE poor, It's your mistake!
ღღღღღTài sản của ongke0711 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn pherotao
#9
(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
Chữ ký của pherotao "Hạnh phúc ở đâu... biết tìm đâu,
Hồng trần là thế giới muôn màu,
Hội đủ nhân duyên... thời sinh quả,
Kết thúc... cũng là lúc bắt đầu".
Reply
Những người đã cảm ơn
#10
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.
Chữ ký của ongke0711 If you BORN poor, it's not your mistake. But if you DIE poor, It's your mistake!
ღღღღღTài sản của ongke0711 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn pherotao


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
  Function check các biến chưa đóng mrsiro 0 101 13-10-18, 05:44 PM
Bài mới nhất: mrsiro
  [Hỏi] Click vào button mở form mới ngay dưới button đó mrsiro 1 159 22-09-18, 12:04 PM
Bài mới nhất: lmthu
  [Hỏi] Mã Số Nhân Viên Tự Động Tăng pherotao 9 1,007 24-12-17, 02:00 AM
Bài mới nhất: pherotao
  [Hỏi] Cập nhật thông tin từ Textbox của UnBound Form vào Listbox pherotao 5 775 20-12-17, 09:00 PM
Bài mới nhất: pherotao
  [Hỏi] Mở 1 Form khác khi thỏa điều kiện pherotao 11 1,310 20-12-17, 12:10 AM
Bài mới nhất: pherotao

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ơ| PMA Nha Trang| Gỗ Acrylic Không Đường Line