トグルボタン <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