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

  • Автор темы admigator
  • Дата начала
A

admigator

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

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
ричтекст стили тебе в помощь.
Но только это не подсветить на время, а подсветить в принципе
 
A

admigator

А так чтоб как в поиске, только на время открытия?
Стилями получилось изменить цвет всего поля, а вот одного слова не нашел как.
Может кто подбросит кусочек кода.
 
R

RAJ

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

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

nvyush

Для веба работает открытие документа по ссылке:
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.
 
A

admigator

UP! Может кто еще что-нибудь подскажет.
 

savl

Lotus Team
28.10.2011
2 624
314
BIT
541
ну 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

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
лепим в форме HTML и спокойно светим текстовые поля как нравится
с РТ тоже можно, но его не мешало бы заранее "подготовить" под текстовые поля и реплейс тегов на лету
 
T

TIA

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

nvyush

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

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
471
лепим в форме HTML и спокойно светим текстовые поля как нравится
с РТ тоже можно, но его не мешало бы заранее "подготовить" под текстовые поля и реплейс тегов на лету
тогдауж mime
 
T

TIA

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

admigator

Пытаюсь сделать так:
При открытии документа на 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> не отображается.
Т.е. при открытии дока получаю мое поле все одним шрифтом и с тегами.
Такая беда. :-(
 
Мы в соцсетях:

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