CftClub.ru
Клуб специалистов ЦФТ-Банк

Как не дать закрыть форму
На страницу Пред.  1, 2, 3
 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle
Предыдущая тема :: Следующая тема  
Автор Сообщение
Ezhik
Участник со стажем


Вступление в Клуб: 17.04.2009
СообщениеСр Ноя 20, 2013 07:59    Ответить с цитатой
Полезность: Нет оценки
XLman пишет:
Так автор темы пусть и проверит... Ежик, Вас чем то задели мои утверждения? Можете сами проверить.
Я всегда все проверяю Smile Я категорически против пустой болтовни и непроверенной информации, которую пытаются втолкать остальным (а если она повторяется не в 1 сообщении, то именно втолкать).
XLman
Участник со стажем


Вступление в Клуб: 20.02.2008
СообщениеЧт Ноя 21, 2013 08:00    Ответить с цитатой
Полезность: Нет оценки
Извиняюсь, немного ввел в заблуждение, похожая просто была задача, но немного другая, тоже связанная с закрытием формы: реальную кнопку OK скрывал от пользователя, а делал "фэйковую" ОК (action=нет) доступную пользователю, т.е. чтобы форма не закрывалась при нажатии на ОК, а можно было предварительно вывести msgbox с вопросом типа "вы уверены?" и после утвердительного ответа инициировалось нажатие реальной кнопки ОК. И вот нажатие "фэйковой" ОК можно было обойти комбинацией SHIFT-OK.
dumpino
Участник со стажем


Вступление в Клуб: 13.12.2011
СообщениеВт Июл 15, 2014 13:26   Re: Как не дать закрыть форму Ответить с цитатой
Полезность: 1
VUV пишет:
Форумчане , подскажите , как не дать закрыть форму при нажатии на "крестик" экранной формы ?
PS. Форма закрывается только при нажатии "ОК"


Версия Рабочего места Оператора 6.11.10.0

Работает такой скрипт:

Код:
Public Sub Form1_OnClose(bExit, bAsk)
      'msgbox("Вызов закрытия формы")
      bExit  = False
      bAsk = False
End Sub


весь код клиент-скрипта выглядит так:

Код:
Public Function Main(LastControl)
   If Dest.Text <> "" Then
      If (LastControl is OK) Then
         DO   'исполнение сценария
            Execute Dest.Text
            Call Form1.ScriptServerValidate(OK, "OK")
         Loop While   Dest.Text <> ""         
      Else
         Execute Dest.Text
         Dest.Text = ""         
      End If
   End If
   Main = True
End Function


Public Sub Form1_OnClose(bExit, bAsk)
      'msgbox("Вызов закрытия формы")
      bExit  = False
      bAsk = False
End Sub



кнопку Cancel я скрыл совсем от глаз. На форме в итоге работает только кнопка OK.

п.с. оставляю для потомков)
Zab
Участник


Вступление в Клуб: 30.08.2013
СообщениеПн Апр 13, 2015 14:42    Ответить с цитатой
Полезность: Нет оценки
Добрый день!

Аналогичная задача, только для версии 116 Навигатора.
Хоть в документации и написано, что:
Цитата:
Примечание
Обработка события OnClose возможна, начиная с 116 версии АРМа "ЦФТ – Навигатор".

на самом деле, это не так.
По крайней мере, в 116.27 не работает. Событие OnClose не генериться, соответственно, в процедуру Form1_OnClose выполнение не попадает. Попытка направить в процедуру "силой" (при обработке LastControl) также без результата: код процедуры выполняется, но форма закрывается, несмотря на Exit = false.
Тут же проверяю этот же код в версии 117.24 - все ОК.
Гуру, подскажите, как быть?
Может, есть возможность как-то вернуть исполнение в Main?
Zab
Участник


Вступление в Клуб: 30.08.2013
СообщениеВт Апр 14, 2015 09:12    Ответить с цитатой
Полезность: Нет оценки
В общем, решил проблему следуя совету Amper:
Цитата:
Но можно реализовать с помощью двух операций: основная при запуске через PLPCALL выводит окно второй операции, которое и видит пользователь При этом, основная следит за тем, как вышел пользователь - через OK или CANCEL, и, если нужно, запускает окно заново. Так, кажется, должно работать.
Хоть и костыль, но если уж зачем-то такое понадобилось...

Понятно, что костыль. Понятно, что костыль кривоватый ((.
Поэтому если вдруг кто-нибудь предложит более красивое решение - буду оч рад ).
Вот код клиент-скрипта операции, которая вызывает вторую:
Код:

Public Function Main(LastControl)
   If (LastControl Is Nothing) Then
      ' закольцуем вызов запускаемой операции пока юзер не нажмет ОК
      Do
         result = Form1.ScriptPlayEx("<% PLPCALL %THIS%.[OPER]() %>")
      Loop While result = 0
      ' закроем запускающую операцию
      Call Form1.ScriptPostEvent(OK, "CLICK")
   End If
   Main = True
End Function
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle Часовой пояс: GMT + 3
На страницу Пред.  1, 2, 3
Страница 3 из 3

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Рейтинг@Mail.ru