tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルコマンドボタンがFalseになったときコマンドボタンにピクチャーボックスの絵を貼り付ける。
記事No15956
投稿日: 2014/09/02(Tue) 18:45
投稿者ジェンガ
VB6.0標準EXEです。
Falseになった時全体にグレーになります。
コマンドボタンがFalseになった後のサブルーチンです。
Sub command12false()
If (Command12.Enabled = False) Then
Picture4.Picture = LoadPicture(App.Path & "\blue and red.jpg")
Picture4.Scale (0, 0)-(Command12.Width, Command12.Height)
Picture4.CurrentX = (Command12.Width - Picture4.TextWidth("HIGH&LOW")) \ 2
Picture4.CurrentY = ((Command12.Height \ 2) - ((Picture4.TextHeight("W")) \ 2))
Me.Picture4.ForeColor = RGB(109, 109, 109)
Picture4.Print "HIGH&LOW"
Set Command12.Picture = Picture4.Image
End If
End Sub
それともプロパティでできるものでしょうか。
初投稿なのでコードなおすところや書き加えるところを教えてほしいです。
VBは初めて5ヶ月くらいです。あと、LOCKEDプロパティーをつかえば良いのでしょうか?

[ツリー表示へ]
タイトルRe: コマンドボタンがFalseになったときコマンドボタンにピクチャーボックスの絵を貼り付ける。
記事No15957
投稿日: 2014/09/02(Tue) 19:47
投稿者魔界の仮面弁士
> Falseになった時全体にグレーになります。

主語が抜けてますよ。
コマンドボタンの「Enabled プロパティ」がFalse になった時、ということですよね。

# 蛇足ですが、CommandButton の既定のプロパティは、Value です。
# 「Me.Command12 = True」あるいは「Me.Command12.Value = True」と書くと、
# Command12 の Click イベントを発生させる事ができます。


> コマンドボタンがFalseになった後のサブルーチンです。
事前設定の説明がゴッソリと端折られていますが、
Command12 の Style は 1 で、Picture4 の AutoRedraw は True なのですね?



> それともプロパティでできるものでしょうか。
どの部分のことを仰っているのか分かりませんが:

テキストを画像中央に重ねて配置しておきたいという話だとしたら、
標準の CommandButton にはその機能が無いため、現状のように、
Picture (あるいは DisabledPicture )プロパティに対して、
文字列を含めた画像としてセットする必要があります。

"Microsoft Forms 2.0 Object Library" 版の CommandButton を使えば、
デザイン時に .PicturePosition = fmPicturePositionCenter としておくことが
可能ですが、こちらはグレー化したときの表現が異なりますね。

[ツリー表示へ]
タイトルRe^2: コマンドボタンがFalseになったときコマンドボタンにピクチャーボックスの絵を貼り付ける。
記事No15958
投稿日: 2014/09/02(Tue) 21:01
投稿者ジェンガ
   魔界の仮面弁士さん返信ありがとうございます。事前の設定を簡略しすぎたため内容がよく伝わらなかったのでもう一度頭で整理して疑問に思ったところを書き出してみました。
command12falseのサブルーチンをform_load form_paintのところに書いたのですがそれは問題ないでしょうか。Command12.Enabled = Trueのとき−−−−@始

Picture4.Picture = LoadPicture(App.Path & "\blue and red.jpg")
Picture4.Scale (0, 0)-(Command12.Width, Command12.Height)
Picture4.CurrentX = (Command12.Width - Picture4.TextWidth("HIGH&LOW")) \ 2
Picture4.CurrentY = ((Command12.Height \ 2) - ((Picture4.TextHeight("W")) \ 2))
Me.Picture4.ForeColor = RGB(0, 0, 0) ’違いはここ
Picture4.Print "HIGH&LOW"
Set Command12.Picture = Picture4.Image−−−−@終
Command12.Enabled = False の時
If (Command12.Enabled = False) Then
Picture4.Picture = LoadPicture(App.Path & "\blue and red.jpg")
Picture4.Scale (0, 0)-(Command12.Width, Command12.Height)
Picture4.CurrentX = (Command12.Width - Picture4.TextWidth("HIGH&LOW")) \ 2
Picture4.CurrentY = ((Command12.Height \ 2) - ((Picture4.TextHeight("W")) \ 2))
Me.Picture4.ForeColor = RGB(109, 109, 109) ’違いはここ
Picture4.Print "HIGH&LOW"
Set Command12.Picture = Picture4.Image
End If                  
またコマンドボタンのLOCKEDプロパティーというのを見つけたのですが、それを使ったほうが良いのでしょうか?
またはコードの順番がいけないのでしょうか。
Command12.Enabled = True
@
Command12.Enabled = False
  command12false

