Как добавить секцию в самое начало документа ?

Тема в разделе "Lotus - Программирование", создана пользователем PavelT100, 27 май 2010.

  1. PavelT100

    PavelT100 Well-Known Member

    Регистрация:
    9 июл 2007
    Сообщения:
    105
    Симпатии:
    0
    Код (LotusScript):
        Dim session As New NotesSession
    Dim rtitem As NotesRichTextItem
    Set rtitem=doc.GetFirstItem("Body")

    Dim richStyle As NotesRichTextStyle
    Set richStyle = session.CreateRichTextStyle

    richStyle.FontSize = 9
    richStyle.Underline = False
    richStyle.Bold=True
    richStyle.NotesColor=COLOR_DARK_BLUE

    Dim begIns As Boolean
    begIns=BeginBodyInsert(rtItem) 
    If Not ( rtItem Is Nothing ) Then      
    Dim colorObject As NotesColorObject
    Set colorObject = session.CreateColorObject
    colorObject.NotesColor = COLOR_BLUE    
    Call rtitem.BeginSection(Format$(Now, "dd/mm/yy hh:nn") & " commente par " & session.CommonUserName, richStyle, colorObject, True)
    richStyle.Bold=False
    richStyle.NotesColor = COLOR_BLACK
    Call rtitem.AppendStyle(richStyle)
    Call rtitem.AppendText( "     " )
    Call rtitem.AppendText( "Нужный текст" )

    Call rtitem.AddNewLine( 1 )
    Call rtitem.EndSection
    If begIns Then
    rtitem.EndInsert
    End if

    Call doc.Save(False, False )   
    End If 
    .....
    Function BeginBodyInsert( rtItem As NotesRichTextItem ) As Boolean
    Dim rtnav As NotesRichTextNavigator
    Dim rtRange As NotesRichTextRange
    Dim firstSection As Boolean

    firstSection = False
    BeginBodyInsert=False  

    If Not ( rtitem Is Nothing ) Then
    If rtitem.ValueLength > 0 Then
    Set rtnav = rtitem.createNavigator()

    If rtnav.FindFirstElement(RTELEM_TYPE_TEXTPARAGRAPH) Then
    BeginBodyInsert=True
    ElseIf rtnav.FindFirstElement(RTELEM_TYPE_SECTION) Then
    BeginBodyInsert=True
    firstSection = True
    ElseIf rtnav.FindFirstElement(RTELEM_TYPE_TEXTRUN) Then
    BeginBodyInsert=True
    End If
    If Not( BeginBodyInsert ) Then
    MessageBox "Can't find where first paragraph starts"
    Exit Function
    End If

    End If


    Set rtRange = rtItem.CreateRange
    Call rtRange.SetBegin(rtNav)
    If Not FirstSection Then
    Call rtnav.SetCharOffset(1)
    Call rtRange.SetEnd(rtNav)
    End If  

    rtNav.Setposition(rtRange)
    If BeginBodyInsert Then
    Call rtitem.BeginInsert(rtnav,False)       
    End If
    End If     
    End Function
    Есть такой код, но он очень проблемный. Если, например, в документе есть секции в начале, а потом идёт текст, то в таком случае моя секция добавится перед текстом, но не перед секциями, то есть не в начало документа.
     
  2. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Документ — это набор полей. РТ-навигатор осуществляет навигацию в пределах поля, но не документа. Документы отображаются в формах, один и тот же документ можно открыть в разных формах. Если на форме поле помещено в секцию, то и текст поля будет отображаться в этой секции.
     
  3. PavelT100

    PavelT100 Well-Known Member

    Регистрация:
    9 июл 2007
    Сообщения:
    105
    Симпатии:
    0
    Да, извиняюсь. Как добавить в начало поля "Body" ? - у этих документов только одно поле Body типа NotesRichTextItem.
     
  4. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    PavelT100
    Вот из справки:
    You cannot create a section containing existing rich text. You must start the section with BeginSection, append rich text, and end the section with EndSection.
    Если нужно заключить имеющийся текст в раздел, то как-то так:
    1. Создать временное рт-поле tempBody.
    2. Открыть в нём раздел (BeginSection).
    3. Добавить в него содержимое поля Body.
    4. Закрыть раздел (EndSection).
    5. Удалить поле Body.
    6. Скопировать поле tempBody в Body.
    7. Удалить поле tempBody.
     
Загрузка...

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