Jump to content
Skyrimfus

How to detect wich button was pressed on GUI

Recommended Posts

Skyrimfus

How can i determine wich button was pressed when I use more than one button, without delcaring the button in a variable.

Example:

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 600, 600, 192, 124)
GUISetState(@SW_SHOW)

For $i=0 to 5
     GUICtrlCreateButton("Button"&$i,0,$i*50,60,30)
Next



#EndRegion ### END Koda GUI section ###

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case 3 to 8
            MsgBox(0,0,"You pressed button:")
    EndSwitch
WEnd

 

Edited by Skyrimfus

Share this post


Link to post
Share on other sites
InunoTaishou

Store them in an array. Alternatively you can just use event mode and set a function per button

For $i = 0 to 5
    GUICtrlCreateButton("Button" & $i, 10, 10 + ($i * 25), 100, 20)
    GUICtrlSetOnEvent(-1, "ButtonFunc" & $i)
Next

Func ButtonFunc0()

EndFunc

Func ButtonFunc1()

EndFunc

Func ButtonFunc2()

EndFunc

Func ButtonFunc3()

EndFunc

Func ButtonFunc4()

EndFunc

Func ButtonFunc5()

EndFunc

 

Share this post


Link to post
Share on other sites
Skyrimfus

I don't know how many buttons I will have, and I dont want to create a lot of functions. I simply need to know the control ID of the button that was pressed so I can use it in 1 function to calculate something

Share this post


Link to post
Share on other sites
Jos

One option could be:

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 600, 600, 192, 124)
GUISetState(@SW_SHOW)
Global $controlpressed[100]

For $i = 0 To 5
    $hCtrl = GUICtrlCreateButton("Button" & $i, 0, $i * 50, 60, 30)
    $controlpressed[$hCtrl] = "Button" & $i
Next

#EndRegion ### END Koda GUI section ###

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case 3 To 8
            MsgBox(0, 0, "You pressed button:" & $controlpressed[$nMsg])
    EndSwitch
WEnd

Jos

Edited by Jos
  • Like 1

SciTE4AutoIt3 Full installer Download page   - Beta files       Read before posting     How to post scriptsource        Forum Rules
 
Live for the present,
Dream of the future,
Learn from the past.
  :)

Share this post


Link to post
Share on other sites
Skyrimfus

@Jos oooooh I didn't realise that $nMsg gives you the controID when you click it! Thanks man!

Edited by Skyrimfus

Share this post


Link to post
Share on other sites
VIP

I recommend you up the way of InunoTaishou.
Or declare variables for buttons!

 

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Opt("GUIOnEventMode", 1)

Global $Form1 = GUICreate("Form1", 600, 600, -1, -1)
GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")


For $i = 0 To 5
    GUICtrlCreateButton("Button" & $i, 0, $i * 50, 60, 30)
    GUICtrlSetOnEvent(-1, "ButtonFunc" & $i)
Next
GUISetState(@SW_SHOW)


While 1 ; Keep program running!
    Sleep(100)
WEnd


Func ButtonFunc0()
    MsgBox(0, 0, "You pressed button: 0")
EndFunc   ;==>ButtonFunc0

Func ButtonFunc1()
    MsgBox(0, 0, "You pressed button: 1")
EndFunc   ;==>ButtonFunc1

Func ButtonFunc2()
    MsgBox(0, 0, "You pressed button: 2")
EndFunc   ;==>ButtonFunc2

Func ButtonFunc3()
    MsgBox(0, 0, "You pressed button: 3")
EndFunc   ;==>ButtonFunc3

Func ButtonFunc4()
    MsgBox(0, 0, "You pressed button: 4")
EndFunc   ;==>ButtonFunc4

Func ButtonFunc5()
    MsgBox(0, 0, "You pressed button: 5")
EndFunc   ;==>ButtonFunc5

Func _Exit()
    MsgBox(0, 0, "EXIT", 1)
    Exit 
EndFunc   ;==>_Exit

 


Regards,
 

Share this post


Link to post
Share on other sites
Jos
9 minutes ago, VIP said:

Or declare variables for buttons!

Not sure why you insist, but you can easily put them in an Array as well and loop through that array when a button is pressed.

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 600, 600, 192, 124)
GUISetState(@SW_SHOW)
Global $hCtrl[100]
Global $NBottons = 5

For $i = 0 To $NBottons
    $hCtrl[$i] = GUICtrlCreateButton("Button" & $i, 0, $i * 50, 60, 30)
Next

#EndRegion ### END Koda GUI section ###

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case Else
            For $i = 0 To $NBottons
                If $hCtrl[$i] = $nMsg Then
                    MsgBox(0, 0, "You pressed button:" & "Button" & $i)
                EndIf
            Next
    EndSwitch
WEnd

 

Edited by Jos

SciTE4AutoIt3 Full installer Download page   - Beta files       Read before posting     How to post scriptsource        Forum Rules
 
Live for the present,
Dream of the future,
Learn from the past.
  :)

Share this post


Link to post
Share on other sites
VIP


Declare variables way like your script!

I'm not sure what he wants to do but this script might be needed for him!

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

#Region ### START GUI section ### Form=
Global $hGUI = GUICreate("Form1", 600, 300, -1, -1)

Global Const $nBottons = 5
Global $hCtrl[$nBottons+1]

For $i = 0 To $nBottons
    $hCtrl[$i] = GUICtrlCreateButton("Button" & $i, 0, $i * 50, 60, 30)
Next

GUISetState(@SW_SHOW)
#EndRegion ### END  GUI section ###

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
        Case $hCtrl[0]
            MsgBox(0, 0, "You pressed button: 0")
        ;==>Button 0
        Case $hCtrl[1]
            MsgBox(0, 0, "You pressed button: 1")
        ;==>Button 1
        Case $hCtrl[2]
            MsgBox(0, 0, "You pressed button: 2")
        ;==>Button 2
        Case $hCtrl[3]
            MsgBox(0, 0, "You pressed button: 3")
        ;==>Button 3
        Case $hCtrl[4]
            MsgBox(0, 0, "You pressed button: 4")
        ;==>Button 4
        Case $hCtrl[5]
            MsgBox(0, 0, "You pressed button: 5")
        ;==>Button 5
    EndSwitch
WEnd

 

  • Like 1

Regards,
 

Share this post


Link to post
Share on other sites
VIP

I do not know what you mean!
But if possible, please do not care or pay attention to me!
If I'm wrong let me know!
Thank you!

 


Regards,
 

Share this post


Link to post
Share on other sites
mikell

Nearly the same than Jos, but using event mode  :)

#include <GUIConstantsEx.au3>

Opt("GUIOnEventMode", 1)

$Form1 = GUICreate("Form1")
GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")

For $i = 0 To 5
    GUICtrlCreateButton("Button" & $i, 0, $i * 50, 60, 30)
    GUICtrlSetOnEvent(-1, "ButtonFunc")
Next
GUISetState()

While 1
    Sleep(10)
WEnd

Func ButtonFunc()
    MsgBox(0, 0, "You pressed button " & @GUI_CtrlId - 3)
EndFunc 

Func _Exit()
    Exit 
EndFunc

 

  • Like 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • Emmhor1
      By Emmhor1
      Hi All,

      MAIN QUESTION:
      Is it possible to Call specific function within a GUI

      So I have a script with multiple functions although I don't want to use every function every time.
      My Idea is to create a simple GUI which allows me to select what functions I want to use then run the funtions by clicking a button.
      I have already made a GUI which allows me to select specific .exe's I would like to run after selection it runs the .exe one by one.
      This script is on my work laptops and cannot access it right now.
       
      Who can help me with this?
      GUIcreate
      Func1 
      Func2
      Func3
      Then have a boxes which allows me to select the specif Func.(I used GUIChecked and Unchecked in my other script)
      Then a button which executes/calls the selected functions
    • Blois
      By Blois
      Hi Guis,
       
      I need to create keyboard shortcut to navigate the tabs and activate them, but I could not use the code below:
      #include <TabConstants.au3> #include <WindowsConstants.au3> #include <GuiTab.au3> #include <GUIConstantsEx.au3> HotKeySet("^{TAB}", "_TabRight") HotKeySet("^+{TAB}", "_TabLeft") $gui = GUICreate("test",450, 300) $Tab1 = GUICtrlCreateTab(20, 24, 425, 201) $TabSheet1 = GUICtrlCreateTabItem("Tabsheet 1") $lbContagemGrupos2 = GUICtrlCreateLabel("aaaa", 50, 50) GUICtrlSetColor(-1, 0x0000FF) GUICtrlCreateTabItem("") $TabSheet2 = GUICtrlCreateTabItem(" ") $TabSheet3 = GUICtrlCreateTabItem(" ") GUISetState() While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE ExitLoop EndSwitch WEnd Func _TabRight() $CurPos = _GUICtrlTab_GetCurSel($Tab1) _GUICtrlTab_SetCurSel($Tab1, $CurPos + 1) $tab = "$TabSheet" & $CurPos GUICtrlSetState($TabSheet1 + $CurPos, $GUI_SHOW) Return EndFunc Func _TabLeft() $CurPos = _GUICtrlTab_GetCurSel($Tab1) _GUICtrlTab_SetCurSel($Tab1, $CurPos - 1) $tab = "$TabSheet" & $CurPos GUICtrlSetState($TabSheet1 + $CurPos, $GUI_SHOW) Return EndFunc Exit  
      can you help me?
    • Pricehacker
      By Pricehacker
      Hello again!
      I have tried searching for quite some time now but couldn´t find a single working way to change the class of your GUI that doesn´t include changing it manually after its compilation.
      First or "AutoIt v3 GUI" is a pretty boring name tbh and i would like to spice it up a bit, also, and more importantly, I would like to identify my windows by something other than its title as it will change depending on some factors and im using two different programs independently as multi threading isn't supported.
      Any help is appreciated! Thank you!
    • xtcislove
      By xtcislove
      Hello, 
      i have a Problem with  _WinAPI_SetLayeredWindowAttributes, everything is working as excepted if u are on Windows 7.

      But if u are on Windows 10 the transparent background of a control is not clickable anymore. 

      Could someone help?

      Please see example below, put cmd.jpg into the same folder as Example.au3

      Please see trigger.jpg to see which sections are not clickable in Windows 10 (the red dots, the green dots are clickable) on Windows 7 the red ones and green ones are clickable.
       
      The same problem occurs if i use 
       
       
      Example.au3


    • WilliamasKumeliukas
      By WilliamasKumeliukas
      Hello everyones reading this post,
      I'm struggling at resizing properly my radio buttons to fit long text inside without affecting others radio buttons and also adjust position of them relative to the string.
      I tried with _StringSize UDF but I guess im too tired to figure out how to use it correctly..
      I also tried: _Control_SetWidth2Text I found on this forum, it work aslong im not maximizing GUI (radio text is gone when I maximize and maximize is a must)
       
      here is the code example, I hope someone can figure out (sorry if guictrlsetpos is not included in the example, I know thats probably the way to go but I wanted to make sure there is nothing better before use it)
      Thank you
       
      Br,
      ~WilliamasKumeliukas
       
      #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <Array.au3> #include <StringConstants.au3> #include <FileConstants.au3> #include <WindowsConstants.au3> #include <File.au3> #include <EditConstants.au3> #include <GUIListBox.au3> #include <ButtonConstants.au3> #include <ProgressConstants.au3> #include <ColorConstants.au3> #include <AutoitConstants.au3> #include <Misc.au3> #include <WinAPIReg.au3> #include <WinAPI.au3> #Region Opt's Opt("GUIResizeMode", 802) #EndRegion Opt's Global $q = "INTRO LINE" & @CRLF & @CRLF & "description of everything until user press start." Global $file = @TempDir & "\test.p" destroy() Global $msg, $score = 0, $rate, $com, $total = 0, $cfile, $cq, $i = 0, $time = 0, $min = 0, $sec = 0, $hour = 0, $qf, $ii = 0 Main() Func Main() Global $iGUIInitSize = 550 #Region GUI Opt("GUICloseOnEsc", 1) Global $gui = GUICreate("example", 1124, 550,-1 ,-1, BitOR($WS_MAXIMIZEBOX , $WS_MINIMIZEBOX)) Global $gui_size = WinGetClientSize($gui) Global $iFontSize = Int(2 * (.25 + (8 * $gui_size[0] / $iGUIInitSize))) / 2 Global $options = GUICtrlCreateMenu("&Options") Global $guide = GUICtrlCreateMenuItem("Guide", $options) Global $restart = GUICtrlCreateMenuItem("Restart", $options) Global $about = GUICtrlCreateMenuItem("About", $options) Global $exit = GUICtrlCreateMenuItem("Exit", $options) Global $extra = GUICtrlCreateMenu("Extras") Global $creator = GUICtrlCreateMenu("CQB", $extra ) Global $new = GUICtrlCreateMenuItem("custom QP", $creator) Global $load = GUICtrlCreateMenuItem("CQ", $creator ) Global $timer = GUICtrlCreateLabel("", 752, 472, 294, 30, $WS_BORDER) GUICtrlSetResizing(-1, BitOR($GUI_DOCKHCENTER, $GUI_DOCKVCENTER) ) GUICtrlSetFont(-1, $iFontSize) GUICtrlSetState($timer, $GUI_HIDE) Global $info = GUICtrlCreateLabel( $q, 200, 20, 700, 200, $SS_CENTER ) GUICtrlSetResizing(-1, BitOR($GUI_DOCKHCENTER, $GUI_DOCKVCENTER) ) $fi = GUICtrlSetFont($info, $iFontSize) Global $a = GUICtrlCreateRadio("A)", 100, 210, $WS_EX_CLIENTEDGE) $fa = GUICtrlSetFont($a, 15) GUICtrlSetResizing(-1, BitOR($GUI_DOCKHCENTER, $GUI_DOCKVCENTER) ) GUICtrlSetState($a, 16) Global $b = GUICtrlCreateRadio("B)", 100, 310 , $WS_EX_CLIENTEDGE) $fb = GUICtrlSetFont($b, 15) GUICtrlSetResizing(-1, BitOR($GUI_DOCKHCENTER, $GUI_DOCKVCENTER) ) GUICtrlSetState($b, 16) Global $c = GUICtrlCreateRadio("C)", 750, 210 , $WS_EX_CLIENTEDGE) $fc = GUICtrlSetFont($c, 15) GUICtrlSetResizing(-1, BitOR($GUI_DOCKHCENTER, $GUI_DOCKVCENTER) ) GUICtrlSetState($c, 16) Global $d = GUICtrlCreateRadio( "D) ", 750, 310, $WS_EX_CLIENTEDGE) $fd = GUICtrlSetFont($d, 15) GUICtrlSetResizing (-1, BitOR($GUI_DOCKHCENTER, $GUI_DOCKVCENTER) ) GUICtrlSetState($d, 16) Global $sign = GUICtrlCreateLabel( $file, 420, 480, -1, -1, BitOR ( $SS_CENTER, $WS_BORDER ) ) GUICtrlSetResizing ( -1, BitOR ( $GUI_DOCKHCENTER, $GUI_DOCKVCENTER ) ) GUICtrlSetFont($sign, 12) Global $yb = GUICtrlCreateRadio("True", 200, 420, 200, 50, $BS_PUSHLIKE) GUICtrlSetResizing(-1, BitOR($GUI_DOCKHCENTER, $GUI_DOCKVCENTER,$GUI_DOCKSIZE)) GUICtrlSetFont($yb, 15) GUICtrlSetState($yb, 32) Global $nb = GUICtrlCreateRadio("False", 700, 420, 200, 50, $BS_PUSHLIKE) GUICtrlSetResizing(-1, BitOR($GUI_DOCKHCENTER, $GUI_DOCKVCENTER, $GUI_DOCKSIZE)) GUICtrlSetFont($nb, 15) GUICtrlSetState($nb, 32) Global $start = GUICtrlCreateButton("Start", 20, 20, 100, 50, $SS_CENTER, $WS_EX_CLIENTEDGE) GUICtrlSetResizing(-1, BitOR($GUI_DOCKHCENTER, $GUI_DOCKVCENTER)) GUICtrlSetFont($start, 12) Global $valid = GUICtrlCreateButton("Confirm", 20, 20, 100, 50, $SS_CENTER, $WS_EX_CLIENTEDGE) GUICtrlSetResizing(-1, BitOR($GUI_DOCKHCENTER, $GUI_DOCKVCENTER)) GUICtrlSetFont($valid, 12) GUICtrlSetState($valid, 32) GUISetState(@SW_SHOW) #EndRegion GUI While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Switch MsgBox(4096 + 4, "Warning", "Are you sure to exit?") Case 6 AdlibUnRegister("timer") If Not $qf = "" Then FileClose($file) EndIf Exit Case 7 ContinueLoop EndSwitch Case $start ;AdlibRegister("timer") ;Global $qf = StringSplit(StringStripWS(FileRead($file), 6), @CRLF, 0) ;qloop($file) GUICtrlSetData($a, "A) This long string is an example as string that I want to fit in 4 radio buttons because sometimes it can be that long.") GUICtrlSetData($b, "B) This long string is an example as string that I want to fit in 4 radio buttons because sometimes it can be that long.") GUICtrlSetData($c, "C) This long string is an example as string that I want to fit in 4 radio buttons because sometimes it can be that long.") GUICtrlSetData($d, "D) This long string is an example as string that I want to fit in 4 radio buttons because sometimes it can be that long.") Case $restart MsgBox(4096, "Warning", 'Normally, your suposed to start something before restarting it.') ContinueLoop Case $new ;GUISetState(@SW_HIDE, $gui) ;_CustomNew() ContinueLoop Case $load ;_CustomLoad() Case $about ;_About() EndSwitch WEnd EndFunc ;Main() Func timer() If $time = 0 Then Global $time = TimerInit() Global $diff = TimerDiff($time) Global $sec = Int(Mod($diff / 1000, 60)) Global $min = Int(Mod($diff / 60000, 60)) Global $hour = Int($diff / 3600000) If $sec < 10 Then $sec = "0" & $sec If $min < 10 Then $min = "0" & $min If $hour < 10 Then $hour = "0" & $hour GUICtrlSetData($timer, "Temps: " & $hour & ":" & $min & ":" & $sec) EndFunc ;==>timer Func destroy() If FileExists($file) Then FileDelete($file) EndIf DirCreate(@TempDir & "\About") FileInstall("C:\test.txt", $file) EndFunc ;==>destroy  
×