• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Vô hiệu các ControlBox trên Form

Các thủ thuật liên quan đến việc xử lý ứng dụng, biểu mẫu và control
Hình đại diện của người dùng
NoBi
Quản trị
Quản trị
Bài viết: 952
Ngày tham gia: T.Ba 18/03/2008 1:22 pm
Đến từ: Sài Gòn
Has thanked: 50 time
Been thanked: 66 time
Liên hệ:

Vô hiệu các ControlBox trên Form

Gửi bàigửi bởi NoBi » T.Ba 17/03/2009 11:29 am

Thủ thuật: Vô hiệu các ControlBox trên Form
Tác giả: Sưu tầm
Mô tả: Ẩn các nút Minimize, Maximize và vô hiệu nút Close của Form


Mã: Chọn hết

  1. Option Explicit
  2.  
  3.  Private Declare Function GetSystemMenu Lib "user32" _
  4.                              (ByVal hWnd As Long, _
  5.                              ByVal bRevert As Long) As Long
  6.  
  7.  Private Declare Function DeleteMenu Lib "user32" _
  8.                              (ByVal hMenu As Long, _
  9.                             ByVal nPosition As Long, _
  10.                             ByVal wFlags As Long) As Long
  11.  
  12. Private Declare Function DrawMenuBar Lib "user32" _
  13.                             (ByVal hWnd As Long) As Long
  14.  
  15. Private Declare Function GetWindowLong Lib _
  16.                  "user32" Alias "GetWindowLongA" (ByVal hWnd _
  17.                  As Long, ByVal nIndex As Long) As Long
  18.  
  19. Private Declare Function SetWindowLong Lib _
  20.                 "user32" Alias "SetWindowLongA" (ByVal hWnd _
  21.                  As Long, ByVal nIndex As Long, ByVal dwNewLong _
  22.                  As Long) As Long
  23.  
  24. Private Const MF_BYCOMMAND = &H0
  25. Private Const SC_MAXIMIZE As Long = &HF030&
  26. Private Const SC_MINIMIZE As Long = &HF020
  27. Private Const SC_CLOSE As Long = &HF060&
  28.  
  29. Private Const GWL_STYLE& = (-16)
  30. Private Const WS_MAXIMIZEBOX As Long = &H10000
  31. Private Const WS_MINIMIZEBOX As Long = &H20000
  32.  
  33. Private Sub Command1_Click()
  34.     End
  35. End Sub
  36.  
  37. Public Sub DisableMinButton()
  38. Dim hMenu As Long
  39. Dim OldStyle As Long
  40.  
  41.     'Remove Max button
  42.     OldStyle = GetWindowLong(Me.hWnd, GWL_STYLE)
  43.     SetWindowLong Me.hWnd, GWL_STYLE, OldStyle And (Not WS_MINIMIZEBOX)
  44.    
  45.     'Remove from system menu
  46.     hMenu = GetSystemMenu(Me.hWnd, 0&)
  47.  
  48.     If hMenu Then
  49.         Call DeleteMenu(hMenu, SC_MINIMIZE, MF_BYCOMMAND)
  50.         Call DrawMenuBar(Me.hWnd)
  51.    
  52.     End If
  53.  
  54. End Sub
  55.  
  56. Public Sub DisableMaxButton()
  57.  
  58. 'This sub Removes Maximize button from control box and system menu.
  59. Dim hMenu As Long
  60. Dim OldStyle As Long
  61.  
  62.     'Remove Max button
  63.     OldStyle = GetWindowLong(Me.hWnd, GWL_STYLE)
  64.     SetWindowLong Me.hWnd, GWL_STYLE, OldStyle And (Not WS_MAXIMIZEBOX)
  65.    
  66.     'Remove from system menu
  67.     hMenu = GetSystemMenu(Me.hWnd, 0&)
  68.  
  69.     If hMenu Then
  70.         Call DeleteMenu(hMenu, SC_MAXIMIZE, MF_BYCOMMAND)
  71.         Call DrawMenuBar(Me.hWnd)
  72.    
  73.     End If
  74.  
  75. End Sub
  76.  
  77. Public Sub DisableCloseButton()
  78. Dim hMenu As Long
  79.  
  80.     hMenu = GetSystemMenu(Me.hWnd, 0&)
  81.  
  82.     If hMenu Then
  83.         Call DeleteMenu(hMenu, SC_CLOSE, MF_BYCOMMAND)
  84.         Call DrawMenuBar(Me.hWnd)
  85.    
  86.     End If
  87. End Sub
  88.  
  89. Private Sub Form_Load()
  90.     DisableMaxButton
  91.     DisableMinButton
  92.     DisableCloseButton
  93. End Sub


