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

Тема в разделе "Lotus - Программирование", создана пользователем Idea, 15 май 2008.

  1. Idea

    Idea Гость

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

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

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Искать по слову "Querymodechange".
     
  3. Kee_Keekkenen

    Kee_Keekkenen Well-Known Member

    Регистрация:
    5 сен 2006
    Сообщения:
    616
    Симпатии:
    4
    мда.. тогда документ придется снова переоткрывать в новом воркспейсе..
     
  4. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Да, вроде бы, не придется. :)
     
  5. Cleric-Lviv

    Cleric-Lviv Lotus team
    Lotus team

    Регистрация:
    3 янв 2008
    Сообщения:
    605
    Симпатии:
    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]
    вот и всьо:)
     
  6. Kee_Keekkenen

    Kee_Keekkenen Well-Known Member

    Регистрация:
    5 сен 2006
    Сообщения:
    616
    Симпатии:
    4
    Cleric-Lviv, все это хорошо.. а как на счет Querymodechange ? ctrl+E ни кто не отменял..
     
  7. Archi2001

    Archi2001 Гость

    а вариации на тему continue=False :unsure:
     
  8. Гость

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

    Sandr Гость

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

    Kee_Keekkenen Well-Known Member

    Регистрация:
    5 сен 2006
    Сообщения:
    616
    Симпатии:
    4
    по моему проще при открытии документа определять условие (true|false), а при сохранении его использовать, на остальное можно "забить"..
     
  11. Sandr

    Sandr Гость

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

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

    Kee_Keekkenen Well-Known Member

    Регистрация:
    5 сен 2006
    Сообщения:
    616
    Симпатии:
    4
    Код (Text):
    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

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

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Sandr
    Нафига файловую систему почём зря дёргать?
    Лучше куда нить в другое место писать (глобальная переменная, профайл, этот же документ), а не в notes.ini :)
     
  15. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    По-моему, два эти случая были уже описаны в поиске. :)
    Вот запрет на ctrl+e:
    Код (Text):
    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
     
  16. K-Fire

    K-Fire Гость

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

    Код (Text):
    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 на свою проверку и вуаля.
     
  17. Cleric-Lviv

    Cleric-Lviv Lotus team
    Lotus team

    Регистрация:
    3 янв 2008
    Сообщения:
    605
    Симпатии:
    0
    Ну незнаю как у вас а у меня и Ctrl-E не работает и дабл клик тоже:(
     
  18. Sandr

    Sandr Гость

    Дык я ж для примера навскиждку :)

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

    Cleric-Lviv Lotus team
    Lotus team

    Регистрация:
    3 янв 2008
    Сообщения:
    605
    Симпатии:
    0

    аааа ясненько, плохо прочитал то что ви все тут обсуждали:(
     
Загрузка...

Поделиться этой страницей