Jump to content

Handling multiple Gui's.


Nahuel
 Share

Recommended Posts

Double click on the tray icon and it will create a new gui. Now, how do I make it possible to close each one of them individually? It'd be great if the number of Gui's isn't limited too.

#include <Guiconstants.au3>
#include <Constants.au3>
Opt("TrayMenuMode",1)
Opt("TrayAutoPause",0)
TraySetClick (8)
$NuevaNota=TrayCreateItem("New Gui")
TrayCreateItem("")
$salir = TrayCreateItem("Exit")
while 1
    Sleep(10)
    $msgT=TrayGetMsg()
    $msg=GuiGetMsg()
    Select
    Case $msgT=$salir
        Exit
    Case $msgT=$NuevaNota OR $msgT=$TRAY_EVENT_PRIMARYDOUBLE
        GUICreate("My Gui",200,200)
        GUISetState()
        WinSetTrans("My Gui","",170)
    EndSelect
WEnd
Link to comment
Share on other sites

Here is a solution:

You have to identify somehow all your created GUI

My example will close your active GUI (obviously - you can close the active window only)

#include <Guiconstants.au3>
#include <Constants.au3>
Opt("TrayMenuMode",1)
Opt("TrayAutoPause",0)
TraySetClick (8)
$NuevaNota=TrayCreateItem("New Gui")
TrayCreateItem("")
$salir = TrayCreateItem("Exit")
Dim $count = 0
Dim $gui[100]
while 1
    Sleep(10)
    $msgT=TrayGetMsg()
    $msg=GuiGetMsg()
    Select
    Case $msgT=$salir
        Exit
    Case $msgT=$NuevaNota OR $msgT=$TRAY_EVENT_PRIMARYDOUBLE
        $count +=1
        $gui[$count] = GUICreate("My Gui",200,200)
        GUISetState()
        WinSetTrans("My Gui","",170)
    Case $msg = $GUI_EVENT_CLOSE
        For $i=1 To $count
            If WinActive($gui[$i]) Then 
                GUIDelete($gui[$i])
                ExitLoop
            EndIf
        Next
    EndSelect
WEnd

SNMP_UDF ... for SNMPv1 and v2c so far, GetBulk and a new example script

wannabe "Unbeatable" Tic-Tac-Toe

Paper-Scissor-Rock ... try to beat it anyway :)

Link to comment
Share on other sites

Use the advanced mode of GuiGetMsg() to know which GUI it came from:

#include <Guiconstants.au3>
#include <Constants.au3>

Opt("TrayMenuMode", 1)
Opt("TrayAutoPause", 0)
TraySetClick(8)
Global $n = 0
$NuevaNota = TrayCreateItem("New Gui")
TrayCreateItem("")
$salir = TrayCreateItem("Exit")

While 1
    Sleep(10)
    $msgT = TrayGetMsg()
    $msg = GUIGetMsg(1) ; 1 = Advanced mode
    Select
        Case $msgT = $salir
            Exit
        Case $msgT = $NuevaNota Or $msgT = $TRAY_EVENT_PRIMARYDOUBLE
            $n += 1
            $hGUI = GUICreate("My Gui " & $n, 200, 200, $n * 100, $n * 100)
            GUISetState(@SW_SHOW, $hGUI)
            WinSetTrans($hGUI, "", 170)
        Case $msg[0] = $GUI_EVENT_CLOSE
            GUIDelete($msg[1])
    EndSelect
WEnd

:)

Edited by PsaltyDS
Valuater's AutoIt 1-2-3, Class... Is now in Session!For those who want somebody to write the script for them: RentACoder"Any technology distinguishable from magic is insufficiently advanced." -- Geek's corollary to Clarke's law
Link to comment
Share on other sites

Use the advanced mode of GuiGetMsg() to know which GUI it came from:

#include <Guiconstants.au3>
#include <Constants.au3>

Opt("TrayMenuMode", 1)
Opt("TrayAutoPause", 0)
TraySetClick(8)
Global $n = 0
$NuevaNota = TrayCreateItem("New Gui")
TrayCreateItem("")
$salir = TrayCreateItem("Exit")

While 1
    Sleep(10)
    $msgT = TrayGetMsg()
    $msg = GUIGetMsg(1) ; 1 = Advanced mode
    Select
        Case $msgT = $salir
            Exit
        Case $msgT = $NuevaNota Or $msgT = $TRAY_EVENT_PRIMARYDOUBLE
            $n += 1
            $hGUI = GUICreate("My Gui " & $n, 200, 200, $n * 100, $n * 100)
            GUISetState(@SW_SHOW, $hGUI)
            WinSetTrans($hGUI, "", 170)
        Case $msg[0] = $GUI_EVENT_CLOSE
            GUIDelete($msg[1])
    EndSelect
WEnd

:)

Brilliant! Thanks a lot, both of you! :)
Link to comment
Share on other sites

Is there a way to do this with GuiOnEventMode? :">

It's very complicated to deal with controls in the Gui's :">

Yes. Just set your GuiSetOnEvent() and GuiCtrlSetOnEvent() functions, and in those functions use @GUI_CtrlID, @GUI_CtrlHandle, and @GUI_WinHandle macros to identify the window and control that generated the event.

:)

Valuater's AutoIt 1-2-3, Class... Is now in Session!For those who want somebody to write the script for them: RentACoder"Any technology distinguishable from magic is insufficiently advanced." -- Geek's corollary to Clarke's law
Link to comment
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
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...