• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

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

  • Автор темы D!m@n
  • Дата начала
D

D!m@n

Добрый день!

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

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

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

morpheus

Для: D!m@n
Прописать не линки, а кнопки ну в них и закрывать текущий док
 
I

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]
Это куда? В открываемом доке?

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

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

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

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
4
<!--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]
Так не получится сделать.

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

Sandr

Так не получится сделать.

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

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

D!m@n

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

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

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

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

Sandr

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

Надеюсь понятно написал... :(
 
D

D!m@n

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

Код:
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

Изврат жуткий, конечно... Но работает :)
 
S

Sandr

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

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

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

On Event PostOpen From uiNewDoc Call uidocClose

Вот и все

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


Код:
Sub uidocClose(someVar as Variant)
Set uidoc = ws.CurrentDocument
uidoc.close
End Sub

И еще, это будет работать, если в собитии PostOpen нового документа будет хоть какое-то действие... Например Source.Refresh

Удачи! :)
 
D

D!m@n

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

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

Спасибо всем ответившим!
 
Мы в соцсетях:

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