トグルボタン          <TOP>


Buttonをトグルボタンにします。
SendMessage ウィンドウにメッセージを送信
BM_SETSTATE(&HF3) ボタンの反転表示状態を設定する
 

通常Buttonをクリックするとすぐ元に戻りますが、次にクリックされるまでその状態を保ちます。ただそれだけ・・(^^;
「ON/OFF」ボタンの上のSWは、BmpButton(マルチステート)でコマンドボタンと連動させています。(お遊び・・)

 

'================================================================
'= トグルボタン
'=    (ToggleButton.bas)
'================================================================
#include "Windows.bi"

' ウィンドウにメッセージを送信。この関数は、指定したウィンドウのウィンドウプロシージャが処理を終了するまで制御を返さない
Declare Function Api_SendMessage& Lib "user32" Alias "SendMessageA" (ByVal hWnd&, ByVal wMsg&, ByVal wParam&, ByVal lParam&)

#define BM_SETSTATE &HF3                'ボタンの反転表示状態を設定する

Var Shared Button1 As Object
Var Shared BmpButton1 As Object
Var Shared Picture1 As Object
Var Shared Picture2 As Object
Var Shared Bitmap As Object
BitmapObject Bitmap

Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14
BmpButton1.Attach GetDlgItem("BmpButton1")
Picture1.Attach GetDlgItem("Picture1")
Picture2.Attach GetDlgItem("Picture2")

Var Shared ButtonDown As Integer

'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
    Bitmap.LoadFile "LampOff.bmp"
    Picture1.DrawBitmap Bitmap, 0, 0
    Bitmap.DeleteObject

    Bitmap.LoadFile "LampOn.bmp"
    Picture2.DrawBitmap Bitmap, 0, 0
    Bitmap.DeleteObject
End Sub

'================================================================
'=
'================================================================
Declare Sub Lamp_on ()
Sub Lamp_on()
    Picture1.ShowWindow 0
    Picture2.ShowWindow -1
End Sub

'================================================================
'=
'================================================================
Declare Sub Lamp_off ()
Sub Lamp_off()
    
    Picture2.ShowWindow 0
    Picture1.ShowWindow -1
End Sub

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var Ret As Long

    ButtonDown = not ButtonDown
    Ret = Api_SendMessage(Button1.GethWnd, BM_SETSTATE, int(ButtonDown), 0)

    If ButtonDown Then
        Lamp_on
        BmpButton1.SetState 1
    Else
        Lamp_off
        BmpButton1.SetState 0
    End If
End Sub

'================================================================
'=
'================================================================
Declare Sub BmpButton1_on edecl ()
Sub BmpButton1_on()
    If BmpButton1.GetState = 0 Then
        Lamp_off
    Else
        Lamp_on
    End If
    Button1_on
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End