:>

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4760
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 515 time

Re: Vô hiệu các ControlBox trên Form

Gửi bàigửi bởi truongphu » CN 22/03/2009 8:29 pm

Xin hỏi NoBi 2 vấn đề:

1- Nếu đã không ưa các ControlBox trên Form, tại sao lúc thiết kế lại không đặt ở bảng Properties với ContrlBox = False?

2- Và code sau đây so với nguyên bản thì tác dụng lợi hại thế nào?

Mã: Chọn hết

  1. Option Explicit
  2.  
  3.  Private Declare Function GetSystemMenu Lib "user32" _
  4.                              (ByVal hWnd As Long, _
  5.                              ByVal bRevert As Long) As Long
  6.  
  7.  Private Declare Function DeleteMenu Lib "user32" _
  8.                              (ByVal hMenu As Long, _
  9.                             ByVal nPosition As Long, _
  10.                             ByVal wFlags As Long) As Long
  11.  
  12. ''''Private Declare Function DrawMenuBar Lib "user32" _
  13.                             (ByVal hWnd As Long) As Long
  14.  
  15. Private Declare Function GetWindowLong Lib _
  16.                  "user32" Alias "GetWindowLongA" (ByVal hWnd _
  17.                  As Long, ByVal nIndex As Long) As Long
  18.  
  19. Private Declare Function SetWindowLong Lib _
  20.                 "user32" Alias "SetWindowLongA" (ByVal hWnd _
  21.                  As Long, ByVal nIndex As Long, ByVal dwNewLong _
  22.                  As Long) As Long
  23.  
  24. Private Const MF_BYCOMMAND = &H0
  25. ''''Private Const SC_MAXIMIZE As Long = &HF030&
  26. ''''Private Const SC_MINIMIZE As Long = &HF020
  27. Private Const SC_CLOSE As Long = &HF060&
  28.  
  29. Private Const GWL_STYLE& = (-16)
  30. Private Const WS_MAXIMIZEBOX As Long = &H10000
  31. Private Const WS_MINIMIZEBOX As Long = &H20000
  32.  
  33. Private Sub Command1_Click()
  34.     End
  35. End Sub
  36.  
  37. Public Sub DisableMinButton()
  38. ''''Dim hMenu As Long
  39. Dim OldStyle As Long
  40.  
  41.     'Remove Max button
  42.     OldStyle = GetWindowLong(Me.hWnd, GWL_STYLE)
  43.     SetWindowLong Me.hWnd, GWL_STYLE, OldStyle And (Not WS_MINIMIZEBOX)
  44.    
  45.     'Remove from system menu
  46.   ''''  hMenu = GetSystemMenu(Me.hWnd, 0&)
  47.  
  48.    '''' If hMenu Then
  49.     ''''    Call DeleteMenu(hMenu, SC_MINIMIZE, MF_BYCOMMAND)
  50.         ''''Call DrawMenuBar(Me.hWnd)
  51.    
  52.     ''''End If
  53.  
  54. End Sub
  55.  
  56. Public Sub DisableMaxButton()
  57.  
  58. 'This sub Removes Maximize button from control box and system menu.
  59. ''''Dim hMenu As Long
  60. Dim OldStyle As Long
  61.  
  62.     'Remove Max button
  63.     OldStyle = GetWindowLong(Me.hWnd, GWL_STYLE)
  64.     SetWindowLong Me.hWnd, GWL_STYLE, OldStyle And (Not WS_MAXIMIZEBOX)
  65.    
  66.     'Remove from system menu
  67.   ''''  hMenu = GetSystemMenu(Me.hWnd, 0&)
  68.  
  69.   ''''  If hMenu Then
  70.     ''''    Call DeleteMenu(hMenu, SC_MAXIMIZE, MF_BYCOMMAND)
  71.        '''' Call DrawMenuBar(Me.hWnd)
  72.    
  73.   ''''  End If
  74.  
  75. End Sub
  76.  
  77. Public Sub DisableCloseButton()
  78. Dim hMenu As Long
  79.  
  80.     hMenu = GetSystemMenu(Me.hWnd, 0&)
  81.  
  82.   ''''  If hMenu Then
  83.         Call DeleteMenu(hMenu, SC_CLOSE, MF_BYCOMMAND)
  84.        '''' Call DrawMenuBar(Me.hWnd)
  85.    
  86.   ''''  End If
  87. End Sub
  88.  
  89. Private Sub Form_Load()
  90.     DisableMaxButton
  91.     DisableMinButton
  92.     DisableCloseButton
  93. End Sub
  94.  
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

