2014-04-03 2 views
1

처음에는 이미 입력 된 텍스트가있는 서식있는 텍스트 필드가 있습니다 (이 시나리오에서는 "hello world"). "hello"에서 "o"문자 바로 뒤에 커서를 놓았습니다. 하나의 텍스트 필드가있는 대화 상자를 열 수있는 버튼이 있는데, 리치 텍스트 필드의 커서의 현재 위치에있는 대화 상자에서 해당 필드의 텍스트를 어떻게 삽입 할 수 있을지 궁금합니다.LotusScript의 서식있는 텍스트 필드에 커서의 현재 위치에 텍스트와 가능한 서식있는 텍스트를 삽입하는 방법은 무엇입니까?

지금까지 내가 가지고있는 코드는 다음과 같습니다

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 텍스트 필드에 "유래"를 입력한다고 가정 해 봅시다. 확인을 클릭하면 서식있는 텍스트 필드의 커서 위치에 삽입됩니다. 결과는 "hellostackoverflow world"가 될 것입니다.

기타 문의 사항이 있습니다. 내가 텍스트를 붉은 색이나 다른 글꼴로 만들고 싶었 기 때문에 notesrichtextstyle 클래스 등을 사용하여 디자인 할 것이라고 가정 해 봅시다. 리치 텍스트 fiel의 커서 위치에 리치 텍스트를 어떻게 삽입 할 수 있습니까?

답변

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"양식을 만듭니다.

    : 당신은 클립 보드에 내용을 넣어 복사 - 붙여 넣기 - 접근 방식 선택의 여지가

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

    : (이 "OK"버튼 클릭에 실행 된 것)의 Postrecalc 이벤트를 형성하기 위해 다음과 같은 식의 코드를 추가합니다

  • 백엔드에 텍스트를 작성하고 클립 보드에 직접 넣으십시오.
  • 생각할 수있는 모든 컨텐츠 및 스타일 옵션을 사용하여 임시 텍스트 문서에 리치 텍스트 항목을 작성하고 UI에서 문서를 열고 클립 보드에 리치 텍스트 항목 컨텐츠를 복사 한 후 닫으십시오 저장하지 않고 문서
  • 사용자가 문서에 텍스트 조각을 만들 수 있습니다. "텍스트 삽입"버튼을 클릭하여 하나를 선택하게하십시오 - 선택한 문서를 열고 클립 보드에 내용을 복사 한 다음 닫으십시오.
0

첫 번째 문제는 동작 버튼을 클릭하면 리치 텍스트 필드의 초점이 사라지고 커서가 있던 위치를 알 수있는 방법이 없다는 것입니다.

나는 또한이 같은 확장 된 표기법을 사용하지 않는 것이 좋습니다 것입니다 : 문자열 1 = docFill.sampleText1 (0) 사용하는 대신 NotesDocument 클래스의 GetItemValue 방법 (성능 및 미래 교정 등 여러 가지 이유에 대한 당신은 단지 사용자가 텍스트를 입력해야 할 경우 코드.

는 왜 InputBox 함수를 사용하지?

마지막으로, 리치 텍스트의 중간에 텍스트를 삽입 할 수있는 쉬운 방법이 없다. 그것을 서식있는 텍스트 필드에서 특정 텍스트 문자열을 대체하는 것이 훨씬 쉽습니다. 필자는 mailscribe를 수행하기 위해 Lotusscript 클래스를 만들었습니다 (편지 ba 만들기 템플릿 및 필드 이름과 명령이 포함 된 양식 편지에서 sed)을 찾으려면 여기에서 찾으십시오. http://blog.texasswede.com/code-mail-mergeform-letters-in-lotuscript/

아마도 그게 도움이 될 것 같습니다. 하지만 백엔드에서해야만합니다. Midas LSX fr Benn Langhinrichs (http://www.geniisoft.com)를 사용하지 않으면 프론트 엔드에서 많은 텍스트 작업을 수행 할 수 없습니다. 나는 그가 UI 기능을 가지고 있다고 생각한다.

하지만 가장 큰 문제는 첫 번째 문제, 서식있는 텍스트 필드의 포커스를 잃지 않고 코드를 트리거하는 방법입니다. 거기에 좋은 해결책이 보이지 않습니다. 당신은 당신의 디자인/접근 방식을 다시 생각해 볼 수 있습니다.

0

작업 표시 줄의 단추를 사용하면 포커스가 서식있는 텍스트 필드와 함께 유지됩니다. 그런 다음 uidoc.InsertText("")을 사용하여 커서의 현재 위치에 텍스트를 삽입 할 수 있습니다.

전화 uidoc.InsertText(docFill.sampleText1(0))

관련 문제