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
Post Reply
User avatar
NoBi
Quản trị
Quản trị
Posts: 970
Joined: Tue 18/03/2008 1:22 pm
Location: Sài Gòn
Has thanked: 58 times
Been thanked: 68 times
Contact:

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

Post by NoBi »

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

Code: Select all

Option Explicit  Private Declare Function GetSystemMenu Lib "user32" _                             (ByVal hWnd As Long, _                             ByVal bRevert As Long) As Long  Private Declare Function DeleteMenu Lib "user32" _                             (ByVal hMenu As Long, _                            ByVal nPosition As Long, _                            ByVal wFlags As Long) As Long Private Declare Function DrawMenuBar Lib "user32" _                            (ByVal hWnd As Long) As Long Private Declare Function GetWindowLong Lib _                 "user32" Alias "GetWindowLongA" (ByVal hWnd _                 As Long, ByVal nIndex As Long) As Long Private Declare Function SetWindowLong Lib _                "user32" Alias "SetWindowLongA" (ByVal hWnd _                 As Long, ByVal nIndex As Long, ByVal dwNewLong _                 As Long) As Long Private Const MF_BYCOMMAND = &H0Private Const SC_MAXIMIZE As Long = &HF030&Private Const SC_MINIMIZE As Long = &HF020Private Const SC_CLOSE As Long = &HF060& Private Const GWL_STYLE& = (-16)Private Const WS_MAXIMIZEBOX As Long = &H10000Private Const WS_MINIMIZEBOX As Long = &H20000 Private Sub Command1_Click()    EndEnd Sub Public Sub DisableMinButton()Dim hMenu As LongDim OldStyle As Long     'Remove Max button    OldStyle = GetWindowLong(Me.hWnd, GWL_STYLE)    SetWindowLong Me.hWnd, GWL_STYLE, OldStyle And (Not WS_MINIMIZEBOX)        'Remove from system menu    hMenu = GetSystemMenu(Me.hWnd, 0&)     If hMenu Then        Call DeleteMenu(hMenu, SC_MINIMIZE, MF_BYCOMMAND)        Call DrawMenuBar(Me.hWnd)        End If End Sub Public Sub DisableMaxButton() 'This sub Removes Maximize button from control box and system menu.Dim hMenu As LongDim OldStyle As Long     'Remove Max button    OldStyle = GetWindowLong(Me.hWnd, GWL_STYLE)    SetWindowLong Me.hWnd, GWL_STYLE, OldStyle And (Not WS_MAXIMIZEBOX)        'Remove from system menu    hMenu = GetSystemMenu(Me.hWnd, 0&)     If hMenu Then        Call DeleteMenu(hMenu, SC_MAXIMIZE, MF_BYCOMMAND)        Call DrawMenuBar(Me.hWnd)        End If End Sub Public Sub DisableCloseButton()Dim hMenu As Long     hMenu = GetSystemMenu(Me.hWnd, 0&)     If hMenu Then        Call DeleteMenu(hMenu, SC_CLOSE, MF_BYCOMMAND)        Call DrawMenuBar(Me.hWnd)        End IfEnd Sub Private Sub Form_Load()    DisableMaxButton    DisableMinButton    DisableCloseButtonEnd Sub
:>
User avatar
truongphu
VIP
VIP
Posts: 4781
Joined: Sun 04/11/2007 10:57 am
Location: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 525 times

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

Post by truongphu »

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?

Code: Select all

