Событие закрытия окна PowerBuilder
У меня есть окно MDI, содержащее несколько вкладок. Я хочу отключить событие закрытия каждый раз, когда пользователь нажимает кнопку выхода на вкладке. Но я не знал, как этого добиться. Может кто-нибудь, пожалуйста, помогите мне с этим? Спасибо.
Вот примерная вкладка и кнопка выхода, о которой я говорил из моего вопроса выше.
и это то, что я до сих пор. Тем не менее окно закрывается каждый раз, когда я нажимаю кнопку выхода.
integer ext
ext = MessageBox("","You are not allowed to close this tab",(Exclamation!),(OK!))
if (ext = 1) then
Open(w_main)
end if
3 ответа
Это не легко. Вы должны обработать с user32.dll API и удалить, изменить и нарисовать строку меню.
Откройте вкладку "Глобальные внешние функции" и вставьте:
Функция uLong GetSystemMenu(объект hwnd, логическое bRevert) БИБЛИОТЕКА "user32.dll" Функция uLong RemoveMenu(объект hMenu, длинная nPosition, long wFlags) БИБЛИОТЕКА "user32.dll" Функция uLong DrawMenuBar(объект hwnd) БИБЛИОТЕКА "user32.dll"
И сейчас:
menu = GetSystemMenu(window, false) // to disable X
RemoveMenu(menu, HF060, H0)
DrawMenuBar(window)
Я удивлен, что ваш пример кода даже работает. MessageBox может вернуть только одно значение, как вы его настроили. Если вы проверяете код возврата из MessageBox, у вас должен быть четвертый параметр - YesNo!, YesNoCancel!
Я думаю, кто бы это ни делал, он не знает, что делает, нет никакого смысла, в этой логике нет никаких вариантов.
Хотите, чтобы это был вопрос, на который пользователь может ответить? Если так, то сделайте что-то вроде:
integer li_rc
li_rc = Messagebox("Confirm your intentions","Do you want to close the tab?",Question!,YesNo!,2)
if li_rc = 1 then
// user clicked YES because it is the first option of YesNo!
else
// user clicked NO because it is the second option of YesNo!
end if
FYI: последний аргумент является кнопкой по умолчанию, если пользователь нажимает Enter
Окно имеет событие closequery, которое срабатывает, когда оно закрывается, вы можете выполнить обработку в этом событии, чтобы окно НЕ закрылось. Я не знаю, есть ли на вкладке что-то подобное, но вы могли бы решить этот вопрос, а затем запретить закрытие. Если вы просто хотите что-то сказать пользователю, тогда просто сделайте MessageBox("Тема сообщения", "Тело сообщения", Восклицательный знак!), Нет необходимости использовать OK! по умолчанию
Вот идея:
Посмотрите на событие clicked элемента управления вкладкой. Там, вероятно, есть код, который закрывает вкладку. Вы можете поставить дополнительную логику для проверки прав доступа и обойти логику закрытия. Или вы можете установить для свойства ShowPicture значение false, если пользователь не может закрыть, или, возможно, показать другое изображение отключенного вида X.
Нет никакого способа "отключить событие закрытия", но вы можете запретить запрошенное закрытие, написав событие окна CloseQuery. Сценарий для возврата 1 в случаях, когда вы хотите запретить закрытие, 0 для случаев, когда вы хотите, чтобы закрытие продолжало обработку.
Удачи.