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

Тема в разделе "Lotus - Программирование", создана пользователем admigator, 25 июл 2012.

  1. admigator

    admigator Active Member

    Регистрация:
    20 дек 2010
    Сообщения:
    40
    Симпатии:
    0
    Всем добрый день.
    Подскажите пожалуйста, как подсветить другим цветом слово в поле Text и RichText при открытии документа
    Спасибо
     
  2. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    ричтекст стили тебе в помощь.
    Но только это не подсветить на время, а подсветить в принципе
     
  3. admigator

    admigator Active Member

    Регистрация:
    20 дек 2010
    Сообщения:
    40
    Симпатии:
    0
    А так чтоб как в поиске, только на время открытия?
    Стилями получилось изменить цвет всего поля, а вот одного слова не нашел как.
    Может кто подбросит кусочек кода.
     
  4. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    ну дык сравнил :)
     
  5. RAJ

    RAJ Well-Known Member

    Регистрация:
    17 янв 2007
    Сообщения:
    440
    Симпатии:
    0
    если посмотреть внимательно на стандартную подсветку искомых слов,
    в свойствах открытого документа можно увидеть поля "$Highlights_ИМЯ_ПОЛЯ", с типом Data Type: Word Highlights.
    может как-то этим научиться управлять?
     
  6. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Для веба работает открытие документа по ссылке:
    httр://servername/databasename/0/uniqueID?opendocument&Highlight=0,SearchWord
    Может в XPages сработает открытие по ссылке Notes://servername/databasename/0/uniqueID?opendocument&Highlight=0,SearchWord

    Похоже, только через Lotus CAPI, функция NSFItemAppend, тип TYPE_HIGHLIGHTS.
     
  7. admigator

    admigator Active Member

    Регистрация:
    20 дек 2010
    Сообщения:
    40
    Симпатии:
    0
    UP! Может кто еще что-нибудь подскажет.
     
  8. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    ну 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-поле в оперативке, просматривать блоки и менять флаги.
    Но все равно док должен быть сохранен.
     
  9. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.046
    Симпатии:
    18
    лепим в форме HTML и спокойно светим текстовые поля как нравится
    с РТ тоже можно, но его не мешало бы заранее "подготовить" под текстовые поля и реплейс тегов на лету
     
  10. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    Ещё такой вариант. Подходит и для обычного, не богатого текста. Делаем на форме рядом 3 поля. Первое и третье обычным шрифтом. Второе подсвеченным. Слово, которое надо подсветить, помещаем во второе поле. Всё что слева от слова -- в первое поле, всё что справа -- в третье. Визуально получается, что текст сплошной, а нужное слово подсвечено.
     
  11. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Вопрощающий хочет
    Поиск выделяет все вхождения искомого слова в текст. Это же сколько полей потребуется?..
     
  12. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.079
    Симпатии:
    300
    тогдауж mime
     
  13. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.046
    Симпатии:
    18
    нет
    смысл именно в HTML
    где само поле может біть компутед ;)
    в зависимости от условий можно его и болдом и цветами красить и всё єто на лету
     
  14. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    Вопрошающий пишет:
    >...как подсветить другим цветом слово...
    >...а вот одного слова не нашел как ...
    Так что мой ответ легитимен :)
     
  15. admigator

    admigator Active Member

    Регистрация:
    20 дек 2010
    Сообщения:
    40
    Симпатии:
    0
    Пытаюсь сделать так:
    При открытии документа на Queryopen в поле RichText - F_HTMLTegTable ищу "искомое" слово для подсветки.
    Код на Queryopen:
    Код (LotusScript):
        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
    Код поиска и замены :

    Код (LotusScript):
    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> не отображается.
    Т.е. при открытии дока получаю мое поле все одним шрифтом и с тегами.
    Такая беда. :-(
     
Загрузка...

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