引数二つのProperty
引数二つのProperty
前回
作成したCaptionBox
クラス。
テキストボックスの塗りつぶし色と透過性という基本的なセッティングをするのに、たとえば
With captBox.Fill .ForeColor.RGB = vbBlack .Transparency = 0.4 End With
と書かねばならず、イマイチだなあと思っていた。
色と透過性をいっぺんに設定できないものか、と思ってやってみた。
Property Letを使ってみる
設定だけできたらいいので、書き込み専用のProperty、すなわち、Property Letでいいんでねえか、と思って作ってみた。
リスト1 クラスモジュール CaptionBox
Public Property Let BackColor( _ ByVal colorConstant As Long, _ ByVal transparencyRatio As Single) With captBox_.Fill .ForeColor.RGB = colorConstant .Transparency = transparencyRatio End With End Property
引数を二つ受け取って、それぞれ[Shape].Fill.ForeColor.RGB
プロパティと[Shape].Fill.Transparency
の値をセットするだけ。
問題は使い方。
通常、Propertyをセットするときは、
[オブジェクト式].[プロパティ] = [値]
という形で値をプロパティに渡す。
今回のように、引数が二つあるときはどうするのか。
次のようにするのである。
使ってみる
さっそく、新設のBackColor
プロパティを使ってみよう。
リスト2 標準モジュール
Private Sub testAddTextBox() Dim Sld As Slide Set Sld = ActivePresentation.Slides(1) Dim captBox As CaptionBox Set captBox = insertCaption(Sld, "ち~んw", True) '……(1)' captBox.BackColor(vbBack) = 0.4 '……(2)' captBox.TextFrame.HorizontalAnchor = msoAnchorCenter '……(3)' End Sub Private Function insertCaption( _ ByVal targetSlide As PowerPoint.Slide, _ ByVal captString As String, _ Optional ByVal isBottom As Boolean = False) As CaptionBox Dim ret As CaptionBox Set ret = New CaptionBox Call ret.init(targetSlide, captString) If isBottom Then Call ret.flipHorizontally Set insertCaption = ret End Function
(1)で、insertCaption
メソッドを実行してテキストボックスを一つ目のスライドに設置する。
insertCaption
メソッドの返り値はCaptionBox
クラスのインスタンスなので、設置したテキストボックスは、返り値のインスタンスを通じてあれこれ操作できる。
(2)の
captBox.BackColor(vbBack) = 0.4
が今回のキモ。
BackColor
プロパティの第1引数は、まさにBackColor
プロパティの引数であるかのようにカッコにいれる。で、第2引数を代入演算子(=
)を用いて設定する。
これで、テキストボックスの塗りつぶし色が黒、透過性が40%になる。
あとは、(3)でテキストのヨコ方向の位置を中央揃えにしておしまい。
実行結果
この状態でリスト2を実行すると、
このとおり。
おわりに
問題は、(2)の入力方法がわかりやすいかどうか、だと思う。
入力中に表示されるヒントは
こんな感じ。
Property Letに二つ以上の引数を持たせるのはアリかナシか……。
使用時のコーディングはちょっとわづらわしくなるとはいえ、素直にBackColor
プロパティとTransparency
プロパティの二つを持たせて、
captBox.BackColor = vbBlack captBox.Transparency = 0.4
と書く方がわかりやすいかも知れない。