Top > OOoBasic > Generic > Property
*プロパティ [#w010799b]
OOo Basic ではプロパティに "." (ドットオペレータ) を利用して簡単にアクセスできます。そのため見逃しがちですがプロパティにメソッドでアクセスすることもできます。

このページの内容を利用するには [[MRI>OOoBasic/Macros/MRI]] を併用することを強くお勧めします。特定の情報が表示されるのであればその他のオブジェクトインスペクタでもかまいません。


#contents
**概要 [#m1240d35]
OOo Basic ではプロパティ値に "." でアクセスすることが多いですが、com.sun.star.beans.XPropertySet インターフェースなども利用できます。

詳細を知りたい場合には以下リンク参照。
-[[DevGuide Properties>http://wiki.services.openoffice.org/wiki/Documentation/DevGuide/ProUNO/Properties]]
-[[DevGuide UNO_Reflection_API>http://wiki.services.openoffice.org/wiki/Documentation/DevGuide/AdvUNO/UNO_Reflection_API]]
-[[DevGuide XInvocation Bridge>http://wiki.services.openoffice.org/wiki/Documentation/DevGuide/AdvUNO/XInvocation_Bridge]]

これらのリンクをよく調べれば [[MRI>OOoBasic/Macros/MRI]] や[[Basic IDE 入力補助>OOobbs2/101]]での情報表示などで利用している方法が分かります。

注: 下記のインターフェースはオブジェクトがサポートしていないと利用できません。
**XPropertySet [#b1ed4502]
ひとつだけのプロパティ値を取り扱う &idlref(com.sun.star.beans.XPropertySet); インターフェース。

プロパティ値の設定 setPropertyValue、取得 getPropertyValue がプロパティ名指定で行えます。(OOo Basic でも文字列としてプロパティ名を与えたいときに便利。)

また、プロパティが変更されたときのリスナーが利用できます。このとき、プロパティが Bound でなければいけません。特定のプロパティが Bound かどうかは MRI で表示を調べる、または XPropertySetInfo インターフェースなどを利用します。

変更の拒否が可能な VetoableListener も同様です。

com.sun.star.beans.XPropertySetInfo インターフェースは getPropertySetInfo メソッドで取得します。
**XPropertySetInfo [#ef84ec7f]
プロパティの情報を提供してくれる &idlref(com.sun.star.beans.XPropertySetInfo); インターフェース。(getPropertySetInfo メソッドでこのインターフェースを取得しようとしても Null が戻ってきたりすることがあるので注意。)

getPropertyByName メソッドなどの返り値は &idlref(com.sun.star.beans.Property); struct です。

|要素|説明|
|Name|プロパティ名|
|Handle|ハンドル値|
|Type|プロパティ値の型 (言語のブリッジによって実装が異なるので注意)|
|Attribute|属性 &idlref(com.sun.star.beans.PropertyAttribute);|

ハンドル値は XFastPropertySet インターフェースで利用されます。また、プロパティ値の型は Type から、プロパティが Bound かどうかなどは Attribute 要素から取得できます。
**XPropertyState [#f89deeba]
プロパティの状態を提供してくれる &idlref(com.sun.star.beans.XPropertyState); インターフェース。このインターフェースを利用すればあるプロパティがデフォルトの値を持っているかどうかなどが確認できます。
**XMultiPropertySet [#y76f1f14]
複数のプロパティ値にアクセスするときに利用できる &idlref(com.sun.star.beans.XMultiPropertySet); インターフェース。(役に立つインターフェースですがサポートされていないことがあるのでオブジェクトごとに要確認。複数のプロパティ値を設定、取得する際に API コールが一度で済むので少しだけ実効速度が速くなるかもしれません。)

getPropertyValues メソッドでの取得時には与えたプロパティ名と同じ順でプロパティ値が []any で戻ります。設定時にはプロパティ名と値の順番を合わせておきます。

「プロパティ名はアルファベット順に揃えておけ」と書かれてありますが、…。
**XMultiPropertyStates [#e72014a2]
XPropertyState インターフェースと同じように利用します。
**XFastPropertySet [#m65a4df6]
ハンドル値を利用してプロパティに「速く」アクセスする (らしい) &idlref(com.sun.star.beans.XFastPropertySet); インターフェース。

プロパティが内部で配列で管理されていることを利用して、その配列のインデックスで値を取得する。配列のインデックスがプロパティのハンドル値になります。プロパティのハンドル値は XPropertySetInfo インターフェースを利用して調べられます。(注: ハンドル値はバージョン依存性が大きいです。)

[プロパティ名からインデックスを調べる -> 配列から値を返す] のプロセスが省略されるためアクセスが速くなります。

このインターフェースは利用できるオブジェクトが少ないので注意。

(使ってみましたが、誤差くらいしか変わりませんでした。要テスト。)

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