プロパティの公開

プロパティを公開するには、2 とおりの方法があります。

  • 値として   プロパティは、スクリプト コンポーネントのユーザーが読み取りおよび書き込み可能なグローバル変数です。変数の値は、グローバル値に格納されるので、Windows® スクリプト コンポーネント ファイルのスクリプトで利用できます。
  • 関数として   プロパティは、関数を使用して定義します。このため、プロパティ値を計算したり、プロパティを読み取り専用、書き込み専用、読み書き可能のいずれかに設定したりすることができます。

プロパティは、スクリプト コンポーネントの既定値として設定することもできます。

プロパティを値として公開するには

  1. <public> 要素を <component> 要素の子要素として作成します。

  2. <public> 要素に、プロパティ値を格納する変数を指定する <property> 要素を記述します。

  3. プロパティの値を初期化するには、propertyName に一致する名前 (propertyVariable を指定している場合は、propertyVariable に一致する名前) を持つグローバル変数を <script> 要素に作成し、この変数に値を代入します。

  4. 次のコードは、2 つのプロパティ (name と tag) が単なる値として公開される例です。これらのプロパティは、<script> 要素でグローバル変数を使用して初期化されています。

    メモ   <script> 要素内のスクリプトを隠蔽するには、CDATA セクションが必要です。詳細については、「スクリプト コンポーネント ファイルと XML 適合性」を参照してください。

    <public>
       <property name="name"/>
       <property name="tag" internalName="tagVar"/>
    </public>
    
    <script language="VBScript">
       <![CDATA[
       Dim name
    name = "script component"   ' name プロパティの値を初期化します。
       Dim tagVar
    tagVar = "10"   ' tag プロパティの値を初期化します。
       ]]>
    </script>
    

関数を使用したプロパティの公開は、メソッドの公開と似ています。

関数を使用してプロパティを公開するには

  1. スクリプト コンポーネント ファイルの <public> 要素内に <property> 要素を記述します。<property> 要素には、read 関数を定義する <get> 要素と、write 関数を定義する <put> 要素を記述します。<put> 要素を記述しない場合、プロパティは読み取り専用になります。<get> 要素を記述しない場合、プロパティは書き込み専用になります。

  2. <public> 要素の外側の <script> 要素内で、関数を実装するプロシージャを記述します。プロパティの値を設定する関数 (つまり put 関数) は、プロパティの値として設定される 1 つの引数を受け取る必要があります。

    プロシージャの名前は、<property> 要素で指定した内部名と一致する必要があります。internalName 属性を指定していない場合、read 関数は名前の先頭に get_ を付け、write 関数は名前の先頭に put_ を付ける必要があります。

  3. たとえば、次のコードは、sname、dateOfBirth、age の 3 つのプロパティを公開するスクリプト コンポーネント ファイルです。dateOfBirth プロパティは関数によって定義されるので、エラー チェックを含めることができます。age プロパティは、計算により求められるため、読み取り専用で定義されています。

    メモ   <script> 要素内のスクリプトを隠蔽するには、CDATA セクションが必要です。詳細については、「スクリプト コンポーネント ファイルと XML 適合性」を参照してください。

    <public>
       <property name="sname"/>
       <property name="age">
          <get internalName="readAge"/>
       </property>
       <property name="dateOfBirth">
          <get internalName="readDOB"/>
          <put internalName="writeDOB"/>
       </property>
    </public>
    
    <script language="VBScript">
    <![CDATA[
    Dim sname   ' 読み書き可能な sname プロパティ (関数なし)。
    Dim gDOB   ' 誕生日を格納するグローバル変数。
    
    Function readDOB()
       ' dateOfBirth プロパティの値を取得します。
       readDOB = gDOB
    End Function
    
    Function writeDOB(newDOB)
       ' dateOfBirth プロパティの値を設定します。
       If isDate(gDOB) Then
          ' エラーを確認します。
          gDOB = newDOB
       End If
    End Function
    
    Function readAge()
       ' 読み取り専用の age プロパティを計算します。
       If isDate(gDOB) Then
          dobM = DatePart("m", gDOB)
          dobD = DatePart("d", gDOB)
          dobY = DatePart("yyyy", gDOB)
          todayY = DatePart("yyyy", Date)
          age = todayY - dobY
    
          ' 今年の誕生日が過ぎていない場合は調整します。
          bday = DateValue(dobM & "/" & dobD & "/" & todayY)
          If DateDiff("d", bday, DateValue(Date)) < 0 Then
             age = age - 1
          End If
          readAge = age
       End If
    End Function
    ]]>
    </script>
    

スクリプト コンポーネントで既定のプロパティを指定できるので、ホスト アプリケーションは、明示的にプロパティの名前が記述されていなくても、プロパティの値を取得したり、設定したりできます。たとえば、sname というプロパティを公開しておき、既定として設定した場合、Visual Basic では次の 3 つの方法で参照できます。

Set component = CreateObject("Component.MyComponent")
n = component.sname   ' 明示的にプロパティを取得します。
n = component   ' 既定のプロパティとして sname の値を取得します。

既定のプロパティを指定するには、特別なデスパッチ識別子 (dispid) をメソッドに割り当てる属性を記述します。dispids の詳細については、「イベントの公開」を参照してください。

既定のプロパティを指定するには

  • <property> 要素では、次のコードのように dispid="0" を記述します。

    <property name="sname" dispid="0"/>
    

    メモ   この方法は、既定のメソッドまたは既定のプロパティを指定する際に使用できますが、両方は指定できません。スクリプト コンポーネントでは、dispid の 0 がただ 1 つの要素です。

参照

イベントの公開 | メソッドの公開 | スクリプト コンポーネント ファイルの内容 | スクリプト コンポーネント ファイルと XML 適合性