как сделать так, чтобы линки в Rtf открывались в текущем окне

Тема в разделе "Lotus - Программирование", создана пользователем D!m@n, 10 окт 2007.

  1. D!m@n

    D!m@n Гость

    Добрый день!

    Есть RTF-поле. В нем линки. Если пользователь жмет на один из них, документ открывается в новом окне.
    А хотелось бы открывать документ в том же окошке (или хотя бы чтобы исходное закрывалось).
    А как это сделать - не знаю :(

    Пробовал на QueryOpen повесить @Command([CloseWindow]), но это через раз приводит к ошибке :(

    Подскажите, плз, что делать?
     
  2. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    Для: D!m@n
    Прописать не линки, а кнопки ну в них и закрывать текущий док
     
  3. IsAvailable

    IsAvailable Гость

    <!--QuoteBegin-D!m@n+10:10:2007, 16:33 -->
    <span class="vbquote">(D!m@n @ 10:10:2007, 16:33 )</span><!--QuoteEBegin-->Пробовал на QueryOpen повесить @Command([CloseWindow])
    [snapback]81279" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Это куда? В открываемом доке?

    С кнопкой, конечно, бронебойный вариант :)

    Можно и чуть извратиться, чтоб без кнопок - если линки вставляются кодом, то в этом коде предусмотреть, чтоб во вкладываемом документе прописывалась ссылка (унид, например) на документ, в который вкладывается ссылка... Ну и потом уже на событие открытия окна закрывать документ по униду... Но еще раз повторюсь - кажется мне, что попахивает это извратом немного Х-)

    А в чем задача-то? Откуда необходимость закрытия окна?
     
  4. Medevic

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    <!--QuoteBegin-IsAvailable+10:10:2007, 17:23 -->
    <span class="vbquote">(IsAvailable @ 10:10:2007, 17:23 )</span><!--QuoteEBegin-->Ну и потом уже на событие открытия окна закрывать документ по униду...
    [snapback]81293" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Так не получится сделать.

    Если только окольными путями.
     
  5. Sandr

    Sandr Гость

    Нефиг делать... После открытия окна получаем док по униду, говорим ему едитдокумент с параметром ньюинстанс=фалс, получаем из него уидок и говорим ему клоуз... :)
     
  6. D!m@n

    D!m@n Гость

    Мужики, спасибо за советы!

    Попробую пояснить чуть подробнее:

    В RTF-поле отображается структура ветки форума. До этого пользовались имбеднутой вьюхой, но она тоже кое-какие неудобства доставляла...
    RTF-поле формируется динамически при открытии документа. Поэтому кнопки, увы, не подойдут...
    Завтра приду на работу - сделаю скриншотик...

    Как предложил Sandr, сделать можно... Через @InheritedDocUniqueID получать UNID изначального дока, а потом закрывать его... Но тут есть один минус: на экране будет мелькать открываемое окошко :)
    А это как-то некрасиво... :(
     
  7. Sandr

    Sandr Гость

    Есть способ шоб не мигало...
    Пишешь маленький класик, в котором будет функция ОупенДок (или как хочешь) так и назовешь, функия будет вызываться из документа, который тебе нужно будет закрыть. Что должна делать функция - должна открыть то новое окно (документ) которое ты открываешь, и слушать в нем событие постоупен. Как тока постоупен, так сразу же и закрыть текущий документ... :)

    Надеюсь понятно написал... :(
     
  8. D!m@n

    D!m@n Гость

    @InheritedDocUniqueID работает немного по-другому, чем я ожидал...
    Пришлось сделать через переменную окружения.

    Код (Text):
    Sub Postopen(Source As Notesuidocument)
    Dim s As New NotesSession
    Dim thisdb As NotesDatabase
    Dim uiw As New NotesUIWorkspace
    Dim thisdoc As NotesDocument
    Dim uidoc As NotesUIDocument
    Dim doc As NotesDocument

    Set thisdb=s.CurrentDatabase
    Set thisdoc=Source.Document

    prevdocunid$=s.GetEnvironmentString("DiscussDocUNID")

    If prevdocunid$<>"" Then
    Set doc=thisdb.GetDocumentByUNID(prevdocunid$)
    If thisdoc.UniversalID=prevdocunid$ Then
    ' UNID этого документа равен prevdocunid$
    Call s.SetEnvironmentVar("DiscussDocUNID", "")
    Exit Sub
    End If
    If s.GetEnvironmentValue("DiscussSem")="" Then
    ' Ставлю "семафор"
    Call s.SetEnvironmentVar("DiscussSem", "1")        
    Set uidoc=uiw.EditDocument(False, doc, False, , True, False)
    uidoc.Close
    Call s.SetEnvironmentVar("DiscussSem", "")                     
    End If
    End If
    Call s.SetEnvironmentVar("DiscussDocUNID", thisdoc.UniversalID)
    Call s.SetEnvironmentVar("DiscussSem", "")
    End Sub
    Изврат жуткий, конечно... Но работает :)
     
  9. Sandr

    Sandr Гость

    Делй не так... В документе, который тебе нужно закрыть, на кнопку, которая открывает новый документ пишешь так

    Код (Text):
    Set uidoc = ws.CurrentDocument 'Это тот докумет из которого ты открывашь новый и который потом нужно закрыть.

    Set uiNewDoc = ws.EditDocument(True, newdoc) 'newdoc - этот notesdocument который ты собираешься открыть, как ты его получаешь - твое дело

    On Event PostOpen From uiNewDoc Call uidocClose
    Вот и все

    А в документ из которого открываешь дописываешь такую процедурку


    Код (Text):
    Sub uidocClose(someVar as Variant)
    Set uidoc = ws.CurrentDocument
    uidoc.close
    End Sub
    И еще, это будет работать, если в собитии PostOpen нового документа будет хоть какое-то действие... Например Source.Refresh

    Удачи! :)
     
  10. D!m@n

    D!m@n Гость

    Спасибо, конечно :D
    Но, как я сказал выше, кнопка мне не подходит! Отказаться от RTF-линков невозможно...

    В-общем, теперь все работает - и ладно :)

    Спасибо всем ответившим!
     
Загрузка...

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