Loại bỏ Tittle bar, ẩn nút close trên Tittle bar Userform

Liên hệ QC

Cafe Kem No.1

Thành viên mới
Tham gia
4/11/14
Bài viết
6
Được thích
0
Chào mọi người,
Cho mình hỏi có cách nào loại bỏ Tittle bar của Userform không? Và có đoạn code nào ẩn nút [X] close trên Tittle bar của Userform không?
 
Mở tập tin -> Alt + F11 -> menu Insert -> Module -> dán code sau vào Module
Mã:
Option Explicit

Private Const GWL_STYLE As Long = -16
Private Const WS_CAPTION As Long = &HC00000
Private Const WS_MINIMIZEBOX As Long = &H20000
Private Const WS_MAXIMIZEBOX As Long = &H10000
Private Const WS_THICKFRAME = &H40000
Private Const SC_CLOSE As Long = &HF060&

#If VBA7 Then
    Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
    #If Win64 Then
        Private Declare PtrSafe Function GetWindowLong Lib "user32" Alias "GetWindowLongPtrA" (ByVal hwnd As LongPtr, ByVal nIndex As Long) As LongPtr
        Private Declare PtrSafe Function SetWindowLong Lib "user32" Alias "SetWindowLongPtrA" (ByVal hwnd As LongPtr, ByVal nIndex As Long, ByVal dwNewLong As LongPtr) As LongPtr
    #Else
        Private Declare PtrSafe Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As LongPtr, ByVal nIndex As Long) As LongPtr
        Private Declare PtrSafe Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As LongPtr, ByVal nIndex As Long, ByVal dwNewLong As LongPtr) As LongPtr
    #End If
    Private Declare PtrSafe Function GetSystemMenu Lib "user32" (ByVal hwnd As LongPtr, ByVal bRevert As Long) As LongPtr
    Private Declare PtrSafe Function DeleteMenu Lib "user32" (ByVal hMenu As LongPtr, ByVal nPosition As Long, ByVal wFlags As Long) As Long
    Private Declare PtrSafe Function DrawMenuBar Lib "user32" (ByVal hwnd As LongPtr) As Long
    Private Declare PtrSafe Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As LongPtr, ByVal wMsg As Long, ByVal wParam As LongPtr, lParam As Any) As LongPtr
#Else
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Public Declare Function GetWindowLong Lib "user32.dll" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
    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 SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
#End If

#If VBA7 Then
Private Sub SetStyleBit(style As LongPtr, ByVal bit As Long, ByVal bSet As Boolean)
#Else
Private Sub SetStyleBit(style As Long, ByVal bit As Long, ByVal bSet As Boolean)
#End If
    If bSet Then
        style = style Or bit
    Else
        style = style And Not bit
    End If
End Sub

#If VBA7 Then
    Function ChangeFormStyle(form As Object, Optional ByVal CloseBtn As Boolean = True, Optional ByVal sizing_border As Boolean = False, Optional ByVal minBtn As Boolean = False, Optional ByVal maxBtn As Boolean = False) As LongPtr
    Dim hwnd As LongPtr
    Dim style As LongPtr, hMenu As LongPtr
#Else
    Function ChangeFormStyle(form As Object, Optional ByVal CloseBtn As Boolean = True, Optional ByVal sizing_border As Boolean = False, Optional ByVal minBtn As Boolean = False, Optional ByVal maxBtn As Boolean = False) As Long
    Dim hwnd As Long
    Dim style As Long, hMenu As Long
#End If

    hwnd = FindWindow("ThunderDFrame", form.Caption)
    style = GetWindowLong(hwnd, GWL_STYLE)
    SetStyleBit style, WS_CAPTION, minBtn Or maxBtn Or CloseBtn
    SetStyleBit style, WS_MINIMIZEBOX, minBtn
    SetStyleBit style, WS_MAXIMIZEBOX, maxBtn
    SetStyleBit style, WS_THICKFRAME, sizing_border
    SetWindowLong hwnd, GWL_STYLE, style
    If Not CloseBtn Then
        hMenu = GetSystemMenu(hwnd, 0)
        DeleteMenu hMenu, SC_CLOSE, 0
    End If
    DrawMenuBar hwnd
    
    ChangeFormStyle = hwnd