[ツリー表示へ]
タイトルRe^3: コマンドボタンがFalseになったときコマンドボタンにピクチャーボックスの絵を貼り付ける。
記事No15959
投稿日: 2014/09/03(Wed) 10:20
投稿者魔界の仮面弁士
> またはコードの順番がいけないのでしょうか。
何の話でしょうか。というか、そもそも現状の問題点は何なのでしょうか?

それと、command12false というものがあるということは、
command12true 相当のコードも用意してある、ということなのでしょうか。



> もう一度頭で整理して疑問に思ったところを書き出してみました。
整理した結果、肝心の質問内容は何だったのでしょうか?

いきなりコードを提示するのでは無く、記述したコードの「意図」と「目的」を
最初に説明してみて下さい。そうしないと、添削・回答できませんので…。

先ほどの No.15957 でも、私が質問内容を「予想」して答えてはいますが、
その認識が正しかったのか見当違いなのかすら答えて頂けていないようです。


> Me.Picture4.ForeColor = RGB(0, 0, 0) ’違いはここ
> Me.Picture4.ForeColor = RGB(109, 109, 109) ’違いはここ

Enabled = True なら、"HIGH&LOW"を 黒文字で、
Enabled = False なら "HIGH&LOW" を 灰色の文字で
描画したいということでしょうか?


もしそうなら、

Private Property Get Command12Enabled() As Boolean
    Command12Enabled = Command12.Enabled
End Property
Private Property Let Command12Enabled(ByVal canUse As Boolean)
    Picture4.Cls
    '   :
    ' (ここにjpgの割当やX,Y座標指定などの処理を記述)
    '   :
    Picture4.ForeColor = IIf(canUse, RGB(0, 0, 0), RGB(109, 109, 109))
    Picture4.Print "HIGH&LOW"
    Set Command12.Picture = Picture4.Image
    Command12.Enabled = canUse
End Property

のようなプロパティを用意しておくと良いでしょう。


そうすれば今まで、
  Command12.Enabled = False
  command12false
のように 2 行で呼び出していた処理を、
  Command12Enabled = False
の一行だけで済ませられるようになります。もちろん、
  Command12Enabled = True
にすれば、黒文字に戻ります。



> form_load form_paintのところに書いたのですが

まず、Picture4.AutoRedraw = False だとしたら、Load イベントで呼び出すのは
意味がありません。まぁ、その場合はそもそも、Picture4.Image 自体が無意味なので、
今回は Picture4.AutoRedraw = True なのでしょうね。

Picture4.AutoRedraw = True であるならば、Load イベントに書くのは
構わないと思いますが、Form_Paint に記述するのは、タイミングとして少々不自然ですね。
Form の Paint 時に呼び出しているのはどういった理由ででしょうか?



> command12falseのサブルーチンをform_load form_paintのところに書いたのですが
> それは問題ないでしょうか。

command12false のことはサブルーチンではなく、「Sub プロシージャ」あるいは
「メソッド」と呼ぶのが一般的かと思います。VB6 で「サブルーチン」といった場合、
GoSub 〜 Return が先に連想されることがありますので御注意あれ。

専門用語を避けて「form_load および form_paint にて、command12false を
呼び出しているのですが、それは問題無いでしょうか。」と表現しても良いかな。



> またコマンドボタンのLOCKEDプロパティーというのを見つけたのですが、それを使ったほうが良いのでしょうか?
VB6 の CommandButton に Locked プロパティはありません。
VBA の CommandButton にはありますけれどね。

VB6 にも、デザイン時にフォームを右クリックしたときの「コントロールのロック」の状態を
保持するために「Locked プロパティ」が用意されていますが、これは開発環境が内部的に
保持するためのデザイン時プロパティであり、コードから設定/参照できるものではありませんし。



>  Picture4.Picture = LoadPicture(App.Path & "\blue and red.jpg")
> Set Command12.Picture = Picture4.Image
後者には "Set" と書かれていますが、前者には書かれていませんね。
Picture プロパティを割り当てるときは、常に Set ステートメントを併用してください。

VB2 との互換性の関係上、Set 無し(Let 相当)でも代入できるようにはなっていますが
「オブジェクトの代入操作」は本来、Set を使うのが正しい記述方法です。


> Picture4.Picture = LoadPicture(App.Path & "\blue and red.jpg")
アプリがルートフォルダにある場合、App.Path は "C:\" などのように
末尾に \ を伴う文字列を返します。そして、
下位のフォルダにある場合は、"C:\Folder1" のように、
末尾に \ の無い文字列を返します。パスの操作時には御注意あれ。

[ツリー表示へ]
タイトルRe^4: コマンドボタンがFalseになったときコマンドボタンにピクチャーボックスの絵を貼り付ける。
記事No15960
投稿日: 2014/09/03(Wed) 12:12
投稿者ジェンガ
魔界の仮面弁士さんの意見を参考に作ってみたのですが画像で説明したほうが分かりやすいと思い雑談用掲示版で改めて質問しました。そっちを見ていただければよく分かると思います。

[ツリー表示へ]
タイトルRe^5: コマンドボタンがFalseになったときコマンドボタンにピクチャーボックスの絵を貼り付ける。
記事No15961
投稿日: 2014/09/03(Wed) 16:04
投稿者魔界の仮面弁士
> そっちを見ていただければよく分かると思います。

まだ分かりません。(^^;


雑談掲示板 No.212 の内容から、
 「Falseだとコマンドボタンがグレーになってしまいます。」
を問題視しているという点は分かりました。

ですが、そこで「どうなって欲しいのか」が曖昧なままです。

一応、雑談掲示板側にも回答はつけておきましたが
グレーにならないようにしたいのか(元の色のまま?)
グレー以外の色にしたいのか(白と黒など?)
それとも……?

[ツリー表示へ]
タイトルRe^6: コマンドボタンがFalseになったときコマンドボタンにピクチャーボックスの絵を貼り付ける。
記事No15962
投稿日: 2014/09/03(Wed) 21:07
投稿者ジェンガ
Falseになった時ピクチャーボックスの絵(つまり赤と青の画像の上に灰色で"HIGH & LOW" という文字)を貼り付けるということをしたいのですが、可能ですか。
ちなみに、ヌメロン(フジテレビの番組のItemなのですが、)これに似たようなものがあとコマンドボタンで5つぐらいあるのですが全て単色です。なので他はピクチャーボックスを使わずにTrue、Falseでもできます。しかし、High & Lowだけ2色使う必要がありました。そのような理由で上のような要望を書きました。
もしできる方法があれば教えてください。できなければ「できない」という趣旨の内容を送ってください。
私事なのですが大学の課題(レポート)なので9月中旬に提出しなければいけないのでできるだけ返信を早めにして欲しいです。あとプログラムの妥協策でCommand1.Visible = True、 Command1.Visible = Falseのようなコードを使いコマンドボタンを制御する方法を見つけました。もし上の方法が難しいのであれば、これでプログラムを作って行きたいと思います。あとアイテムのコマンドボタンが全てFalseになった時の雑用掲示版に画像を載せます。

[ツリー表示へ]
タイトルRe^7: コマンドボタンがFalseになったときコマンドボタンにピクチャーボックスの絵を貼り付ける。(解決)
記事No15963
投稿日: 2014/09/03(Wed) 22:44
投稿者ジェンガ
大変参考になりました。自分の説明もあやふやの中丁寧なアドバイス本当にありがとうございました。
プログラムの方法は雑用掲示版に軽く説明を載せました。

[ツリー表示へ]