次のコードのように NotesRichtextItem クラスの BeginSection メソッドを使うと、リッチテキストフィールドの最後に追加できます。
Dim ss As NotesSession
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument
Dim body As NotesRichTextItem
Dim style As NotesRichTextStyle
Dim col As NotesColorObject
Sub Initialize
Set ss = New NotesSession
Set dc = ss.Currentdatabase.Unprocesseddocuments
Set doc = dc.Getfirstdocument()
Set body = doc.GetFirstItem( "Body" )
Set col = ss.Createcolorobject()
Call col.Setrgb( 0, 0, 255 )
Set style = ss.Createrichtextstyle()
style.Fontsize = 12
style.Notescolor = COLOR_DARK_YELLOW
Call body.Beginsection( "this is section title", style, col, True )
Call body.Appendtext( "this is the string in the section" )
Call body.Endsection()
Call doc.Save( True, False )
End Sub
上のコードで追加したセクションは、下のように表示されます。
文書を編集モードに切り替え、セクションを選択した状態から「セクション」のプロパティを表示すると、「セクションタイトルと境界線」タブの中に「境界線」の「スタイル」という設定項目があります。※英語のプロパティ画面(下図)では Border の Style を指します
境界線の「スタイル」の選択肢は、現行バージョン(11.0)で11種類あります。
上のコードで追加したセクションの境界線の「スタイル」は、何も指定しない場合の(デフォルトの)スタイルになりました。
では、この境界線の「スタイル」は、どうやって指定できるのでしょうか。
BeginSection メソッドの第2パラメータでは NotesRichtextStyle のオブジェクトを指定できます。
Call NotesRichTextItem.BeginSection( title, titleStyle, barColor, expand )
けれども、このオブジェクトには境界線の「スタイル」に該当するものが見当たりません。境界線の「色」は、第3パラメータで指定が可能です
ちなみにセクションを扱う NotesRichTextSection クラスには、境界線の「スタイル」を設定したり取得できそうなメソッド/プロパティはありません。
どうやら標準のクラスでは、新たに作成するセクションの境界線の「スタイル」をデフォルトから変更したり、既存の境界線のスタイルを変更することができないようです。
それでは、このエントリで紹介した XML (Domino DTD = Domino文書型定義)を使う方法で新規に作成する場合はどうでしょうか。
まずは境界線のスタイルを変えて11種類のセクションを追加した文書を作成し、その文書を XML へ出力したものから、境界線のスタイル(borderstyle)の名前を調べてみました。
プロパティの表示
|
borderstyle
|
![]() |
shadow
|
![]() |
none
|
![]() |
single
|
![]() |
double
|
![]() |
triple
|
![]() |
twoline
|
![]() |
windowcaption
|
![]() |
gradient
|
![]() |
tab
|
![]() |
tabdiag
|
![]() |
※表にあるスタイルの名前はこのヘルプ文書にも記載があります
※表の最下行の境界線は バージョン 8 で新たに追加されたスタイルらしいのですが、これはヘルプ文書に記載がありません。また XML へ出力しても borderstyle は設定されませんが、これは KKOOBM8D5V で報告されています。
出力した XML を参考に、borderstyle として tab を指定(21行目)したセクションを、ビューで選択している最初の文書へ追加してみます。
Dim ss As NotesSession Dim db As NotesDatabase Dim dc As NotesDocumentCollection Dim doc As NotesDocument, tmpdoc As NotesDocument Dim rtitem As NotesRichTextItem Dim stream As NotesStream Dim importer As NotesDXLImporter Dim xml$, nid$ Sub Initialize Set ss = New NotesSession Set db = ss.CurrentDatabase xml = |<document form="Main"> <item name="Body"> <richtext> <pardef id="1"> <par def="1"> <pardef id="2" leftmargin="0.7500in"> <section expanded="true"> <sectiontitle borderstyle="tab" color="teal" pardef="2"> <text>this is title string</text> </sectiontitle> <par def="1">inner text</par> </section> <par def="1"> </par></pardef></par></pardef></richtext> </item> </document>| '文書作成用のxmlをストリームへ書き込み、文書へ変換する Set stream = ss.CreateStream Call stream.WriteText( xml ) Set importer = ss.CreateDXLImporter( stream, db ) importer.DocumentImportOption = 2 'DXLIMPORTOPTION_CREATE Call importer.Process '変換した文書のリッチテキストフィールドの内容を選択文書へ追加する nid = importer.GetFirstImportedNoteId Set tmpdoc = db.GetDocumentByID( nid ) '変換した文書 Set dc = db.UnprocessedDocuments Set doc = dc.GetFirstDocument '選択文書 Set rtitem = doc.GetFirstItem( "Body" ) 'セクションを追加するリッチテキストフィールド Call rtitem.AppendRTItem( tmpdoc.GetFirstItem( "Body" ) ) Call doc.Save( True, True ) '変換した文書を削除する Call tmpdoc.Remove( False ) End Sub
実行後にビューで選択していた文書を開くと、下図のとおり tab スタイルのセクションを追加できていました。
既存のセクションの境界線のスタイルを参照したり変更できるプロパティとメソッドが欲しいので、アイデアとして投稿しました。ご賛同いただけるのであれば投票(Vote)してくださると嬉しいです。













voteしました!
返信削除ありがとうございます!
削除