End Function

Trong module UserForm phải có code
Mã:
Private Sub UserForm_Initialize()
    ChangeFormStyle Me, False, False, False, False
End Sub

hoặc

Private Sub UserForm_Initialize()
    ChangeFormStyle Me, False
End Sub
 
Upvote 0
Trong module UserForm phải có code
Anh thật là siêng. Theo ý kiến cá nhân tôi thì việc ẩn application, ẩn title, ẩn nút X của form, tạo nút minimize, maximize cho form, zoom form, ... toàn là chuyện vô bổ. Phải chi code đạt trình độ cao siêu viết được ứng dụng to tát thì còn làm màu mè để bán.
 
Upvote 0
Anh thật là siêng. Theo ý kiến cá nhân tôi thì việc ẩn application, ẩn title, ẩn nút X của form, tạo nút minimize, maximize cho form, zoom form, ... toàn là chuyện vô bổ. Phải chi code đạt trình độ cao siêu viết được ứng dụng to tát thì còn làm màu mè để bán.
Bác ấy có thú tiêu khiển là giải quyết các yêu cầu biến đổi phức tạp. Đại khái cũng như người ta chơi trò giải các bài toán đố. 100 bài toán đố hết 99 bài chả có ích lợi gì ch ai cả. Nhưng vận động trí óc là một trong những cách chống lão hoá khá hữu hiệu.

<< Phải chi code đạt trình độ cao siêu >>
Bạn cần nói rõ chỗ này là code của thớt (?) kẻo bác ấy hiểu lầm.
 
Upvote 0
Anh thật là siêng. Theo ý kiến cá nhân tôi thì việc ẩn application, ẩn title, ẩn nút X của form, tạo nút minimize, maximize cho form, zoom form, ... toàn là chuyện vô bổ. Phải chi code đạt trình độ cao siêu viết được ứng dụng to tát thì còn làm màu mè để bán.
Có nhiều cái vô bổ nhưng người ta vẫn mắc phải. Vd. như có người cứ rỗi tí là lại chơi game. Tôi thì không bao giờ chơi, dù chỉ 1 lần. Nhưng có thời tôi cuồng lập trình là khi ngồi trả lời trên 1 diễn đàn Delphi của Ba Lan. Tới mức về nhà mới cởi dày đã lao vào phòng bật máy tính. Sau khi cởi áo quần rửa tay thì máy đã sẵn sàng, lao vào xem các câu hỏi và trả lời ngay và luôn. Tôi tưởng đến chết cũng không bỏ được, nó như ma túy ấy. Thế mà quyết tâm vẫn bỏ được. :D

Bác ấy có thú tiêu khiển là giải quyết các yêu cầu biến đổi phức tạp. Đại khái cũng như người ta chơi trò giải các bài toán đố. 100 bài toán đố hết 99 bài chả có ích lợi gì ch ai cả. Nhưng vận động trí óc là một trong những cách chống lão hoá khá hữu hiệu.
Giết thời gian kiểu này cũng nghiện đấy bác. Bản thân bác đi Côn Đảo 1 tháng thì bác thấy rõ.
 
Lần chỉnh sửa cuối:
Upvote 0
<< Phải chi code đạt trình độ cao siêu >>
Bạn cần nói rõ chỗ này là code của thớt (?) kẻo bác ấy hiểu lầm.
Tất nhiên là tôi nói về nhiều người khác, chứ anh ấy đâu có vậy. Những người hỏi những chuyện này trên GPE, 100% là người chú trọng hình thức muốn "hoành tráng" (nội dung thì chả biết ra sao), 99,9% muốn ra vẻ "chuyên nghiệp".
 
Lần chỉnh sửa cuối:
Upvote 0
...
Giết thời gian kiểu này cũng nghiện đấy bác. Bản thân bác đi Côn Đảo 1 tháng thì bác thấy rõ.
Không hẳn nghiện lập trình lắm. Tôi không bỏ đi là vì thích đùa vui với những người tôi xem là bạn.
 
Upvote 0
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom