Тема: AHK: Выполнение действий в gui,2 в зависимости от control`ов gui,1.
Здравствуйте, на вашем форуме нашел очень хороший шаблон для GUI. В зависимости от того, какая вкладка сейчас активна, меняется название кнопки в gui 2. Но как сделать, чтобы для каждой вкладки кнопка в gui 2 выполняла свое действие?
global hGui1, moved
Tabs := [ "1 вкладка"
, "2 вкладка"
, "3 вкладка"
, "4 вкладка" ]
Texts := [ "Информация для первой вкладки"
, "Информация для второй вкладки"
, "Информация для третьей вкладки"
, "Информация для четвёртой вкладки" ]
Gui, +hwndhGui1 -Caption +ToolWindow
Gui, Color, 33CC33F
Gui, Add, Tab2, gButton vTab, % Tabs[1] "|" Tabs[2] "|" Tabs[3] "|" Tabs[4]
Gui, Add, CheckBox
Loop 4 {
Gui, Tab, % A_Index
Gui, Add, Button, x175 y40 w70 gButton vButton%A_Index%, % Chr(0x2192)
}
Gui, 2:+hwndhGui2 +owner1 -Caption +Border
Gui, 2:Add, Button, vInfo gButtonTab Center, % " " Texts[1] " "
VarSetCapacity(WI, 60)
OnMessage(0x3, "WM_MOVE")
OnMessage(0x112, "WM_MOVE") ; WM_SYSCOMMAND = 0x112
Gui, show, w300 h300 Hide
return
$F1::
Gui, 1: Show, % (a := !a) ? "h70" : "Hide"
if !i
Return
i := false
Button:
DllCall("GetWindowInfo", Ptr, hGui1, Ptr, &WI)
((InStr(A_GuiControl, "Button") || (A_GuiControl = "Tab" && i)) && i := !i)
Loop 4
GuiControl,, Button%A_Index%, % Chr(0x2190|(i ? 0 : 2))
if i
Gui, 2:Show, % "x" NumGet(WI, 12, "UInt") " y" NumGet(WI, 24, "UInt")
. " h" NumGet(WI, 32, "UInt") - NumGet(WI, 24, "UInt") " hide"
DllCall("AnimateWindow", Ptr, hGui2, UInt, 400, UInt, 0x40000|(i ? 1 : 0x10002))
if (A_GuiControl = "Tab") { ; если меняется вкладка, меняем информацию в окне
GuiControlGet, Tab
for k, v in Tabs
if (Tab = v)
break
GuiControl, 2:, Info, % Texts[k]
}
;msgbox %A_GuiControl%
return
ButtonTab:
msgbox test
return
WinMove()
{
CoordMode, Mouse
SetWinDelay, -1
SetBatchLines, -1
MouseGetPos, Start_X, Start_Y
WinGetPos, X_Win, Y_Win,,, ahk_id %hGui1%
While GetKeyState("RButton", "P")
{
MouseGetPos, Current_X, Current_Y
moved := (Current_X != Start_X || Current_Y != Start_Y) ? 1 : ""
WinMove, ahk_id %hGui1%,, X_Win + Current_X - Start_X, Y_Win + Current_Y - Start_Y
;Sleep, 10
}
}
~RButton::
MouseGetPos,,, WinID
if (WinID = hGui1)
WinMove()
return
GuiClose:
ExitApp
WM_MOVE(wp, lp, msg, hwnd)
{
global hGui1, WI, i
static k
if (msg = 0x112)
{
if (wp = 0xF020 && k := 1) ; SC_MINIMIZE = 0xF020
Gui, 2:Show, Hide
if (wp = 0xF120 && !(k := 0) && i) ; SC_RESTORE = 0xF120
Gui, 2:Show
}
if (!i || hwnd != hGui1 || k = 1)
return
DllCall("GetWindowInfo", Ptr, hGui1, Ptr, &WI)
Gui, 2:Show, % "x" NumGet(WI, 12, "UInt") " y" NumGet(WI, 24, "UInt")
. " h" NumGet(WI, 32, "UInt") - NumGet(WI, 24, "UInt") " NA"
}