1

Тема: AHK: Вопос по кнопкам GUI (присвоение переменной)

Прошу помощи с простеньким скриптом, завязанным на GUI. Что требуется: при нажатии на кнопку в GUI, выполняется

определённое действие.

Gui, Add, Button, x2 y20 w100 h35 g123 , One Two Three 
Gui, Add, Button, x112 y20 w100 h35 gqwe, qwe
Gui, Add, Button, x222 y20 w100 h35 g789, 789
Gui, Show, x142 y93 h70 w325, GUI
return

123:
MsgBox 123 ; и т.д. строк на 10
return

qwe:
MsgBox qwe ; и т.д. строк на 10
return

789:
MsgBox 789 ; и т.д. строк на 10
return

В чём проблема - слишком много пунктов в gui и хотелось бы уменьшить объём кода. Код одинаков для всех кнопок, меняется лишь один параметр, хотелось бы значительно уменьшить код, создав для каждой кнопки свою переменную (типа var), которая бы подставлялась в код (%var%). Заранее спасибо.

2

Re: AHK: Вопос по кнопкам GUI (присвоение переменной)

Можно так:


Gui, Add, Button, x2 y20 w100 h35 g123 , One Two Three 
Gui, Add, Button, x112 y20 w100 h35 gqwe, qwe
Gui, Add, Button, x222 y20 w100 h35 g789, 789
Gui, Show, x142 y93 h70 w325, GUI
return

123:
    var = 123
    Goto, abc
qwe:
    var = qwe
    Goto, abc
789:
    var = 789
abc:
    MsgBox, %var%
    Return

3

Re: AHK: Вопос по кнопкам GUI (присвоение переменной)

А проще так:

Gui, Add, Button, vMyButton1 gLabel, Кнопка 1
Gui, Add, Button, vMyButton2 gLabel, Кнопка 2
Gui, Add, Button, vMyButton3 gLabel, Кнопка 3
Gui, Show, w200 h100
Return

Label:
   MsgBox, % A_GuiControl
   Return

Или даже так:

Gui, Add, Button, gLabel, Кнопка 1
Gui, Add, Button, gLabel, Кнопка 2
Gui, Add, Button, gLabel, Кнопка 3
Gui, Show, w200 h100
Return

Label:
   MsgBox, % A_GuiControl
   Return
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

4 (изменено: Remelibo, 2015-07-09 20:53:52)

Re: AHK: Вопос по кнопкам GUI (присвоение переменной)

YMP и teadrinker, большое спасибо!

Появился ещё 1 небольшой вопрос (надо было его заранее продумать, конечно...) - хотелось бы реализовать 3 разных действия при нажатии на кнопку в GUI, а не одно. Вроде через функцию Radio это возможно реализовать задуманное - было бы идеально, если бы через 3 чекбокса у уголке переключалось действие.

В теории, я представляю себе это как-то так (а вот на практике - знаний не хватает):

Gui, Add, Button, x2 y20 w100 h35 g123 , One Two Three 
Gui, Add, Button, x112 y20 w100 h35 gqwe, qwe
Gui, Add, Button, x222 y20 w100 h35 g789, 789
Gui, Add, Radio, x222 y249 w100 h30 , C
Gui, Add, Radio, x122 y249 w100 h30 , B
Gui, Add, Radio, x22 y249 w100 h30 , A

Gui, Show, x555 y400 h280 w325, GUI
return

123:
    var = 123
    Goto, abc
qwe:
    var = qwe
    Goto, abc
789:
    var = 789
abc:
    MsgBox, %var%
    Return

Возможно ли в abc: задать уловие, что-то вроде if A - выполняется такое-то действие, If B - другое, If C - третье?

5

Re: AHK: Вопос по кнопкам GUI (присвоение переменной)


Gui, Add, Button, x2 y20 w100 h35 g123 , One Two Three 
Gui, Add, Button, x112 y20 w100 h35 gqwe, qwe
Gui, Add, Button, x222 y20 w100 h35 g789, 789
Gui, Add, Radio, x22 y249 w100 h30 vRadio, A
Gui, Add, Radio, x122 y249 w100 h30, B
Gui, Add, Radio, x222 y249 w100 h30, C

Gui, Show, x555 y400 h280 w325, GUI
return

123:
    var = 123
    Goto, abc
qwe:
    var = qwe
    Goto, abc
789:
    var = 789
abc:
    Gui, Submit, NoHide
    If Radio = 1
        MsgBox, %var% A
    Else If Radio = 2
        MsgBox, %var% B
    Else If Radio = 3
        MsgBox, %var% C
    Else
        MsgBox, %var%
    Return

6

Re: AHK: Вопос по кнопкам GUI (присвоение переменной)

YMP, ещё раз спасибо, выручил!

7

Re: AHK: Вопос по кнопкам GUI (присвоение переменной)

Remelibo пишет:

В чём проблема - слишком много пунктов в gui и хотелось бы уменьшить объём кода

Для сокращения портянки условий, используйте массив:


Gui, Add, Button, x2 y20 w100 h35 gLabel, One Two Three
Gui, Add, Button, x112 y20 w100 h35 gLabel, qwe
Gui, Add, Button, x222 y20 w100 h35 gLabel, 789
Gui, Add, Radio, x22 y249 w100 h30 vRadio Checked, A
Gui, Add, Radio, x122 y249 w100 h30, B
Gui, Add, Radio, x222 y249 w100 h30, C 
Gui, Show, x555 y400 h280 w325, GUI
Return

Label:
    Gui, Submit, NoHide 
    MsgBox, % {"One Two Three":123,"qwe":"кьювэе",789:789}[A_GuiControl] 
        . " : " (["A","B","C"][Radio])
    Return
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

8

Re: AHK: Вопос по кнопкам GUI (присвоение переменной)

serzh82saratov, спасибо.

Появился небольшой вопрос относительно вкладок (Tab) и Radio переключателя. Думаю, отдельная тема для вопроса не нужна, спрошу здесь.

Имею созданные вкладки:

Gui, Add, Tab, x2 y-1 w780 h470 , Tab1|Tab2|Tab3|Tab4|Tab5

Имею переключалку типа:

Gui, Tab
Gui, Add, Radio, x662 y289 w100 h30 vRadio Checked, A
Gui, Add, Radio, x552 y289 w100 h30 , B
Gui, Add, Radio, x442 y289 w100 h30 , C

Код Gui, Tab добавляет Radio во все вкладки, а как возможно реализовать отображение Radio, например, только на первой и второй вкладке, а на остальных не отображать (другое Radio на них хотелось бы сделать)?

9

Re: AHK: Вопос по кнопкам GUI (присвоение переменной)

Gui, Add, Tab, vTab, Tab1|Tab2|Tab3|Tab4|Tab5

Gui, Tab, Tab1
    Gui, Add, Radio, x20 y40 w100 vRadio Checked ,A
    Gui, Add, Radio, xp yp+20 w100 ,B
    Gui, Add, Radio, xp yp+20 w100 ,C
Gui, Tab, Tab2
    Gui, Add, Radio, x20 y40 w100 vRadio2 Checked ,A
    Gui, Add, Radio, xp yp+20 w100 ,B
    Gui, Add, Radio, xp yp+20 w100 ,C
Gui, Tab, Tab3
Gui, Tab, Tab4
Gui, Tab, Tab5
    Gui, Tab
Gui, Show, 
return

10

Re: AHK: Вопос по кнопкам GUI (присвоение переменной)

yalanne, подобное сделать у меня получалось (разные вкладки - разные Radio), но это немного не то. Может быть я не до конца разобрался в коде, но скорее всего я плохо объяснил, что мне хотелось бы сделать и ты меня не так не понял.

В твоём коде, Radio для Tab1 и для Tab 2 не одно и то же, как я понимаю, вводится переменная Radio и Radio2. Т.е. переключатель на Tab2 отображает не то же самое, что и переключатель на Tab1 - не сохраняется положение переключателя (A, B, C), переменным Radio и Radio2, присваивать действие, или как-то группировать всё это дело.

Хотелось бы реализовать, что бы, например, на Tab1, Tab 2, Tab 3, был переключатель, как при

Gui, Tab
Gui, Add, Radio, x662 y289 w100 h30 vRadio Checked, A
Gui, Add, Radio, x552 y289 w100 h30 , B

То есть изменив переключатель во вкладке Tab1, он так же сохранял бы положение в Tab2. При Gui, Tab, Radio переключатель один и тот же на всех вкладках Tab. Как можно сделать такой же эффект, только не для всех вкладок, что бы часть вкладок имела один и тот же переключатель, а другая другой.

11 (изменено: yalanne, 2015-07-13 23:57:29)

Re: AHK: Вопос по кнопкам GUI (присвоение переменной)

Gui, Add, Tab,vTab gTabG, Tab1|Tab2|Tab3|Tab4|Tab5
Gui, Tab, Tab1
Gui, Tab, Tab2
Gui, Tab, Tab3
Gui, Tab, Tab4
Gui, Tab, Tab5
Gui, Tab
    Gui, Add, Radio, x20 y40  vRadio Checked ,A
    Gui, Add, Radio, xp yp+20 ,B
    Gui, Add, Radio, xp yp+20 ,C
Gui, +HwndidGUI
Gui, Show, 
return


TabG:
Guicontrolget,Tab
SH := ((Tab = "Tab1") or (Tab = "Tab2")) ? "Show" : "Hide"
loop 3
Control %SH%, , Button%A_Index%, ahk_id %idGUI%

12

Re: AHK: Вопос по кнопкам GUI (присвоение переменной)

Иногда можно так:


Gui, -DPIScale
Gui, Add, Tab, vTab1 gTab1, Tab1|Tab2|Tab3|Tab4|Tab5  
Gui, Tab, 1
Gui, Add, Button, x111 y111, Button Tab1
Gui, Tab, 3
Gui, Add, Button, x222 y111, Button Tab3
Gui, Add, Tab2, x0 y0 w0 h0 vTab2, |  
Gui, Add, Radio, xp+40 yp+80  vRadio Checked, A
Gui, Add, Radio, xp yp+20, B
Gui, Add, Radio, xp yp+20, C  
Gui, Show, , Tab test
Return
 
Tab1:
    Guicontrolget, Tab1
    GuiControl, % "Show" (Tab1 ~= "^(Tab1|Tab2|Tab3)$"), Tab2
    GuiControl, Show, Tab1 
    Return

Особенно удобно на больших группах контролов.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui