DXL 活用の調査・検証で、実現できたことや発見したことご紹介する『DXL Step-by-Step』シリーズの第 27 回です。前回の実験結果をもとに、リッチテキストにイメージリソースを表示するサンプルプログラムを作成します。
サンプルと実行結果
リッチテキストにイメージリソースを表示する方法として、次の 3 パターンを作成しました。サイズを指定しない場合、ピクセル数で指定し縦横ともサイズを倍にした場合、そして、画像のサイズを長さ(センチメートル)で指定するパターンです。
メインプログラム
前回『段落と文字の装飾』で作成したエージェントをコピペして修正する前提で記載します。記載していない部分のプログラムについては変更はありません。
まずは、DXL を作成するメインルーチン xSetDXL です。上記 3 パターンごとに関数を作成してコールしています。
Function xSetDXL(vdprs As NotesDOMParser) ・・・ 'リッチテキスト作成 Set den = ddn.CreateElementNode("richtext") Set denRT = denItem.AppendChild(den) '段落定義 Call xSetDXL_pardef(ddn, denRT) 'イメージリソースの追加 Call xSetDXL_ImageResource(ddn, denRT) 'イメージリソースの追加(ピクセル指定) Call xSetDXL_ImageResource_px(ddn, denRT) 'イメージリソースの追加(cm 指定) Call xSetDXL_ImageResource_cm(ddn, denRT) End Function |
イメージリソースの追加
最小のサブ関数、サイズの指定をせずに単純にイメージリソースを表示するだけの xSetDXL_ImageResource 関数です。par、picture、imageref の3 つのノードを階層化して順に挿入しています。最下層の imageref にはイメージリソース名を指定する name 属性を設定しています。
Function xSetDXL_ImageResource(vddn As NotesDOMDocumentNode, vdenRT As NotesDOMElementNode) Dim denPar As NotesDOMElementNode Dim denPic As NotesDOMElementNode Dim den As NotesDOMElementNode Dim dtn As NotesDOMTextNode '段落の作成 Set den = vddn.CreateElementNode("par") Call den.SetAttribute("def", "1") Set denPar = vdenRT.AppendChild(den) '画像の作成 Set den = vddn.CreateElementNode("picture") Set denPic = denPar.AppendChild(den) 'イメージリソースの指定 Set den = vddn.CreateElementNode("imageref") Call den.SetAttribute("name", "411.PNG") Call denPic.AppendChild(den) 'コメントの表示 Set dtn = vddn.CreateTextNode("← サイズ指定なし") Call denPar.AppendChild(dtn) End Function |
画像サイズの指定
xSetDXL_ImageResource_px では、画像サイズをピクセルで指定しています。関数の構造は、上記関数と揃えています。唯一違うのは、picture ノードにサイズを指定する属性 width と height を指定しているところです。
Function xSetDXL_ImageResource_px(vddn As NotesDOMDocumentNode, vdenRT As NotesDOMElementNode) ・・・ '画像の作成 Set den = vddn.CreateElementNode("picture") Call den.SetAttribute("width", "268px") Call den.SetAttribute("height", "152px") Set denPic = denPar.AppendChild(den) ・・・ 'コメントの表示 Set dtn = vddn.CreateTextNode("← ピクセルで指定") Call denPar.AppendChild(dtn) End Function |
同様に長さで指定する場合は次の通りです。第 17 回で作成したセンチメートル(数値)をインチ(文字列)に変換する DXL_CMToInch 関数を利用しています。幅を 2 cm、高さを 1.5 cm に設定してみました。
Function xSetDXL_ImageResource_cm(vddn As NotesDOMDocumentNode, vdenRT As NotesDOMElementNode) ・・・ '画像の作成 Set den = vddn.CreateElementNode("picture") Call den.SetAttribute("scaledwidth", DXL_CMToInch(2)) Call den.SetAttribute("scaledheight", DXL_CMToInch(1.5)) Set denPic = denPar.AppendChild(den) ・・・ 'コメントの表示 Set dtn = vddn.CreateTextNode("← CM をインチに変換して指定") Call denPar.AppendChild(dtn) End Function |
まとめ
イメージリソースの表示は、文字の装飾に比べ、ノードの階層構造が固定され比較的シンプルな構造と言えます。たったこれだけのことで、通常の NotesRichText 関連のクラスでできなったイメージリソース貼り付けができるようになります。DXL の可能性を感じる瞬間ですね。
前回 | DXL Step-by-Step | 次回 |
0 件のコメント:
コメントを投稿