Reputation: 57
Good day,
I'm trying to create a script for AutoHotKey (AHK). The script itself already works fine: a small GUI with two radio buttons for each color (black or white), but I want to have a single function and not a gosub for each color as it is now, because I want in the future to add much more colors.
Here is the GUI:
Here is the script:
Gui, Main:new
Gui, Add, GroupBox, x10 y6 w150 h100 R3, Color:
Gui, Add, Radio, Checked vColor1 xp+10 yp+20, Black
Gui, Add, Radio, vColor2, White
Gui, Add, Button, gEnter xp-11 yp+42, Enter
Gui, Show
return
Enter:
Gui, Submit, NoHide
Switch {
Case Color1:
gosub ColorBlack
Case Color2:
gosub ColorWhite
}
Gui, Hide
return
GuiClose:
ExitApp
ColorBlack:
Gui, ColorBlack: Add, Picture,, %A_ScriptDir%\color-black.png
Gui, ColorBlack: Show
return
ColorWhite:
Gui, ColorWhite: Add, Picture,, %A_ScriptDir%\color-white.png
Gui, ColorWhite: Show
return
That's also why I need to keep this structure as it is now. Therefore, in order to have only one function (only Color instead of ColorBlack and ColorWhite) I would need to reference the certain part of the path to the radio button choice (so that it puts the color name in the right spot):
Color:
Gui, ColorBlack: Add, Picture, x0 y0 w1920 h1920, %A_ScriptDir%\color-%color%.png
Gui, ColorBlack: Show
return
The above one of course doesn't work – has anybody an idea how to solve this?
Upvotes: 0
Views: 102
Reputation: 1188
Gui, Main:new
Gui, Add, GroupBox, x10 y6 w150 h100 R3, Color:
Gui, Add, Radio, Checked vColor xp+10 yp+20 , Black ; 1 - you may use just one var for a radio button group, it'll be indexed
Gui, Add, Radio, , White ; 2
Gui, Add, Radio, , Yellow ; 3 and so on
Gui, Add, Button, gEnter xp-11 yp+42, Enter
Gui, Show
return
; Enter:
; Gui, Submit, NoHide
; Switch {
; Case Color1: ; just so you know, you dont need to use gosub with switch/case, you may just nest it under each case, but this would'nt be the best choice in this situtation
; Gui, ColorBlack: Add, Picture,, %A_ScriptDir%\color-black.png
; Gui, ColorBlack: Show
; Case Color2:
; Gui, ColorWhite: Add, Picture,, %A_ScriptDir%\color-white.png
; Gui, ColorWhite: Show
; }
; Gui, Hide
; return
GuiClose:
ExitApp
Enter:
Gui, Submit
selected_color := color = 1 ; ternary operator to determine which color is selected | if ? then : else
? "black"
: color = 2
? "white"
: "yellow"
Gui, Color:Add, Picture,,% A_ScriptDir "\color-" selected_color ".png"
Gui, Color:Show
return
ColorGuiClose: ; destroy the color gui and show the main gui
Gui, Color:Destroy
Gui, Main:Show
Return
Upvotes: 1