OOobbs2/47
質問
OOobbs2/4で公開した「どこでもPDF」では、Basicで作成したダイアログのイメージコントロールの機能を用いて画像を表示しています。 その際、画像ファイルのコピー先をC:\ドライブに固定して、イメージコントロールのプロパティ、全般タブの「図」欄で指定して読み込んでいます。 これをBasicでイメージコントロールに読み込むことができないか、という質問です。 もしできたとして、環境変数を用いてuser/gallaryディレクトリ以下に置いた画像を読み込めるでしょうか。 最終目的としては、画像は画像用エクステンションで目的のディレクトリにインストール、「どこでもPDF」内の画像読み込みのコードでそのインストール先を指定しておければと思っています。 回答
ギャラリーに何も入っていなかったので、たとえば、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 から取得するか、上記のようなパスの置換を利用するかのどちらかを利用します。 パスの置換なら
設定ファイル用の 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 試しに作ったファイルを置いておきます。
パスに日本語が入ると 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 だとスペースが入っていても大丈夫でしたがほかの環境だと不明。
感想,コメント,メモ
|