Top > OOobbs2 > 47

OOobbs2/47 Edit

  • サマリ: Basicダイアログに挿入できる画像ファイルについて
  • 環境: Basic
  • 状態: 解決
  • 投稿者: M.Kamataki
  • 投稿日: 2007-07-14 (土) 11:54:10

質問 Edit

OOobbs2/4で公開した「どこでもPDF」では、Basicで作成したダイアログのイメージコントロールの機能を用いて画像を表示しています。

その際、画像ファイルのコピー先をC:\ドライブに固定して、イメージコントロールのプロパティ、全般タブの「図」欄で指定して読み込んでいます。

これをBasicでイメージコントロールに読み込むことができないか、という質問です。

もしできたとして、環境変数を用いてuser/gallaryディレクトリ以下に置いた画像を読み込めるでしょうか。

最終目的としては、画像は画像用エクステンションで目的のディレクトリにインストール、「どこでもPDF」内の画像読み込みのコードでそのインストール先を指定しておければと思っています。

回答 Edit

  • 読み込めます。

ギャラリーに何も入っていなかったので、たとえば、OOo の prgram ディレクトリにある about.bmp を読み込みます。

Sub Main
Dim oDialog As Object
Dim oImgCtrlModel As Object
  Globalscope.DialogLibraries.LoadLibrary("OOobbs2_47")
  oDialog = CreateUnoDialog(GlobalScope.DialogLibraries.OOobbs2_47.Dialog1)
  oImgCtrlModel = oDialog.getControl("ImageControl1").Model
  oImgCtrlModel.ImageURL = GetSubstitutedPath("$(prog)/about.bmp")
  oDialog.execute()
End Sub

Function GetSubstitutedPath( sPath As String )
  GetSubstitutedPath() = CreateUnoService( _
    "com.sun.star.util.PathSubstitution").substituteVariables( sPath,true )
End Function

環境変数は PathSettings から取得するか、上記のようなパスの置換を利用するかのどちらかを利用します。

パスの置換なら

  • はにゃ?? 2007-07-14 (土) 14:03:54
  • すばらしい。いけました。ではこのコードも使わせてください。 -- M.Kamataki 2007-07-14 (土) 15:22:45
  • どうぞ。 -- はにゃ?? 2007-07-14 (土) 16:27:14
  • バグのため、エクステンションを用いた画像のインストールはしばらく使えないことがわかりました。ちょっと残念。 -- M.Kamataki 2007-07-14 (土) 21:14:51
  • そういえばこのバグはまだ直ってなかったんですね。Basic の oxt ファイルに同梱する方法はどうもうまくいきません・・・。 -- はにゃ?? 2007-07-14 (土) 23:57:54

  • ギャラリーとしてアドオンに入れるのではなく、アドオンのファイルとして追加して設定ファイルを用意すれば使えるようなのでやり方を書いておきます。 -- はにゃ?? 2007-07-15 (日) 14:41:57

設定ファイル用の Schema と設定ファイルを用意します。

設定ファイル用の Schema ファイル AddonConfiguration.xcs

<?xml version='1.0' encoding='UTF-8'?>
<oor:component-schema  oor:name="AddonConfiguration" 
 oor:package="org.hoge.Link" xml:ang="en-US" 
 xmlns:oor="http://openoffice.org/2001/registry" 
 xmlns:xs="http://www.w3.org/2001/XMLSchema" 
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
	<templates>
		<group oor:name="DialogImage">
			<prop oor:name="Url" oor:type="xs:string"/>
		</group>
	</templates>
	<component>
		<set oor:name="DialogImage" oor:node-type="DialogImage"/>
	</component>
</oor:component-schema>

設定ファイル AddonConfiguration.xcu

<?xml version='1.0' encoding='UTF-8'?>
<oor:component-data xmlns:oor="http://openoffice.org/2001/registry" 
 xmlns:xs="http://www.w3.org/2001/XMLSchema" oor:name="AddonConfiguration" 
 oor:package="org.hoge.Link">
	<node oor:name="DialogImage">
		<node oor:name="TopImage" oor:op="replace">
			<prop oor:name="Url" oor:type="xs:string">
				<value>%origin%/images/image.png</value>
			</prop>
		</node>
	</node>
</oor:component-data>

Configuration データ名 name="" は適当に付けます。package="" も他のパッケージなどと同じ名前にならないように付けます。二つとも schema と data で同じにしておきます。