Hình đại diện của người dùng
vietteiv
Quản trị
Quản trị
Bài viết: 1323
Ngày tham gia: T.Bảy 10/02/2007 12:17 am
Đến từ: Cung cấp giải pháp quản lý doanh nghiệp, dự án, tư vấn xây dựng
Has thanked: 6 time
Been thanked: 71 time
Liên hệ:

Re: Vô hiệu các ControlBox trên Form

Gửi bàigửi bởi vietteiv » CN 22/03/2009 8:50 pm

câu 1: pác thử làm cho control=false đối với MDIForm = cái bảng properties của nó thử được ko, rồi có thể tự trả lời luôn cũng được.

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4760
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 515 time

Re: Vô hiệu các ControlBox trên Form

Gửi bàigửi bởi truongphu » CN 22/03/2009 9:10 pm

vietteiv đã viết:làm cho control=false đối với MDIForm = cái bảng properties của nó thử được ko

A! quên cái dzụ nầy bàn nhiều trên Forum...
Cảm ơn, ít quà hậu tạ sau đây:

Mã: Chọn hết

  1. Option Explicit
  2.  Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
  3.     (ByVal hWnd As Long, ByVal nIndex As Long) As Long
  4.  
  5.  Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
  6.     (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
  7.  
  8. Private Const GWL_STYLE& = (-16)
  9. Private Const WS_MAXIMIZEBOX As Long = &H10000
  10. Private Const WS_MINIMIZEBOX As Long = &H20000
  11. Private Const WS_CLOSEBOX = &H80000
  12.  
  13. Private Sub Command1_Click()
  14.     End
  15. End Sub
  16.  
  17. Private Sub Form_Load()
  18.     Dim OldStyle As Long
  19.     OldStyle = GetWindowLong(Me.hWnd, GWL_STYLE)
  20.     SetWindowLong Me.hWnd, GWL_STYLE, OldStyle And (Not WS_MAXIMIZEBOX) And (Not WS_MINIMIZEBOX) And (Not WS_CLOSEBOX)
  21. End Sub
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

Hình đại diện của người dùng
clarkkent
Mạnh Thường Quân
Mạnh Thường Quân
Bài viết: 1641
Ngày tham gia: T.Tư 16/04/2008 11:25 am
Đến từ: Chợ Lách - Bến Tre
Been thanked: 31 time
Liên hệ:

Re: Vô hiệu các ControlBox trên Form

Gửi bàigửi bởi clarkkent » T.Hai 23/03/2009 1:03 pm

1 - Nếu đã không ưa các ControlBox trên Form, tại sao lúc thiết kế lại không đặt ở bảng Properties với ContrlBox = False?

Một vài chương trình cần vô hiệu hóa X button tạm thời , ví dụ như nero lúc ghi đĩa
• Hôm bây: www.tinsoftware.com ^ ^
Cố gắng lên...

toniiiii
Thành viên chính thức
Thành viên chính thức
Bài viết: 14
Ngày tham gia: CN 12/10/2008 9:47 am

Re: Vô hiệu các ControlBox trên Form

Gửi bàigửi bởi toniiiii » T.Tư 03/06/2009 8:59 pm

NoBi đã viết:Thủ thuật: Vô hiệu các ControlBox trên Form
Tác giả: Sưu tầm
Mô tả: Ẩn các nút Minimize, Maximize và vô hiệu nút Close của Form


Mã: Chọn hết

  1. Option Explicit
  2.  
  3.  Private Declare Function GetSystemMenu Lib "user32" _
  4.                              (ByVal hWnd As Long, _
  5.                              ByVal bRevert As Long) As Long
  6.  
  7.  Private Declare Function DeleteMenu Lib "user32" _
  8.                              (ByVal hMenu As Long, _
  9.                             ByVal nPosition As Long, _
  10.                             ByVal wFlags As Long) As Long
  11.  
  12. Private Declare Function DrawMenuBar Lib "user32" _
  13.                             (ByVal hWnd As Long) As Long
  14.  
  15. Private Declare Function GetWindowLong Lib _
  16.                  "user32" Alias "GetWindowLongA" (ByVal hWnd _
  17.                  As Long, ByVal nIndex As Long) As Long
  18.  
  19. Private Declare Function SetWindowLong Lib _
  20.                 "user32" Alias "SetWindowLongA" (ByVal hWnd _
  21.                  As Long, ByVal nIndex As Long, ByVal dwNewLong _
  22.                  As Long) As Long
  23.  
  24. Private Const MF_BYCOMMAND = &H0
  25. Private Const SC_MAXIMIZE As Long = &HF030&
  26. Private Const SC_MINIMIZE As Long = &HF020
  27. Private Const SC_CLOSE As Long = &HF060&
  28.  
  29. Private Const GWL_STYLE& = (-16)
  30. Private Const WS_MAXIMIZEBOX As Long = &H10000
  31. Private Const WS_MINIMIZEBOX As Long = &H20000
  32.  
  33. Private Sub Command1_Click()
  34.     End
  35. End Sub
  36.  
  37. Public Sub DisableMinButton()
  38. Dim hMenu As Long
  39. Dim OldStyle As Long
  40.  
  41.     'Remove Max button
  42.     OldStyle = GetWindowLong(Me.hWnd, GWL_STYLE)
  43.     SetWindowLong Me.hWnd, GWL_STYLE, OldStyle And (Not WS_MINIMIZEBOX)
  44.    
  45.     'Remove from system menu
  46.     hMenu = GetSystemMenu(Me.hWnd, 0&)
  47.  
  48.     If hMenu Then
  49.         Call DeleteMenu(hMenu, SC_MINIMIZE, MF_BYCOMMAND)
  50.         Call DrawMenuBar(Me.hWnd)
  51.    
  52.     End If
  53.  
  54. End Sub
  55.  
  56. Public Sub DisableMaxButton()
  57.  
  58. 'This sub Removes Maximize button from control box and system menu.
  59. Dim hMenu As Long
  60. Dim OldStyle As Long
  61.  
  62.     'Remove Max button
  63.     OldStyle = GetWindowLong(Me.hWnd, GWL_STYLE)
  64.     SetWindowLong Me.hWnd, GWL_STYLE, OldStyle And (Not WS_MAXIMIZEBOX)
  65.    
  66.     'Remove from system menu
  67.     hMenu = GetSystemMenu(Me.hWnd, 0&)
  68.  
  69.     If hMenu Then
  70.         Call DeleteMenu(hMenu, SC_MAXIMIZE, MF_BYCOMMAND)
  71.         Call DrawMenuBar(Me.hWnd)
  72.    
  73.     End If
  74.  
  75. End Sub
  76.  
  77. Public Sub DisableCloseButton()
  78. Dim hMenu As Long
  79.  
  80.     hMenu = GetSystemMenu(Me.hWnd, 0&)
  81.  
  82.     If hMenu Then
  83.         Call DeleteMenu(hMenu, SC_CLOSE, MF_BYCOMMAND)
  84.         Call DrawMenuBar(Me.hWnd)
  85.    
  86.     End If
  87. End Sub
  88.  
  89. Private Sub Form_Load()
  90.     DisableMaxButton
  91.     DisableMinButton
  92.     DisableCloseButton
  93. End Sub

cho mình hỏi là đoạn code trên làm mất luôn nút minimize và restore down,có ai biết cách chỉ làm mất nút close thôi,còn 2 nút kia vẫn còn được ko?mình xin cảm ơn

Hình đại diện của người dùng
clarkkent
Mạnh Thường Quân
Mạnh Thường Quân
Bài viết: 1641
Ngày tham gia: T.Tư 16/04/2008 11:25 am
Đến từ: Chợ Lách - Bến Tre
Been thanked: 31 time
Liên hệ:

Re: Vô hiệu các ControlBox trên Form

Gửi bàigửi bởi clarkkent » T.Năm 04/06/2009 9:04 am

thì trong FormLoad gọi cái này thôi

Mã: Chọn hết

  1. Private Sub Form_Load()
  2.     DisableCloseButton
  3. End Sub
• Hôm bây: www.tinsoftware.com ^ ^
Cố gắng lên...

Hình đại diện của người dùng
tuyen_dt18
Guru
Guru
Bài viết: 256
Ngày tham gia: T.Bảy 19/04/2008 8:46 pm
Đến từ: Hưng Yên
Been thanked: 43 time
Liên hệ:

Re: Vô hiệu các ControlBox trên Form

Gửi bàigửi bởi tuyen_dt18 » T.Bảy 13/06/2009 5:55 pm

Thế nếu chỉ là Vô hiệu tạm thời, thì làm thế nào để khôi phục lại các Control Box đó.
Hỏi ý kiến tác giả trước khi sử dụng hoặc trích dẫn rõ nguồn bài viết khi sử dụng.

Hình đại diện của người dùng
andylam1992
Thành viên danh dự
Thành viên danh dự
Bài viết: 380
Ngày tham gia: T.Hai 06/04/2009 12:57 pm
Đến từ: TP.HCM Q5
Has thanked: 2 time
Been thanked: 4 time
Liên hệ:

Re: Vô hiệu các ControlBox trên Form

Gửi bàigửi bởi andylam1992 » T.Bảy 13/06/2009 8:00 pm

câu hỏi hay đó, mình vô hiệu rùi sao enable lại hả anh NOBi, chỉ em luôn đi. Cám ơn anh nhiều lắm.
[Thankyou]

不相信未作牺牲竟先可拥有
只相信是靠双手找到我欲求
Cần - Kiệm- Liêm(liêm kiết) - Nghĩa - Chí - Tín

Hình đại diện của người dùng
NoBi
Quản trị
Quản trị
Bài viết: 952
Ngày tham gia: T.Ba 18/03/2008 1:22 pm
Đến từ: Sài Gòn
Has thanked: 50 time
Been thanked: 66 time
Liên hệ:

Re: Vô hiệu các ControlBox trên Form

Gửi bàigửi bởi NoBi » CN 14/06/2009 12:23 am

Or lại cho nó hiện ra:

Mã: Chọn hết

  1. OldStyle = GetWindowLong(Me.hWnd, GWL_STYLE)
  2.     SetWindowLong Me.hWnd, GWL_STYLE, OldStyle Or (WS_MINIMIZEBOX)

Ngặt là cái menu đã bị xóa nên kg thực hiện minimize dc (làm cho hiện ra thôi chứ bấm kg xi nhê), chắc phải lưu lại giá trị hay gì gì đó để khôi phục lại khi cần.
:>


Quay về “[VB] Ứng dụng - Form và Control”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.0 khách