首页 文章

如何在 Lotus Script 中的富文本字段中的光标的当前位置处插入文本和可能的富文本?

提问于
浏览
1

首先,表单中有一个富文本字段,该文本字段已经输入了一个文本(对于这种情况-“ hello world”)。我将光标放在“ hello”字母“ o”之后。我有一个按钮,它将打开一个带有一个文本字段的对话框,我想知道如何将富文本字段中光标当前位置的对话框中来自该字段的文本插入到对话框中。

到目前为止,我拥有的代码是:

Sub Click(Source As Button)
    Dim workspace As New NotesUIWorkspace
    Dim s As New NotesSession
    Dim db As NotesDatabase
    Set db = s.currentdatabase
    Dim docFill As New notesdocument(db)
    Call workspace.DialogBox _
    ( "Test", True, True, False, False, _
    False, False, "Test Insert text at current position in rich text field", docFill, True, False, True )

    Dim string1 As String

    string1 = docFill.sampleText1(0)

    Dim rts As NotesRichTextStyle
    Set rts = s.CreateRichTextStyle

    End Subs
End Sub

假设我在 sampleText1 文本字段中输入了“ stackoverflow”。单击确定后,它将被插入到富文本字段中光标的位置。因此结果将是“ hellostackoverflow world”。

也只是一个额外的问题。假设我还希望文本为红色或其他字体,所以我将使用 notesrichtextstyle 类等进行设计。在这种情况下,如何将富文本插入光标在富文本字段中的位置?

3 回答

  • 2

    您可以借助剪贴板在当前光标位置插入文本。只需让用户在对话框中插入文本,单击“确定”后选择文本,复制文本,然后将其粘贴到表单中 RichText 字段中的当前光标位置即可。

    为此,请使用 LotusScript 代码在表单的操作栏中创建“插入文本”操作

    Sub Click(Source As Button)
        Dim workspace As New NotesUIWorkspace
        Dim uidoc As NotesUIDocument
        Dim doc As NotesDocument    
        Set uidoc = workspace.CurrentDocument
        Set doc = uidoc.Document
        If workspace.DialogBox _
            ("Dlg", True, True, False, True, _
            True, False, "Test insert text", doc, True, False, True ) Then
                    uidoc.Paste
        End If  
    End Sub
    

    操作栏中的操作具有以下优点:它们不会在单击事件时更改文档中光标的位置。因此,单击操作按钮,光标仍停留在 RichText 字段中的当前位置 e.g 上。

    然后,为带有文本或 RichText 字段“文本”的对话框创建窗体“ Dlg”。将以下公式代码添加到窗体的 Postrecalc 事件中(在“确定”按钮单击时执行):

    @Command([EditGotoField]; "Text");
    @Command([EditSelectAll]);
    @Command([EditCopy])
    

    copy-paste-approach 有很多选项可将内容放入剪贴板:

    • 在后端创建文本并将其直接放入剪贴板

    • 在临时文档中创建一个 RichText 项目,其中包含您可以想到的所有内容和样式选项,在 UI 中打开该文档,将 RichText 项目内容复制到剪贴板并关闭文档而不保存

    • 让用户在文档中创建其文本片段。让他们单击“插入文本”按钮选择其中之一-只需打开所选文档,将内容复制到剪贴板并关闭即可。

  • 0

    第一个问题是,当您单击操作按钮时,您将失去对富文本字段的关注,因此无法知道光标在哪里。

    我还建议您不要使用这样的扩展符号:string1 = docFill.sampleText1(0)而改用 NotesDocument 类的 GetItemValue 方法(出于多种原因,包括性能和 future-proofing 代码)。

    如果只想让用户输入一些文本,为什么不使用 InputBox 函数呢?

    最后,没有一种简单的方法可以在富文本格式的中间插入文本。在富文本字段中执行特定文本字符串的替换要容易得多。我曾经创建一个 Lotusscript 类来执行 mailmerge(基于模板以及带有字段名和命令的套用字母来创建字母),您可以在这里找到它:http://blog.texasswede.com/code-mail-mergeform-letters-in-lotuscript/

    也许那可以帮助您一些。但这必须在后端完成,除非您使用 Midas LSX frpn Ben Langhinrichs(http://www.geniisoft.com),否则您不能在前端进行大量的 RTF 工作。我认为他有一些 UI 功能。

    但是,最大的问题将是第一个问题,即如何在不失去 RTF 文本域焦点的情况下触发代码。我在那里看不到一个好的解决方案。您可能需要重新考虑自己的 design/approach。

  • 0

    如果使用操作栏中的按钮,则焦点将保留在 RTF 字段中。然后,您可以使用uidoc.InsertText("")将文本插入光标的当前位置。

    您可以使用...致电uidoc.InsertText( docFill.sampleText1(0) )

相关问题