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

时间:2014-04-03 22:36:08

标签: lotus-notes lotusscript

首先,表单中有一个富文本字段,其中已经输入了文本(对于此场景 - “hello world”)。我把光标放在“你好”字母“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 个答案:

答案 0 :(得分: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字段中单击操作按钮。

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

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

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

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

答案 1 :(得分:0)

第一个问题是,当您单击操作按钮时,您将失去富文本字段的焦点,因此无法知道光标的位置。

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

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

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

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

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

答案 2 :(得分:0)

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

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