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

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

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

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

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

Заблокировать двойной клик

  • Автор темы Idea
  • Дата начала
I

Idea

Подскажите пожалуйста, как можно запретить переход в режим редактирования документа с помощью двойного клика (чтоб только по кнопке редактировали)?

з.ы. Помню, что на форуме этот вопрос уже поднимался, но к сожалению в новом поиске ничего не могу найти. Если кто сможет хотя бы ссылочку написать, буду очень благодарна.
 
K

Kee_Keekkenen

мда.. тогда документ придется снова переоткрывать в новом воркспейсе..
 

Cleric-Lviv

Well-known member
03.01.2008
603
0
BIT
0
для етой цели специально в хелпе есть всьо описано! готовий вариант
[codebox]Postopen

Sub Postopen(Source As Notesuidocument)
'Let document pass if new or not in EditMode
'Otherwise if existing document is in EditMode
' Set allowEdit so Querymodechange doesn't reprocess
' Turn EditMode off so document opens in Read mode
' Tell the user to use the action
If source.EditMode And Not source.IsNewDoc Then
allowEdit = True
source.EditMode = False
Messagebox _
"Use Edit mode action to edit document"
Else
allowEdit = False
End If
End Sub

Querymodechange

Sub Querymodechange(Source As Notesuidocument, Continue As Variant)
'Allow user to proceed, and turn off allowEdit if
' user clicked the action (allowEdit on)
' already processed by Postopen (allowEdit on)
' trying to get out of Edit mode
' (allowEdit off but EditMode on)
'Tell user to click action if changing existing document
' to Edit mode and not already processed by Postopen
' (allowEdit and EditMode off)
If allowEdit Or (source.EditMode And Not allowEdit) Then
allowEdit = False
Else
Messagebox _
"Use Edit mode action to edit document"
continue = False
End If
End Sub

Globals
Declarations

Dim allowEdit As Variant

Button Edit

Sub Click(Source As Button)
Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Set uidoc = workspace.CurrentDocument
'Turn on allowEdit so Querymodechange will let it pass
'Turn on EditMode
allowEdit = True
uidoc.EditMode = True
End Sub[/codebox]
вот и всьо:)
 
K

Kee_Keekkenen

Cleric-Lviv, все это хорошо.. а как на счет Querymodechange ? ctrl+E ни кто не отменял..
 
G

Guest

в квариоупен и кваримодченж на форме ставите условие continue=False и ctrl + E, и дабл клик, и пункт редактировать вам не поможет :unsure:
 
S

Sandr

Ерюков Алексей
Поможет..
Писать в нотес.ини переменную по клику на кнопку "Редактировать".
На кверимодчендж читать эту переменную и думать - фалс континуе или нет...
 
K

Kee_Keekkenen

по моему проще при открытии документа определять условие (true|false), а при сохранении его использовать, на остальное можно "забить"..
 
S

Sandr

по моему проще при открытии документа определять условие (true|false), а при сохранении его использовать, на остальное можно "забить"..

Так ведь задача определоять не при открытии, а при событии даблклик, Ctrl+E или переход посредством нажатия спец кнопки...
 
G

Guest

Sandr
не знаю, у меня отлично работает
 
K

Kee_Keekkenen

Код:
Sub Queryopen(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant)	
continue = fc.Queryopen(Source, Mode,Isnewdoc)	
End Sub
Sub Querymodechange(Source As Notesuidocument, Continue As Variant)
Continue = fc.Querymodechange()
End Sub
Sub Querysave(Source As Notesuidocument, Continue As Variant)
continue = fc.Querysave()
End Sub

я имел ввиду, что
событие даблклик происходит после открытия документа.. и для него Sub Querymodechange работает
событие Ctrl+E происходит до открытия документа.. Sub Querymodechange не работает

поэтому, если предполагается, что документ все-таки будет не только открываться для чтения, но редактироватся+сохраняться, то имеет смысл определить "условие" в Queryopen(onload),
его можно использовать в Querymodechange (при Ctrl+E и подобном) срабатывать не будет
и обязательно использовать в Querysave

вероятно это не лучший способ..
 
O

Omh

Sandr
Нафига файловую систему почём зря дёргать?
Лучше куда нить в другое место писать (глобальная переменная, профайл, этот же документ), а не в notes.ini :)
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
4
По-моему, два эти случая были уже описаны в поиске. :)
Вот запрет на ctrl+e:
Код:
Sub Queryopen(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant)
If Mode = 1 Then Continue = False
End Sub

На даблклик уже дали ответ(с использованием глобальной переменной).

Хотя, я бы изменил предложенный Cleric-Lviv вариант.
Есть ощущение, что он будет работать немного не так. А именно при создании документа в бэкэнде и дальнейшем его открытии через EditDocument, он будет переводиться в режим чтения. Т.к. сработает условие в PostOpen:
If source.EditMode And Not source.IsNewDoc Then
 
K

K-Fire

Запрет редактирования по дблклику видимо связан с тем что какая-то проверка не отрабатывается при переводе дока на редактирование?
Вот наш вариант, работает при всех возможных действиях, и по Ctrl-E и по дбл клику и т.д.

Код:
Sub Postopen(Source As Notesuidocument)
If Not Source.EditMode Then Exit Sub
If Source.IsNewDoc Then Exit Sub

Dim ErrorText As String ' not used in this context
Dim security As Security
Set security = New Security(Source.Document, "", ErrorText)
If Not security.CheckRights("EDIT", ErrorText) Then
Source.EditMode = False
Exit Sub
End If
End Sub


Sub Querymodechange(Source As Notesuidocument, Continue As Variant)
If Not source.editMode And Not source.IsNewDoc Then		
Dim ErrorText As String ' not used in this context
Dim security As Security
Set security = New Security(Source.Document, "", ErrorText)
If Not security.CheckRights("EDIT", ErrorText) Then
Continue = False
End If
End If
End Sub

Заменяете вызов класса security на свою проверку и вуаля.
 

Cleric-Lviv

Well-known member
03.01.2008
603
0
BIT
0
Ну незнаю как у вас а у меня и Ctrl-E не работает и дабл клик тоже:(
 
S

Sandr

Sandr
Нафига файловую систему почём зря дёргать?
Лучше куда нить в другое место писать (глобальная переменная, профайл, этот же документ), а не в notes.ini :(
Дык я ж для примера навскиждку :)

Ну незнаю как у вас а у меня и Ctrl-E не работает и дабл клик тоже:)

Ваш пример не пожходит только потому, что условие "редактировать\не редактировать" длолжно определяеться не при открытии, а в процессе работы... вот и все...
 

Cleric-Lviv

Well-known member
03.01.2008
603
0
BIT
0
Ваш пример не пожходит только потому, что условие "редактировать\не редактировать" длолжно определяеться не при открытии, а в процессе работы... вот и все...


аааа ясненько, плохо прочитал то что ви все тут обсуждали:(
 
Мы в соцсетях:

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