tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^3: コマンドボタンがFalseになったときコマンドボタンにピクチャーボックスの絵を貼り付ける。
投稿日: 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" のように、
末尾に \ の無い文字列を返します。パスの操作時には御注意あれ。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。