2020年3月4日水曜日

セクションの境界線のスタイルを指定するには

LotusScript を使ってリッチテキストフィールドへセクションを追加したい場合があります。

次のコードのように 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 = |





this is title string inner text
| '文書作成用の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)してくださると嬉しいです。

2 件のコメント: