Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


7558 / 13644 ツリー ←次へ | 前へ→

【38214】スピンボタンのforecolorが制御不能 西谷 さくら 06/5/29(月) 20:27 質問[未読]
【38218】Re:スピンボタンのforecolorが制御不能 Kein 06/5/29(月) 21:13 回答[未読]
【38220】Re:スピンボタンのforecolorが制御不能 西谷 さくら 06/5/29(月) 21:27 お礼[未読]
【38225】Re:スピンボタンのforecolorが制御不能 漂流民 06/5/29(月) 22:48 発言[未読]
【38226】Re:スピンボタンのforecolorが制御不能 西谷 さくら 06/5/30(火) 7:19 お礼[未読]
【38277】Re:スピンボタンのforecolorが制御不能 漂流民 06/5/30(火) 21:37 発言[未読]

【38214】スピンボタンのforecolorが制御不能
質問  西谷 さくら E-MAIL  - 06/5/29(月) 20:27 -

引用なし
パスワード
   スピンボタンの三角矢印の色はforecolorといい、通常黒で enabled = false にすると灰色になります。しかし、スピンボタンの backcolor を変更すると、ずぅっと黒のままで enabled = false にしても黒なので使えるように見えてしまいます。スクロールバーでも同じでした(当方EXCEL2000、PCのOSはXP)。やむなく、enabled = false 時に forecolor を強制的に灰色にしようとしても黒のままで、enabled = true に戻したときに灰色になってしまい失敗。どうすればよいのでしょうか。

【38218】Re:スピンボタンのforecolorが制御不能
回答  Kein  - 06/5/29(月) 21:13 -

引用なし
パスワード
   姑息な方法かも知れませんが、Enabled = False と使用不可にすると、オブジェクト
が見えていても何も出来ない、即ち "見えなくても良い" ということにもなりますよね。
それなら Enabled = False のとき、Visible = False にもしてしまえばどうか ?
ということなんですけど・・。

【38220】Re:スピンボタンのforecolorが制御不能
お礼  西谷 さくら E-MAIL  - 06/5/29(月) 21:27 -

引用なし
パスワード
   ▼Kein さん:
>姑息な方法かも知れませんが、Enabled = False と使用不可にすると、オブジェクト
>が見えていても何も出来ない、即ち "見えなくても良い" ということにもなりますよね。
>それなら Enabled = False のとき、Visible = False にもしてしまえばどうか ?
>ということなんですけど・・。
早速の回答ありがとうございます。これは最後の隠し玉にとっておきます。まさにコロンブスの卵です。「最後の隠し玉に」、というのは、わたしの考え方の基本としてユーザーにコントロールが見えなくなったり出てきたりして戸惑わせたくないのです。今見えてるものは突然消えたりしない、と安心感を与えたいのです。でも助かります。ありがとうございます。

【38225】Re:スピンボタンのforecolorが制御不能
発言  漂流民  - 06/5/29(月) 22:48 -

引用なし
パスワード
   ▼西谷 さくら さん:
こんばんわ

現象、確かに確認しました。
原因はちょっと調べてみないと分からないですね。

とりあえず回避策としてこれはどうですか?


Private Sub CommandButton1_Click()
  
  If SpinButton1.Enabled = True Then
    SpinButton1.Enabled = False
    SpinButton1.BackColor = &H8000000F
    SpinButton1.ForeColor = &H80000012
  Else
    SpinButton1.Enabled = True
    SpinButton1.BackColor = &HC0FFFF
    SpinButton1.ForeColor = &H80000012
  End If

End Sub

【38226】Re:スピンボタンのforecolorが制御不能
お礼  西谷 さくら E-MAIL  - 06/5/30(火) 7:19 -

引用なし
パスワード
   ▼漂流民 さん:
>▼西谷 さくら さん:
>こんばんわ
>
>現象、確かに確認しました。
>原因はちょっと調べてみないと分からないですね。
>
>とりあえず回避策としてこれはどうですか?
>
>
>Private Sub CommandButton1_Click()
>  
>  If SpinButton1.Enabled = True Then
>    SpinButton1.Enabled = False
>    SpinButton1.BackColor = &H8000000F
>    SpinButton1.ForeColor = &H80000012
>  Else
>    SpinButton1.Enabled = True
>    SpinButton1.BackColor = &HC0FFFF
>    SpinButton1.ForeColor = &H80000012
>  End If
>
>End Sub
動きました。すごぃ!!この手法の理屈は何なのでしょうか?
もし、説明して頂ければありがたいです。
ありがとうございました。
西谷さくら

【38277】Re:スピンボタンのforecolorが制御不能
発言  漂流民  - 06/5/30(火) 21:37 -

引用なし
パスワード
   ▼西谷 さくら さん:
こんばんわ

>動きました。すごぃ!!この手法の理屈は何なのでしょうか?
>もし、説明して頂ければありがたいです。

原因がよく分からなかったので、とりあえず Enabled を False にしたときに
BackColor・ForeColor を共にデフォルトの システムカラーに設定してみたというだけです。

システムカラー
http://www.shifrol.co.jp/Cdb2/Manual/Design/ColorWinSystem.html


その後、少し調べてみたのですが、結局原因らしいものは分かりませんでした。
お役に立てず、すいません。


ただ、少し検証したところ影響しているのは BackColor のようです。
全て試したわけではないのですが、
BackColorをプロパティウィンドウでパレットの2段目に指定してやると、
モノクロ以外どの色でもEnabled を False にした時 ForeColor は淡色表示されます。
パレットの1段目では全て淡色表示にはならないようです。
3段目・4段目は(モノクロも含め)なったりならなかったりみたいです。
5段目・6段目も全て淡色表示にはならないようです。


どなたか詳しい方フォロー願います。


ご参考までに(参考にならない?)
検証時に使用したコード

'************************************************************************************
'コマンドボタン1つ、スピンボタン1つ、ラベル1つを用意
'ループ脱出処理はしていないので段階数、表示停止時間に注意してください
'************************************************************************************

Private Declare Sub Sleep Lib "KERNEL32.dll" (ByVal dwMilliseconds As Long)

Private Sub CommandButton1_Click()

  Dim i As Integer
  Dim j As Integer
  Dim k As Integer
  Dim r As Integer
  Dim g As Integer
  Dim b As Integer
  Dim iStep As Integer

  Const cStep As Integer = 8     '段階数
  Const tSleep As Integer = 100    '表示停止時間( 1/1000 秒単位)

  SpinButton1.Enabled = False

  iStep = Round(256 / cStep)

  For i = 0 To cStep
    If i * iStep < 256 Then r = i * iStep Else r = 255
    For j = 0 To cStep
      If j * iStep < 256 Then g = j * iStep Else g = 255
      For k = 0 To cStep
        If k * iStep < 256 Then b = k * iStep Else b = 255
        SpinButton1.BackColor = RGB(r, g, b)
        DoEvents
        Label1.Caption = "RGB(" & CStr(r) & ", " & CStr(g) & ", " & CStr(b) & ") "
        Sleep tSleep
      Next k
    Next j
  Next i

End Sub

7558 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free