Автоподсветка слова в RT-поле при открытии документа

admigator

Active member
20.12.2010
40
0
#1
Всем добрый день.
Подскажите пожалуйста, как подсветить другим цветом слово в поле Text и RichText при открытии документа
Спасибо
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 803
21
#2
ричтекст стили тебе в помощь.
Но только это не подсветить на время, а подсветить в принципе
 

admigator

Active member
20.12.2010
40
0
#3
А так чтоб как в поиске, только на время открытия?
Стилями получилось изменить цвет всего поля, а вот одного слова не нашел как.
Может кто подбросит кусочек кода.
 

RAJ

Well-known member
17.01.2007
440
0
#5
Всем добрый день.
Подскажите пожалуйста, как подсветить другим цветом слово в поле Text и RichText при открытии документа
Спасибо
если посмотреть внимательно на стандартную подсветку искомых слов,
в свойствах открытого документа можно увидеть поля "$Highlights_ИМЯ_ПОЛЯ", с типом Data Type: Word Highlights.
может как-то этим научиться управлять?
 

nvyush

Lotus team
22.04.2009
2 317
0
#6
Для веба работает открытие документа по ссылке:
httр://servername/databasename/0/uniqueID?opendocument&Highlight=0,SearchWord
Может в XPages сработает открытие по ссылке Notes://servername/databasename/0/uniqueID?opendocument&Highlight=0,SearchWord

если посмотреть внимательно на стандартную подсветку искомых слов,
в свойствах открытого документа можно увидеть поля "$Highlights_ИМЯ_ПОЛЯ", с типом Data Type: Word Highlights.
может как-то этим научиться управлять?
Похоже, только через Lotus CAPI, функция NSFItemAppend, тип TYPE_HIGHLIGHTS.
 

savl

Lotus team
28.10.2011
2 131
102
#8
ну XML еще как вариант:
Выгружаешь док, меняешь RT-поле, загружаешь обратно, открываешь, если он не должен сохраняться, то удаляешь.

<item name='Body' sign='true' seal='true'>
<richtext>
<pardef id='1' leftmargin='1in'><code event='hidewhen'><formula>REM {DNT};
useApplet="False" | form = "Return Receipt"</formula></code></pardef>
<par def='1'/>
<pardef id='2' leftmargin='1in' spaceafter='1.5'/>
<par def='2'><run><font size='12pt' style='bold' color='green'/>dh</run><run
highlight='pink'><font size='12pt' style='bold' color='green'/>d</run><run
highlight='pink'><font size='12pt' style='bold' color='green'/>hdf</run><run
><font size='12pt' style='bold' color='green'/>h</run><run highlight='blue'><font
size='12pt' style='bold' color='green'/>dfh</run><run highlight='pink'><font
size='12pt' style='bold' color='green'/>xcb</run><run highlight='pink'><font
size='12pt' style='bold' color='green'/>xcb</run></par>
</richtext>
</item>


А вот если "на лету", то Lotus CAPI и по байтам шелестить RT-поле в оперативке, просматривать блоки и менять флаги.
Но все равно док должен быть сохранен.
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 231
17
#9
лепим в форме HTML и спокойно светим текстовые поля как нравится
с РТ тоже можно, но его не мешало бы заранее "подготовить" под текстовые поля и реплейс тегов на лету
 

TIA

:-)
Lotus team
15.05.2009
790
3
#10
Ещё такой вариант. Подходит и для обычного, не богатого текста. Делаем на форме рядом 3 поля. Первое и третье обычным шрифтом. Второе подсвеченным. Слово, которое надо подсветить, помещаем во второе поле. Всё что слева от слова -- в первое поле, всё что справа -- в третье. Визуально получается, что текст сплошной, а нужное слово подсвечено.
 

nvyush