設定データなどは適当に作成します。 %origin% などの部分は Addon の設定を行うときと同じです。

適当に画像などに名前をつけておきます。ここでは TopImage ファイルは images/image.png としました。画像ファイルも oxt ファイルに入れておきます。

二つのファイルを oxt ファイルに追加したら、META-INF/manifest.xml に二つのファイルを記述します。

<?xml version="1.0" encoding="UTF-8"?>
<manifest:manifest>
 <manifest:file-entry manifest:full-path="Link/" manifest:media-type="application/vnd.sun.star.basic-library"/>
 <manifest:file-entry manifest:full-path="AddonConfiguration.xcs" manifest:media-type="application/vnd.sun.star.configuration-schema"/>
 <manifest:file-entry manifest:full-path="AddonConfiguration.xcu" manifest:media-type="application/vnd.sun.star.configuration-data"/>
</manifest:manifest>

設定をマクロなどから取得するには com.sun.star.configuration.ConfigurationAccess を利用します。

Sub Main
Dim oDialog As Object
Dim oImgCtrlModel As Object
  Globalscope.DialogLibraries.LoadLibrary("Link")
  oDialog = CreateUnoDialog(GlobalScope.DialogLibraries.Link.Dialog1)
  oImgCtrlModel = oDialog.getControl("ImageControl1").Model
    ss = GetResourceUrl("/org.hoge.Link.AddonConfiguration/DialogImage","TopImage")
  oImgCtrlModel.ImageURL = GetSubstitutedPath(ss)
  oDialog.execute()
End Sub


Function GetResourceUrl( sNode As String, sResourceName As String )
Dim oProvider As Object, oConfigReader As Object
Dim oNode(0) As New com.sun.star.beans.PropertyValue
  oProvider = CreateUnoService("com.sun.star.configuration.ConfigurationProvider")
  oNode(0).Name = "nodepath"
  oNode(0).Value = sNode
  oConfigReader = oProvider.createInstanceWithArguments( _
    "com.sun.star.configuration.ConfigurationAccess", oNode )
  GetResourceUrl = oConfigReader.getByHierarchicalName( sResourceName ).Url
End Function

試しに作ったファイルを置いておきます。

fileLink.oxt ファイルを修正したものに差し替え。

  • ありがとうございます。まだ内容を解釈中ですが、がんばってみます。 -- M.Kamataki 2007-07-16 (月) 11:32:39
  • マクロがちょっと間違ってました。Main の GetSubstitutedPath が不要です。修正したファイルに変更しました。 -- はにゃ?? 2007-07-16 (月) 14:37:09
  • ドキュメントがあったので、リンク http://api.openoffice.org/files/documents/22/3887/Extensions.pdf -- はにゃ?? 2007-07-16 (月) 21:12:18
  • うまくいきました。ありがとうございます。画像はどこにインストールされるのかと思ったら、拡張機能専用のフォルダがあるんですね。事前にAddonConfiguration.*を用意しておかないとBasicが動かないのは不便ですが、完全なパッケージになるのでユーザーにとっては良いかもしれません。 -- M.Kamataki 2007-07-18 (水) 09:51:10
  • 完成したエクステンションは、https://sourceforge.jp/projects/openoffice-docj/files/?release_id=26366#26366バグがあったのでアップし直しました)で公開しました。お知らせはOOoユーザー会ML http://www.freeml.com/openoffice/10581 へ流しました。 -- M.Kamataki 2007-07-18 (水) 13:58:12
  • 上記MLで流れていた内容に関して。OOoユーザー会MLに参加していないのでここに書いときます。

パスに日本語が入ると Explorer が起動しないようですが、Export_PDF.Module1 の

Sub Open_Work_Folder
	Get_Settings()
	Shell(sExplorer, 1, sOutURL)
End Sub

Sub Open_Work_Folder
	Get_Settings()
	Shell(sExplorer, 1, ConvertFromUrl(sOutURL))
End Sub

にすると日本語が入っていても起動します。(Win Vista)

sOutURL がエンコードされているので、Explorer がファイルを見つけられなかったようです。Vista だとスペースが入っていても大丈夫でしたがほかの環境だと不明。

  • はにゃ?? 2007-07-18 (水) 22:03:39
  • ありがとうございます。これまたバッチリです。 -- M.Kamataki 2007-07-18 (水) 23:17:54

感想,コメント,メモ Edit



Attach file: fileLink.oxt 773 download [Information]

Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes