今回は、Autoit GUIメニュー、ラジオボタン、チェックボックス、ボタンの色付けのサンプルコード1 で紹介したサンプルコードを違う書き方で、まったく同じ動作をするサンプルコードを紹介します。
サンプルコード
$Radio1 = GUICtrlCreateRadio("上", 24, 88, 113, 17)
$Radio2 = GUICtrlCreateRadio("下", 184, 88, 113, 17)
$Radio3 = GUICtrlCreateRadio("左", 24, 120, 113, 17)
$Radio4 = GUICtrlCreateRadio("右", 184, 120, 113, 17)
上のコードは次のように、一次元配列 を使って書くこともできます。
Global $Radio[4]
Global $Location[4] = ["上", "下", "左", "右"]
Global $LeftTop[8] = [24, 184, 24, 184, 88, 88, 120, 120]
For $i = 0 To 3
$Radio[$i] = GUICtrlCreateRadio($Location[$i], $LeftTop[$i], $LeftTop[$i + 4], 113, 17)
Next
コードが違っても、動作は同じで、ラジオボタンを4つ作成します。
配列を作るには、変数の宣言が必要になります。
宣言には、Dim / Global / Local の 3つのキーワードのどれかを使用します。
主に使うのは Global と Local です。
Global | グローバル変数の作成 |
Local | ローカル/関数内変数を作成 |
配列を使用すると、長いコードを短くすることができます。
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
; ----------------------------------------チェックボックスの判断
If GUICtrlRead($Radio1) = $GUI_CHECKED Then
MsgBox(0, _CheckboxCheck(), '"上" が選択されています。', 0, $Form1)
ElseIf GUICtrlRead($Radio2) = $GUI_CHECKED Then
MsgBox(0, _CheckboxCheck(), '"下" が選択されています。', 0, $Form1)
ElseIf GUICtrlRead($Radio3) = $GUI_CHECKED Then
MsgBox(0, _CheckboxCheck(), '"左" が選択されています。', 0, $Form1)
ElseIf GUICtrlRead($Radio4) = $GUI_CHECKED Then
MsgBox(0, _CheckboxCheck(), '"右" が選択されています。', 0, $Form1)
Else
MsgBox(16, _CheckboxCheck(), "何も選択されていません", 0, $Form1)
EndIf
; ------------------------------------チェックボックスの判断 終了
Case $MenuItem2; 終了
Exit
Case $MenuItem4; WEBサイトへ
ShellExecute("https://autoit.windows-waza.com/")
Case $MenuItem5
MsgBox(0, "バージョン情報", "1.0.0.0", 0, $Form1); バージョン情報
EndSwitch
WEnd
上のコードは、次のように書くことができます。
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE, $MenuItem2; プロフラムを閉じる
Exit
Case $Button1
For $i = 0 To 4; チェックボックスの判断
If $i = 4 Then
MsgBox(16, _CheckboxCheck(), "何も選択されていません", 0, $Form1)
ExitLoop
EndIf
Switch GUICtrlRead($Radio[$i]); $Location[4] = ["上", "下", "左", "右"]
Case $GUI_CHECKED
MsgBox(0, _CheckboxCheck(), '"' & $Location[$i] & '" が選択されています。', 0, $Form1)
ExitLoop
EndSwitch
Next; -----チェックボックスの判断 終了
Case $MenuItem4
ShellExecute("https://autoit.windows-waza.com/"); WEBサイトへ
Case $MenuItem5
MsgBox(0, "バージョン情報", "1.0.0.0", 0, $Form1); バージョン情報
EndSwitch
WEnd
Case $GUI_EVENT_CLOSE, $MenuItem2 の部分を見ると、変数が 2つ指定されているのが分かります。
このように、条件つき命令文の「Switch」では複数の条件を指定することができます。
If $i = 4 Then (変数 $i が 4ならば) でチェックボックスが 1つもチェックされていないことを判断しています。
Switch GUICtrlRead($Radio[$i])
Case $GUI_CHECKED
MsgBox(0, _CheckboxCheck(), ‘”‘ & $Location[$i] & ‘” が選択されています。’, 0, $Form1)
ExitLoop
EndSwitch
変数 $i が 4以外なら、$i = 0 から始まり、一回ループをするごとに変数 $i の値は1増えていきます。
- For $i = 0 To 4
配列 $Location[4] = [“上”, “下”, “左”, “右”] で指定した配列は次のように書いても構いません。
Global $Location[4]
$Location[0] = “上”
$Location[1] = “下”
$Location[2] = “右”
$Location[3] = “左”
一回目のループは $Location[0] 、2回目は $Location[1] 、3回目は $Location[2] 、4回目は $Location[3] となります。
配列の最初は「1」ではなく、「0」から始まるということを覚えておきましょう。
実際にサンプルコードをコピーして動作を確認してみてください。
サンプルコードを読み、各コードの場所にも注意してみましょう。
例えば、チェックボックスが 1つもチェックされていないことを判断しているコードは、ループの最初に記述していますが、もしループの最後に記述してしまうとエラーが出て実行できなくなります。
一度試してみると理解できると思います。
コメント