2024/01/28

DXL Step-by-Step:#27)イメージリソースの表示

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 件のコメント:

コメントを投稿