午後わてんのブログ

ベランダ菜園とWindows用アプリ作成(WPFとC#)

エクセル2007アドイン、セルの塗りつぶしとフォントのパレット作ってみた、その10

続き

f:id:gogowaten:20191015142451p:plain

赤枠のとこが追加したもの
表示をするにはその他機能のボタン→もっとだ!のボタンを押す
 
 
最初に表示した時は数値が0.00になっている
この数値はTintAndShade

f:id:gogowaten:20191015142509p:plain

色のついたセルを選択した状態で数値は0.00のまま
その他3のボタンを押すと

f:id:gogowaten:20191015142522p:plain

こうなる
数値の右にあるスライドバーで数値が変更できる
上から0.8 0.6 0.4 -0.25 -0.5にしてボタンを押すと↓

f:id:gogowaten:20191015142541p:plain

0.3 -0.45 0.4 0.5 -0.6だとこう↓

f:id:gogowaten:20191015142556p:plain

 

f:id:gogowaten:20191015142611p:plain

横一列?横一行を選択してボタンを押すと↓

f:id:gogowaten:20191015142625p:plain

数値は-1から1まで
スライドバーでは0.05刻みで手書きならもっと細かく指定できる
けど意味ないかも
 
マイパレットに登録する色を作るのに使えるかなと思って作ったけど
なんかいまいちかな
 
ダウンロード
ファイル名 午後のパレット_20141123.zip
 
ダウンロード先1
ダウンロード先2(ヤフーボックス)
 
 
 
今回使った部品がテキストボックスとスライダーを各5個づつ
最初は手動で作っていたけどやっぱりめんどくさい
パレットと同じように動的作成だ!
パレットに使っている部品はImage
テキストボックスはTextbox、スライダーはSlider
名前が違うだけで同じControl(部品)の仲間なんだから同じように書いてみたけど
動かない
 

f:id:gogowaten:20191015142708p:plain

イメージ 9
スライダーだけ場所が違うのがわかる、ってそれだけ
 
 
実際に書いた文章が
ここからユーザーフォームに書いた--------------------
 
Private clsSL(4) As New Class3 ’フォームの一番先頭で宣言

’ここからUserFormのInitialize

Dim tB As MSForms.TextBox 'MSFormsを付けないと型が違うと言われる
Dim sL As MSComctlLib.Slider 'スライダーはまたちょっと違う、よくわからん

Dim tBH As Single, tBW As Long
tBH = 17.25 'テキストボックスの高さ
tBW = 35.25 'テキストボックスの幅
For i = 0 To 4
    'テキストボックス作成
   
    Set tB = Me.Controls.Add("Forms.TextBox.1", "tB" & i)
    
    With tB
        .Height = tBH
        .Width = tBW
        .Top = i * tBH
        .Left = Me.Width + exW1 - (Me.Width - Me.InsideWidth) 'exW1はその他機能のボタンで広がるウィンドウの幅
        .Font.Name = "Meiryo UI"
        .TextAlign = fmTextAlignRight
        .Text = "0.00"
    End With
    
    'スライダー作成
   
    Set sL = Me.Controls.Add("MSComctlLib.Slider") 'マジかよ、サジかよ、これでいいのか
    
    With sL
        .Left = Me.Controls("tB" & i).Left + tBW
        .Top = Me.Controls("tB" & i).Top
        .Height = 15 ' tBH
        .Width = 41.25
        .LargeChange = 2
        .SmallChange = 1
        .max = 20
        .min = -20
        .Value = 0
        .TickFrequency = 20
        .TickStyle = sldBottomRight
        
    End With
    'スライダーをクラスに登録
    clsSL(i).AddSlider sL, tB.Name 'テキストボックスの名前はスライダーと連動するのに使う
    
Next i
ここまでフォームモジュールに書いた--------------------
 
 ここからクラスモジュールに書いた--------------------
Private WithEvents exSL As MSComctlLib.Slider
Private tbN As String

Public Sub AddSlider(ByVal c As MSComctlLib.Slider, ByVal TextBoxName As String)
    Set exSL = c
    tbN = TextBoxName
End Sub

Private Sub exSL_scroll()
    UserForm午後のパレット.Controls(tbN).Text = Format(exSL.Value / 20, "0.00")
End Sub
ここまでクラスモジュールに書いた--------------------
 
 
 
 
 

画像だと

f:id:gogowaten:20191015142802p:plain

UserForm
緑色の文字はコメントで独自の表現になっている
スライダーをクラスに登録ってのも違うんだろうなあとは思いつつ書いている
 
 

f:id:gogowaten:20191015142825p:plain

クラスモジュール
 
特にスライダーの作成で使う名前がわからなかった
Set sL = Me.Controls.Add("MSComctlLib.Slider")
これが正解かわかっていないけどこれで動いている
このなかのMSComctlLibがわからなかった
スライダーを作るんだからSliderだけでいいと思うんだけど
そんな名前はないよって言われて、Sliderにカーソル合わせてF1キー押しても
ヘルプはありませんとか出るしで
ヤフーでググって
 
ここではスライダーではなくてListViewだけどここを見てやっと動かせた(理解できたわけではない)
 
テキストボックスも
Dim tB As TextBox、これだと型が違うと言われる
Dim tB As MSForms.TextBox、こっちが正解
パレットに使っているImageは
Dim img As Image、これで動いているのに!
 
動的作成だといくつ作ろうが手間は変わらないのがいい
イベントもそれぞに付けられるのはもっといい
今回みたいなスライダーを動かしたらテキストボックスの文字を変更するだけなら
細かな設定を除いたら20行くらいかな
Dim tB As MSForms.TextBox
Set tB = Me.Controls.Add("Forms.TextBox.1")
Dim sL As MSComctlLib.Slider
Set sL = Me.Controls.Add("MSComctlLib.Slider")
テキストボックスはMSForms.TextBox
スライダーはMSComctlLib.Slider
これでできる
 
この記事の続きは