【问题标题】:How to insert text and possible rich text as well at the current position of the cursor in a rich text field in Lotus Script?如何在 Lotus Script 的富文本字段中的光标当前位置插入文本和可能的富文本?
【发布时间】:2015-03-09 21:22:04
【问题描述】:

首先,表单中有一个富文本字段,其中已经输入了一个文本(对于这个场景 - “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 类等来设计它。如果是这种情况,您将如何在富文本字段中的光标位置插入富文本?

【问题讨论】:

    标签: lotus-notes lotusscript


    【解决方案1】:

    您可以在剪贴板的帮助下在当前光标位置插入文本。只需让用户在对话框中插入文本,单击“确定”后选择文本,复制它,然后将其粘贴到表单中 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 字段中单击操作按钮。

    然后,为 DialogBox 创建一个表单“Dlg”,其中包含 Text 或 RichText 字段“Text”。将以下公式代码添加到表单的 Postrecalc 事件中(在单击“确定”按钮时执行):

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

    复制粘贴方法有很多选项可以将内容放入剪贴板:

    • 在后台创建文本并直接放入剪贴板
    • 在临时文档中创建一个 RichText 项目,其中包含您能想到的所有内容和样式选项,在 UI 中打开文档,将 RichText 项目内容复制到剪贴板并关闭文档而不保存
    • 让用户在文档中创建他们的文本 sn-p。让他们点击“插入文本”按钮选择其中一个 - 只需打开所选文档,将内容复制到剪贴板并关闭它。

    【讨论】:

      【解决方案2】:

      第一个问题是当你点击动作按钮时,你会失去富文本字段的焦点,因此无法知道光标在哪里。

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

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

      最后,在富文本中间插入文本并不容易。在富文本字段中执行特定文本字符串的替换要容易得多。我曾经创建了一个 Lotusscript 类来执行邮件合并(基于模板和带有字段名称和命令的套用信函创建信件),你可以在这里找到它:http://blog.texasswede.com/code-mail-mergeform-letters-in-lotuscript/

      也许这可以帮助你一些。但它必须在后端完成,你不能在前端做很多富文本工作,除非你使用 Midas LSX frpn Ben Langhinrichs (http://www.geniisoft.com)。我认为他有一些 UI 功能。

      但是你最大的问题将是第一个问题,如何在不失去富文本字段焦点的情况下触发代码。我在那里没有看到好的解决方案。您可能需要重新考虑您的设计/方法。

      【讨论】:

        【解决方案3】:

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

        你可以使用... 拨打uidoc.InsertText( docFill.sampleText1(0) )

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-08-03
          • 1970-01-01
          • 1970-01-01
          • 2012-06-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多