Проблема закрытия модальной формы на крестик

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
sergey-911
Постоялец
Постоялец
 
Сообщения: 545
Зарегистрирован: 17.01.2005 (Пн) 19:10

Проблема закрытия модальной формы на крестик

Сообщение sergey-911 » 01.09.2005 (Чт) 1:09

Всем доброго времени уважаемые. Извините за ламерский вопрос.
Есть приложение с модальной формой. Нужно, чтобы пользователь не имел возможности случайно закрыть основную модальную форму простым нажатием на крестик. Для этого написал указанный ниже скрипт (взятый с данного сайта), который отключает этот крестик вообще. Но это не выход. Нужно, чтобы при нажатии на крестик модальной (основной) формы выводился диалог (Уверен...?)=>Да\Нет. Как этореализовать? Может кто сталкивался?
Прикрепляю сей пример, чтобы было наглядно и удобно редактировать...

Код: Выделить всё
'V Запрет закрытия формы нажатием на крестик-----------------------------------------------------------------------------------------------
Private Declare Function DeleteMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long
Private Const MF_BYPOSITION = &H400&
'A Запрет закрытия формы нажатием на крестик-----------------------------------------------------------------------------------------------

Private Sub RemoveMenus()
    'V Запрет закрытия формы нажатием на крестик-----------------------------------------------------------------------------------------------
    Dim hMenu As Long
    ' Получаем дескриптор системного меню формы.
    hMenu = GetSystemMenu(hwnd, False)
    DeleteMenu hMenu, 6, MF_BYPOSITION
    'A Запрет закрытия формы нажатием на крестик-----------------------------------------------------------------------------------------------
End Sub

Private Sub MDIForm_Load()
    'V Запрет закрытия формы нажатием на крестик-----------------------------------------------------------------------------------------------
    Call RemoveMenus
    'A Запрет закрытия формы нажатием на крестик-----------------------------------------------------------------------------------------------
End Sub

Вложения
MIDI.rar
Пример
(1.81 Кб) Скачиваний: 30
С уважением, Сергей.

Naked
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 207
Зарегистрирован: 27.10.2004 (Ср) 3:16
Откуда: Дальнегорск столица мира

Сообщение Naked » 01.09.2005 (Чт) 1:33

Private Sub MDIForm_Unload(Cancel As Integer)
Dim ret As Long
ret = MsgBox("Уверен что хочешь выйти?", vbOKCancel)
If ret = vbOK Then Cancel = 0
If ret = vbCancel Then Cancel = 1
End Sub

sergey-911
Постоялец
Постоялец
 
Сообщения: 545
Зарегистрирован: 17.01.2005 (Пн) 19:10

Сообщение sergey-911 » 02.09.2005 (Пт) 6:22

Naked
Спасибо большое! Про переменную "Cansel" я не знал :)
С уважением, Сергей.

Vi
Постоялец
Постоялец
 
Сообщения: 739
Зарегистрирован: 25.01.2002 (Пт) 11:03
Откуда: Россия, Ижевск

Сообщение Vi » 02.09.2005 (Пт) 8:01

Еще лучше использовать событие QueryUnload вместо Unload:
Код: Выделить всё
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
  If UnloadMode = vbFormControlMenu Then
    Cancel = MsgBox("Уверен что хочешь выйти?", vbOKCancel) <> vbOK
  End If
End Sub
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! (с) КВН

sergey-911
Постоялец
Постоялец
 
Сообщения: 545
Зарегистрирован: 17.01.2005 (Пн) 19:10

Сообщение sergey-911 » 05.09.2005 (Пн) 6:21

Vi
ОК! Спасибо большое!!!:)
С уважением, Сергей.


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

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

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

    TopList