Lotus team
22.04.2009
2 317
0
#11
Ещё такой вариант. Подходит и для обычного, не богатого текста. Делаем на форме рядом 3 поля. Первое и третье обычным шрифтом. Второе подсвеченным. Слово, которое надо подсветить, помещаем во второе поле. Всё что слева от слова -- в первое поле, всё что справа -- в третье. Визуально получается, что текст сплошной, а нужное слово подсвечено.
Вопрощающий хочет
так чтоб как в поиске, только на время открытия?
Поиск выделяет все вхождения искомого слова в текст. Это же сколько полей потребуется?..
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 567
263
#12
лепим в форме HTML и спокойно светим текстовые поля как нравится
с РТ тоже можно, но его не мешало бы заранее "подготовить" под текстовые поля и реплейс тегов на лету
тогдауж mime
 

TIA

:-)
Lotus team
15.05.2009
790
3
#14
Вопрощающий хочет Поиск выделяет все вхождения искомого слова в текст. Это же сколько полей потребуется?..
Вопрошающий пишет:
>...как подсветить другим цветом слово...
>...а вот одного слова не нашел как ...
Так что мой ответ легитимен :)
 

admigator

Active member
20.12.2010
40
0
#15
Пытаюсь сделать так:
При открытии документа на Queryopen в поле RichText - F_HTMLTegTable ищу "искомое" слово для подсветки.
Код на Queryopen:
Код:
	Sub Queryopen(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant)
Dim doc As NotesDocument
Set doc = Source.Document
Dim field_text As NotesItem 
Set field_text = doc.GetFirstItem("F_HTMLTegTable")
resstr = ReplaceSubstring(field_text.text, "искомое",{<span style="color: red" ><b>искомое</b></span>}) 
doc.F_HTMLTegTable = resstr		
End Sub
Код поиска и замены :

Код:
Function ReplaceSubstring(sourcestr As String, fromstr As String, tostr As String) As String
' This function replaces characters in a string. Take all the occurrences of "fromstr"
' in the source string and replace them with "tostr"
Dim tempstr As String
Dim convstr As String
Dim i As Long
Dim length As Long
tempstr = sourcestr
If Len(fromstr) = 0 Then
ReplaceSubstring = sourcestr
Exit Function
End If
If Instr(tostr, fromstr) <> 0 Then ' If, for example, "\" is being replaced with "\\"
' Find a character (or set) that is not in the source string.
' Try the extended characters (over 128 ASCII)
i = 128
length = 1
convstr = ""
While convstr = ""
If Instr(tempstr, String$(length, Chr$(i))) = 0 Then convstr = String$(length, Chr$(i))
i = i + 1
If i = 256 Then ' If all the extended characters were in there
length = length + 1 ' Start over, but try 2 extended characters (or 3 or 4)
i = 128
End If
Wend
' Go through tempstr twice - once replacing fromstr with the computed
' string, then replacing the computed string with tostr
While Instr(tempstr, fromstr) <> 0
tempstr = Left(tempstr, Instr(tempstr, fromstr)-1) & convstr _
& Mid(tempstr, Instr(tempstr, fromstr)+Len(fromstr))
Wend
While Instr(tempstr, convstr) <> 0
tempstr = Left(tempstr, Instr(tempstr, convstr)-1) & tostr _
& Mid(tempstr, Instr(tempstr, convstr)+Len(convstr))
Wend
Else ' It's a normal replace substring call - fromstr is not part of tostr
While Instr(tempstr, fromstr) <> 0
tempstr = Left(tempstr, Instr(tempstr, fromstr)-1) & tostr _
& Mid(tempstr, Instr(tempstr, fromstr)+Len(fromstr))
Wend
End If
ReplaceSubstring = tempstr
End Function
Ниже под полем ставлю <ComputedValue> со значением @GetField("F_HTMLTegTable") и для него ставлю свойство "Pass-Thru HTML"
Итого, есди текст не форматированный, без стилей и разных шифтов поле F_HTMLTegTable скрывается по условию "Hide paragraph when formula is true" и в <ComputedValue> отображается текст с подсвеченным словом.
Но если в поле F_HTMLTegTable есть форматированный текст оно не скрывается по условию "Hide paragraph when formula is true" (мистика)
и отображает весь текст одним стилем, естественно с тегами и при этом <ComputedValue> не отображается.
Т.е. при открытии дока получаю мое поле все одним шрифтом и с тегами.
Такая беда. :-(