Guiの作成について
Guiの作成の例その2
ソースコードの説明の続き
前のページの続きでカウントする奴のスクリプトの説明をします。
ボタンを押した時の処理
if( ps_soundFlag ){
SoundPlay , %ps_soundFile%
}
ps_numValue++
F_setControl(51, "ps_countText" , ps_numValue)
%--
1 を足した数字を表示させるだけの処理です。
ps_soundFlag
が音を鳴らすかどうかの変数です。
これが
True
の時に音を鳴らすようにしています。
ps_numValue
がカウントしている数字の変数です。
この変数に
1
を足して表示している数字を上書きします。
F_setControl(51, "ps_countText" , ps_numValue)
これが、数字が記入してあるコントロールの数を変更する処理です。
TextRunRun
の関数を使っています。
GuiControl の AHKコマンド を使った場合と同じ動作をします。
GuiControl , 51: , ps_countText , %ps_numValue%
としても同じです。
1つ減らす方のボタン
if( ps_numValue > 0) {
if( ps_soundFlag ){
SoundPlay , %ps_soundFile%
}
ps_numValue--
F_setControl(51, "ps_countText", ps_numValue)
}
%--
1
を引いた数を表示させる処理です。
こちらは ps_numValue の変数の値が 0 より多い場合の時のみ数を引くようになっています。
それ以外は、足すか引くかの違いだけで、
のボタンの処理と同じ内容です。
以上
カウントするやつのスクリプトは以上のようなものになります。
G_subroutine1
や
51GuiClose
などを使うことで、簡易的なGuiなら
TextRunRun上で作る事ができると思います。
オマケ要素
まだ説明していないスクリプトがありますが、
それらはオマケとして追加した右クリックメニューに関することです。
このウインドウ内を右クリックするとメニューが表示されて、オマケ要素を扱えるようになっています。
ここから先はその説明になります。
右クリックメニュー
1_ps_start.trr のスクリプトの中に、以下の様な記述があったと思います。
; 右クリックのメニュー
Menu , ps_RClick, Add, 常に最前面(&T), G_subroutine3
Menu , ps_RClick, Add, 音を鳴らす(&N), G_subroutine4
Menu , ps_RClick, Add
Menu , ps_RClick, Add, キャンセル(&C), G_subroutine5
Menu , ps_RClick, Check, 常に最前面(&T)
Menu , ps_RClick, Check, 音を鳴らす(&N)
この部分がメニューを作っている個所です。
常に最前面(&T)
が指定された場合は
G_subroutine3
のサブルーチンが実行され、
音を鳴らす(&N)
が指定された場合は
G_subroutine4
のサブルーチンが実行されるようになっています。
キャンセル(&C)
が指定された場合は
G_subroutine5
のサブルーチンが実行されるようになっています。
ここでは、
G_subroutine5
のアイテムをあえて作らないか、スクリプトがカラのアイテムを作る事で何もしない動作を実現します。
Menu , ps_RClick, Show, %A_GuiX% , %A_GuiY%
これが右クリックした時にメニューを表示するスクリプトです。
51GuiContextMenu の名前の アイテムを作る事で 51 の番号で作ったGuiが右クリックされた時の動作を指定できます。
常に最前面にするかどうか
if( ps_alwayTopFlag ){
ps_alwayTopFlag := False
Gui , 51:-AlwaysOnTop
Menu , ps_RClick, Uncheck, 常に最前面(&T)
} else {
ps_alwayTopFlag := True
Gui , 51:+AlwaysOnTop
Menu , ps_RClick, Check, 常に最前面(&T)
}
%--
このスクリプトが
常に最前面(&T)
のメニューを操作し、
ウインドウが最前面で固定されるかどうかを操作したものです。
音を鳴らすかどうか
if( ps_soundFlag ){
ps_soundFlag := False
Menu , ps_RClick, Uncheck, 音を鳴らす(&N)
} else {
ps_soundFlag := True
Menu , ps_RClick, Check, 音を鳴らす(&N)
}
%--
このスクリプトが
音を鳴らす(&N)
のメニューを操作し、
音を鳴らすかどうかを決める
ps_soundFlag
の変数の値を変えたものです。
G_subroutine1.trr や G_subroutine2.trr のスクリプトを見ると、 ps_soundFlag の変数によって音が鳴るかどうかを指定している事が分かります。
オマケも含めた起動時のスクリプト
オマケ要素に関しては以上のようなところです。
さてここでオマケ要素も含めた
「使用できるようにする処理」を挙げます。
; 変数の宣言
global ps_countText = 0
global ps_soundFile := A_ScriptDir . "\katikati.wav"
global ps_soundFlag := True
global ps_winTitle := "カウントGui"
global ps_alwayTopFlag := True
global ps_numValue = 0
; Guiを作る
ps_guiMake
; 右クリックのメニュー
Menu , ps_RClick, Add, 常に最前面(&T), G_subroutine3
Menu , ps_RClick, Add, 音を鳴らす(&N), G_subroutine4
Menu , ps_RClick, Add
Menu , ps_RClick, Add, キャンセル(&C), G_subroutine5
Menu , ps_RClick, Check, 常に最前面(&T)
Menu , ps_RClick, Check, 音を鳴らす(&N)
; 表示して、半透明にする
Gui , 51:Show
WinSet , Transparent, 180, %ps_winTitle%
%--
このスクリプトを実行する事で、簡易バードウォッチャーが使えるようになります。
今名付けましたが…
このスクリプトでは、
- グローバル変数の宣言
- Guiを作る ps_guiMake のアイテムの実行
- 右クリックメニューを作る
- さらにオマケでウインドウを半透明にする
ということをしています。
このスクリプトを実行する事でこの簡易バードウォッチャーが使えるようになりますが、
グローバル変数の宣言
と
Guiの作成
と
メニューの作成
を行っている以上、一度きりしか実行しないように気をつけなければなりません。
特に Guiの作成 と メニューの作成 は 2回実行してしまうと、エラーで止まってしまいます。
ですのでこのスクリプトの アイテムは 起動時に実行するアイテム として扱う事を勧めます。
fromFileName
の
startup
フォルダの中に
1_ps_start
という名のフォルダでも作るなどすればよいと思います。
起動時に実行すれば、そのときにこのウインドウが表示されるようにしています。
なお、このウインドウを一度閉じた後にまた表示させたい場合は、
Gui , 51:Show
か
&guiShow 51
といったものを使って表示します。
ストックにでも記入しておけば、
Ctrl+[数字]
のキーで使用できますし、
キーを使って表示する場合は、
&hotkeyOnTextNewFromCommand +^!b "Gui , 51:Show %--"
このようなスクリプトを
1_ps_start.trr
の中に記述しておけば、
テキスト上から
Ctrl+Alt+Shift+B
のキーを押して表示できます。
最後に
AutoHotkey
なので、Guiを作るのが比較的に楽なのと、
fromFileName
を使えば、作った後に必要がなくなったら省いて、
いる時になったら再利用することがしやすいのではないかと思います。
今回でいうなら
pushCounter
のフォルダをどこかに移動しておき、
いる時になったらまた
fromFileName
のフォルダ内に加えればよいだけです。
説明が大まか過ぎたかもしれませんが、 AutoHotkey とほとんど同じスクリプトで作成できる事が確認できるのではないかと思います。