Как сделать кнопку "Закрыть" неактивной

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
jSergey
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 01.09.2005 (Чт) 6:34

Как сделать кнопку "Закрыть" неактивной

Сообщение jSergey » 17.10.2005 (Пн) 6:34

Как сделать кнопку "Закрыть" в правом верхнем углу экранной формы неактивной (т.е. чтобы отображалась приглушенным цветом, при клике на ней мышью не происходило никаких действий)?

GM
programador
programador
 
Сообщения: 1427
Зарегистрирован: 24.06.2003 (Вт) 15:56
Откуда: 194.67.52.100

Сообщение GM » 17.10.2005 (Пн) 8:42

Код: Выделить всё
Option Explicit
Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long
Private Declare Function GetMenuItemCount Lib "user32" (ByVal hMenu As Long) As Long
Private Declare Function DrawMenuBar Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
Const MF_BYPOSITION = &H400&
Const MF_REMOVE = &H1000&
Private Sub Form_Load()
    Dim hSysMenu As Long, nCnt As Long
    ' Get handle to our form's system menu
    ' (Restore, Maximize, Move, close etc.)
    hSysMenu = GetSystemMenu(Me.hwnd, False)

    If hSysMenu Then
        ' Get System menu's menu count
        nCnt = GetMenuItemCount(hSysMenu)
        If nCnt Then
            ' Menu count is based on 0 (0, 1, 2, 3...)
            RemoveMenu hSysMenu, nCnt - 1, MF_BYPOSITION Or MF_REMOVE
            RemoveMenu hSysMenu, nCnt - 2, MF_BYPOSITION Or MF_REMOVE ' Remove the seperator
            DrawMenuBar Me.hwnd
            ' Force caption bar's refresh. Disabling X button
            Me.Caption = "Try to close me!"
        End If
    End If
End Sub
الفيجوال بيسك الرابح

Chester
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 4
Зарегистрирован: 28.07.2005 (Чт) 12:25

Можно это зделать и по короче!

Сообщение Chester » 17.10.2005 (Пн) 14:51

Создаём модуль в него пишем:

Public Declare Function GetSystemMenu Lib "user32" _
(ByVal hwnd As Long, _
ByVal bRevert As Long) As Long

Public Declare Function RemoveMenu Lib "user32" _
(ByVal hMenu As Long, _
ByVal nPosition As Long, _
ByVal wFlags As Long) As Long

Public Const MF_BYPOSITION = &H400&

Public Sub DisableCloseWindowButton(frm As Form)
Dim hSysMenu As Long
hSysMenu = GetSystemMenu(frm.hwnd, 0)
RemoveMenu hSysMenu, 6, MF_BYPOSITION
RemoveMenu hSysMenu, 5, MF_BYPOSITION
End Sub

Теперь на той форме, где надо зделать недоступной кнопку закрыть пишем:

Private Sub Form_Load()
DisableCloseWindowButton Me
End Sub

Вот и всё :wink:

Belkin
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 63
Зарегистрирован: 02.11.2007 (Пт) 18:02
Откуда: Рязань

Сделать активной

Сообщение Belkin » 07.02.2008 (Чт) 17:11

А как например по нажатию кнопки сделать ее активной?
Андрей.

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 08.02.2008 (Пт) 7:24

А как например по нажатию кнопки сделать ее активной?
Скорее всего никак, но можно попробовать добавить меню с тем же ID.
А я все практикую лечение травами...


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, Yandex-бот и гости: 99

    TopList