Option Explicit  Private Declare Function GetSystemMenu Lib "user32" _                             (ByVal hWnd As Long, _                             ByVal bRevert As Long) As Long  Private Declare Function DeleteMenu Lib "user32" _                             (ByVal hMenu As Long, _                            ByVal nPosition As Long, _                            ByVal wFlags As Long) As Long ''''Private Declare Function DrawMenuBar Lib "user32" _                            (ByVal hWnd As Long) As Long Private Declare Function GetWindowLong Lib _                 "user32" Alias "GetWindowLongA" (ByVal hWnd _                 As Long, ByVal nIndex As Long) As Long Private Declare Function SetWindowLong Lib _                "user32" Alias "SetWindowLongA" (ByVal hWnd _                 As Long, ByVal nIndex As Long, ByVal dwNewLong _                 As Long) As Long Private Const MF_BYCOMMAND = &H0''''Private Const SC_MAXIMIZE As Long = &HF030&''''Private Const SC_MINIMIZE As Long = &HF020Private Const SC_CLOSE As Long = &HF060& Private Const GWL_STYLE& = (-16)Private Const WS_MAXIMIZEBOX As Long = &H10000Private Const WS_MINIMIZEBOX As Long = &H20000 Private Sub Command1_Click()    EndEnd Sub Public Sub DisableMinButton()''''Dim hMenu As LongDim OldStyle As Long     'Remove Max button    OldStyle = GetWindowLong(Me.hWnd, GWL_STYLE)    SetWindowLong Me.hWnd, GWL_STYLE, OldStyle And (Not WS_MINIMIZEBOX)        'Remove from system menu  ''''  hMenu = GetSystemMenu(Me.hWnd, 0&)    '''' If hMenu Then    ''''    Call DeleteMenu(hMenu, SC_MINIMIZE, MF_BYCOMMAND)        ''''Call DrawMenuBar(Me.hWnd)        ''''End If End Sub Public Sub DisableMaxButton() 'This sub Removes Maximize button from control box and system menu.''''Dim hMenu As LongDim OldStyle As Long     'Remove Max button    OldStyle = GetWindowLong(Me.hWnd, GWL_STYLE)    SetWindowLong Me.hWnd, GWL_STYLE, OldStyle And (Not WS_MAXIMIZEBOX)        'Remove from system menu  ''''  hMenu = GetSystemMenu(Me.hWnd, 0&)   ''''  If hMenu Then    ''''    Call DeleteMenu(hMenu, SC_MAXIMIZE, MF_BYCOMMAND)       '''' Call DrawMenuBar(Me.hWnd)      ''''  End If End Sub Public Sub DisableCloseButton()Dim hMenu As Long     hMenu = GetSystemMenu(Me.hWnd, 0&)   ''''  If hMenu Then        Call DeleteMenu(hMenu, SC_CLOSE, MF_BYCOMMAND)       '''' Call DrawMenuBar(Me.hWnd)      ''''  End IfEnd Sub Private Sub Form_Load()    DisableMaxButton    DisableMinButton    DisableCloseButtonEnd Sub 
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh
User avatar
vietteiv
Quản trị
Quản trị
Posts: 1325
Joined: Sat 10/02/2007 12:17 am
Location: 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 times
Been thanked: 70 times
Contact:

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

Post by vietteiv »

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.
User avatar
truongphu
VIP
VIP
Posts: 4781
Joined: Sun 04/11/2007 10:57 am
Location: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 525 times

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

Post by truongphu »

vietteiv wrote: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:

Code: Select all

Option Explicit Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _    (ByVal hWnd As Long, ByVal nIndex As Long) As Long  Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _    (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Private Const GWL_STYLE& = (-16)Private Const WS_MAXIMIZEBOX As Long = &H10000Private Const WS_MINIMIZEBOX As Long = &H20000Private Const WS_CLOSEBOX = &H80000 Private Sub Command1_Click()    EndEnd Sub Private Sub Form_Load()    Dim OldStyle As Long    OldStyle = GetWindowLong(Me.hWnd, GWL_STYLE)    SetWindowLong Me.hWnd, GWL_STYLE, OldStyle And (Not WS_MAXIMIZEBOX) And (Not WS_MINIMIZEBOX) And (Not WS_CLOSEBOX)End Sub
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh
User avatar
clarkkent
Mạnh Thường Quân
Mạnh Thường Quân
Posts: 1641
Joined: Wed 16/04/2008 11:25 am
Location: Chợ Lách - Bến Tre
Been thanked: 32 times
Contact:

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

Post by clarkkent »

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
Posts: 14
Joined: Sun 12/10/2008 9:47 am

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

Post by toniiiii »

NoBi wrote: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

Code: Select all

Option Explicit  Private Declare Function GetSystemMenu Lib "user32" _                             (ByVal hWnd As Long, _                             ByVal bRevert As Long) As Long  Private Declare Function DeleteMenu Lib "user32" _                             (ByVal hMenu As Long, _                            ByVal nPosition As Long, _                            ByVal wFlags As Long) As Long Private Declare Function DrawMenuBar Lib "user32" _                            (ByVal hWnd As Long) As Long Private Declare Function GetWindowLong Lib _                 "user32" Alias "GetWindowLongA" (ByVal hWnd _                 As Long, ByVal nIndex As Long) As Long Private Declare Function SetWindowLong Lib _                "user32" Alias "SetWindowLongA" (ByVal hWnd _                 As Long, ByVal nIndex As Long, ByVal dwNewLong _                 As Long) As Long Private Const MF_BYCOMMAND = &H0Private Const SC_MAXIMIZE As Long = &HF030&Private Const SC_MINIMIZE As Long = &HF020Private Const SC_CLOSE As Long = &HF060& Private Const GWL_STYLE& = (-16)Private Const WS_MAXIMIZEBOX As Long = &H10000Private Const WS_MINIMIZEBOX As Long = &H20000 Private Sub Command1_Click()    EndEnd Sub Public Sub DisableMinButton()Dim hMenu As LongDim OldStyle As Long     'Remove Max button    OldStyle = GetWindowLong(Me.hWnd, GWL_STYLE)    SetWindowLong Me.hWnd, GWL_STYLE, OldStyle And (Not WS_MINIMIZEBOX)        'Remove from system menu    hMenu = GetSystemMenu(Me.hWnd, 0&)     If hMenu Then        Call DeleteMenu(hMenu, SC_MINIMIZE, MF_BYCOMMAND)        Call DrawMenuBar(Me.hWnd)        End If End Sub Public Sub DisableMaxButton() 'This sub Removes Maximize button from control box and system menu.Dim hMenu As LongDim OldStyle As Long     'Remove Max button    OldStyle = GetWindowLong(Me.hWnd, GWL_STYLE)    SetWindowLong Me.hWnd, GWL_STYLE, OldStyle And (Not WS_MAXIMIZEBOX)        'Remove from system menu    hMenu = GetSystemMenu(Me.hWnd, 0&)     If hMenu Then        Call DeleteMenu(hMenu, SC_MAXIMIZE, MF_BYCOMMAND)        Call DrawMenuBar(Me.hWnd)        End If End Sub Public Sub DisableCloseButton()Dim hMenu As Long     hMenu = GetSystemMenu(Me.hWnd, 0&)     If hMenu Then        Call DeleteMenu(hMenu, SC_CLOSE, MF_BYCOMMAND)        Call DrawMenuBar(Me.hWnd)        End IfEnd Sub Private Sub Form_Load()    DisableMaxButton    DisableMinButton    DisableCloseButtonEnd 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
User avatar
clarkkent
Mạnh Thường Quân
Mạnh Thường Quân
Posts: 1641
Joined: Wed 16/04/2008 11:25 am
Location: Chợ Lách - Bến Tre
Been thanked: 32 times
Contact:

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

Post by clarkkent »

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

Code: Select all

Private Sub Form_Load()    DisableCloseButtonEnd Sub
• Hôm bây: www.tinsoftware.com ^ ^
Cố gắng lên...
User avatar
tuyen_dt18
Guru
Guru
Posts: 261
Joined: Sat 19/04/2008 8:46 pm
Location: Hưng Yên
Been thanked: 42 times
Contact:

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

Post by tuyen_dt18 »

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.
User avatar
andylam1992
Thành viên danh dự
Thành viên danh dự
Posts: 380
Joined: Mon 06/04/2009 12:57 pm
Location: TP.HCM Q5
Has thanked: 2 times
Been thanked: 4 times
Contact:

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

Post by andylam1992 »

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
User avatar
NoBi
Quản trị
Quản trị
Posts: 970
Joined: Tue 18/03/2008 1:22 pm
Location: Sài Gòn
Has thanked: 58 times
Been thanked: 68 times
Contact:

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

Post by NoBi »

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

Code: Select all

OldStyle = GetWindowLong(Me.hWnd, GWL_STYLE)    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.
:>
Post Reply

Return to “[VB] Ứng dụng - Form và Control”