引数二つの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
と書く方がわかりやすいかも知れない。