• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Работает ли Notestimer в Dialogbox?

  • Автор темы Guest
  • Дата начала
Статус
Закрыто для дальнейших ответов.
G

Guest

Пытаюсь запустить хелповый примерчик по NotesTimer - не хочет работать таймер. :(
Кто работал с таймерами подскажите можно ли их заставить работать в DialogBox? Есть ли еще способы запускать выполнение какой-либо функции через определенное время?

Что делаю:
В форме в Глобал пишу:
Код:
%INCLUDE "lsconst.lss" 
Dim elapsedTime As Integer
Dim elapsedTimer As NotesTimer

В Postopen формы:
Код:
Sub Postopen(Source As Notesuidocument)
Set elapsedTimer = New NotesTimer(1, "Elapsed time since opening document")
elapsedTime = 0
Msgbox "Сделали!"
On Event Alarm From elapsedTimer Call elapsedTimerHandler
elapsedTimer.Enabled = True
End Sub

Добавляю функцию в Глобал:
Код:
Sub elapsedTimerHandler(Source As NotesTimer)
elapsedTime = elapsedTime + 1
End Sub

На форму кидаю кнопку:
Код:
Sub Click(Source As Button)
If elapsedTimer.Enabled Then
If Messagebox _
("Do you want to disable the timer?", _
MB_YESNO + MB_ICONQUESTION, _
"Elapsed timer is enabled") = IDYES Then
elapsedTimer.Enabled = False
End If
Else
If Messagebox _
("Do you want to enable the timer?", _
MB_YESNO + MB_ICONQUESTION, _
"Elapsed timer is disabled") = IDYES Then
elapsedTimer.Enabled = True
End If
End If
End Sub

Вызываю форму:
Код:
Set dlgDoc = Db.CreateDocument
Call WS.DialogBox( "SearchDlg" , True, True, True, True, True, False, "Search", dlgDoc)

Причем если вызвать форму так, то таймер нормально работает:
Код:
	dlgDoc.form = "SearchDlg"
Call WS.EditDocument( True, dlgDoc )
 
A

Axel

Этот вопрос уже подымался на форуме в другой ветке (немного в другом контексте).

Было определено, что с диалог-боксами таймер однозначно не работает.

Судя по всему с любыми модальными окнами таймер работать не будет.
 
G

Guest

Спасибо.
Жаль, что так нельзя сделать. :(

Вообще мне нужно, чтобы пользователь вводил числовое значение, а форма проверяла состояние поля и если символов больше или равно заданному числу (15), то... выполнялись дальнейшие действия (поиск дока).

Попробовала через JS (onKeyPress), но он только под Web похоже, а у меня клиентское приложение.

Как еще можно это реализовать?
Может есть возможность вывести не модальное окно или вызвать обработчик еще каким хитрым способом?
 
A

Axel

<!--QuoteBegin-Юлия+29:08:2006, 15:15 -->
<span class="vbquote">(Юлия @ 29:08:2006, 15:15 )</span><!--QuoteEBegin-->Может есть возможность вывести не модальное окно или вызвать обработчик еще каким хитрым способом?
[snapback]42868" rel="nofollow" target="_blank[/snapback]​
[/quote]

Можно вывести не модальным окном через ws.EditDocument
но тогда надо будет писать свои кнопки типа OK, Cancel и т.п.

Кроме того модальности тогда не будет.
 

Andre

Green Team
29.07.2004
114
1
BIT
1
Спасибо.
Жаль, что так нельзя сделать. :)

Вообще мне нужно, чтобы пользователь вводил числовое значение, а форма проверяла состояние поля и если символов больше или равно заданному числу (15), то... выполнялись дальнейшие действия (поиск дока).

Попробовала через JS (onKeyPress), но он только под Web похоже, а у меня клиентское приложение.

Как еще можно это реализовать?
Может есть возможность вывести не модальное окно или вызвать обработчик еще каким хитрым способом?

Как вариант можно попробовать в диалоге в качестве поля для ввода использовать comboBox с установленными галками allow values not in list на второй закладке свойств поля и Run Exiting/OnChange Events after value change на третьей и обработчиком события OnChange для поля.
Красоты особой в combobox нету, но реализовать задуманное вполне можно
 

Andre

Green Team
29.07.2004
114
1
BIT
1
Да,еще вариант.
Timer можно прикрутить даже к диалоговому модальному окну. Но java script'овый. Кликнуть кнопку с lotus script тоже можно. Вот и получится желаемый эффект
 
G

Guest

Спасибо! Сделала вариант Andre, но с DialogList.
Возникла другая проблема.
Мне нужно по введенному номеру найти документ и открыть его, не кликая на кнопке ОК. Документ находится на ура, но из модального окна я не могу вызвать ws.EditDocument.

Как можно автоматически закрыть диалоговое окно из Postrecalc формы?
Как не потерять введенное значение?

Диалог вызывается из вьюшки.
Других документов кроме того модального окна открывать нельзя. :)

Буду очень признательна за любую подсказку.
 

Andre

Green Team
29.07.2004
114
1
BIT
1
Как можно автоматически закрыть диалоговое окно из Postrecalc формы?

Вызвать в зависимости от условий (насколько я представляю - это нахождение документа) в событии Postrecalc Source.Close или если есть глобальный объект класса UIDocument то можно вызвать close для него.

Не совсем только понятно зачем вызывать PostRecalc постоянным обновлением документа, но это частности

Как не потерять введенное значение?

Диалог вызывается из вьюшки.
Других документов кроме того модального окна открывать нельзя. :)

Найденный документ можно попробовать объявить как глобальный объект и при нахождении документа инициализировать его. На событии QueryClose он еще будет существовать и там можно попробовать дернуть ws.EditDocument. Правда есть сомнения, что сработает, этот вариант не проверял, сорри.

Показать найденный документ по условиям задачи в еще одном диалоговом окне не подойдет ?

Вариант который сработает однозначно - это положить на форму диалога поле, в которое записывать найденный UniversalID документа, после закрытия документа диалога проверять, что вернул диалог - OK или Cancel и в случае если вернул OK - проверять еще заполнение поля хранящего UniversalID найденного документа, далее db.getDocumentByUNID и ws.EditDocument

Сложность может возникнуть с тем, что возвращает диалог при закрытии. Возможно есть смысл отказаться от стандартных кнопок OK, Cancel и сделать свои (смотреть в сторону DialogBoxCanceled и RefreshParentNote - подробнее по созданию custom диалогов можно посмотреть тут )
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!