How to detect a change in a global variable ?
Tom Glod
tom at makeshyft.com
Sat Jul 26 20:59:52 EDT 2025
When I need to detect a change in another variable I use "wait until
variable_name is not "x" with messages" ... obviously your condition has to
match what you are trying to detect.
no loop needed
On Sat, Jul 26, 2025 at 8:14 AM Martin Koob via use-livecode <
use-livecode at lists.runrev.com> wrote:
> Hi
>
> Another way to do this is to use a setProp handler to set the global
> variable and create in essence a listener for changes to the global
> variable. In the setProp handler you set the global but then you can
> include other commands to be issued or sent or dispatched when the global
> variable is set, Of course you have to make sure that you only this
> setProp handler to set the value of global gMyVar variable.
>
> To see how this would work
>
> 1. Create a new stack with 1 button and 1 field.
>
> 2. Name the Name the button “Easy” and Name the field “Global
> VariableDisplay”.
>
> 3. Add the following script to the field “Global VariableDisplay”.
> on displayMyVar pMyStatus
>
> set the text of me to pMyStatus
>
> end displayMyVar
>
> 4. Add the following script to the button.
> on mouseUp
>
> global gMyVar
>
> if gMyVar is "easy" then
>
> set the cMyGlobalVar of this card to ""
>
> else
>
> set the cMyGlobalVar of this card to "Easy"
>
> end if
>
> end mouseUp
>
> 5. Add the following script to Card 1.
>
> setProp cMyGlobalVar pNewVar
>
> global gMyVar
>
> put pNewVar into gMyVar
>
> ## If you don't need to include a parameter with the message use
> 'send'
>
> -- send "displayMyVar" to field "GlobalVariable Display"
>
> ## If you need to include a parameter with the message use
> 'dispatch'
>
> dispatch "displayMyVar" to field "GlobalVariable Display" of me
> with gMyVar
>
> end cMyGlobalVar
>
>
>
> ## you can also access the property using a getProp handler but
>
> ## that does not make much sense since since gMyVar is a global
> which you can use directly.
>
> --getProp cMyGlobalVar
>
> -- global gMyVar
>
> -- return gMyVar
>
> --end cMyGlobalVar
>
> This would avoid any blocking or load on the machine using the loop.
>
>
> Best regards,
>
> Martin Koob
>
> > On Jul 26, 2025, at 5:16 AM, scott--- via use-livecode <
> use-livecode at lists.runrev.com> wrote:
> >
> > Oops… just for thoroughness: In the last handler I forgot to add the
> line “put empty into sFlag” after the repeat loop
> >
> > --
> > Scott Morrow
> >
> > Elementary Software
> > (Now with 20% less chalk dust!)
> > web https://elementarysoftware.com/
> > email scott at elementarysoftware.com
> > booth 1-360-734-4701
> > ------------------------------------------------------
> >
> >
> >> On Jul 26, 2025, at 1:59 AM, scott--- via use-livecode <
> use-livecode at lists.runrev.com> wrote:
> >>
> >> The way that the loop is written would make it blocking. If you wanted
> the loop to start running and then stop after the mouseUp happens I think
> you would need to add a "wait x millisec with messages”
> >>
> >> Fo example:
> >>
> >> global myVar
> >>
> >> on elsoTester
> >> put 0 into myVar
> >> -- some code
> >> repeat until myVar > 0
> >> -- set the thumbPosition of scrollBar "ProgressBar" to (the
> thumbPosition of scrollBar "ProgressBar" + 5) -- testing
> >> wait 500 millisec with messages
> >> end repeat
> >> -- some code
> >> answer "Finished"
> >> end elsoTester
> >>
> >>
> >> Depending on what you are doing, another method would be to use a "send
> it time" mechanism where the handler keeps calling itself until myVar > 0
> >> For example:
> >>
> >>
> >> local sFlag
> >> global myVar
> >>
> >> command elsoTester
> >> if sFlag is empty then
> >> put 0 into myVar
> >> -- some code
> >> end if
> >>
> >> repeat until myVar > 0
> >> -- set the thumbPosition of scrollBar "ProgressBar" to (the
> thumbPosition of scrollBar "ProgressBar" + 5) -- testing
> >> put “waiting” into sFlag
> >> send elsoTester to me in 500 millisec
> >> exit elsoTester
> >> end repeat
> >>
> >> answer “Finished"
> >> end elsoTester
> >>
> >> To be thorough you might also might want to empty the message queue of
> any other elsoTester messages before sending in time or add a timer which
> will eventually time out if myVar doesn’t exceed 0 after a set time.
> >>
> >> --
> >> Scott Morrow
> >>
> >> Elementary Software
> >> (Now with 20% less chalk dust!)
> >> web https://elementarysoftware.com/
> >> email scott at elementarysoftware.com
> >> booth 1-360-734-4701
> >> ------------------------------------------------------
> >>
> >>> On Jul 26, 2025, at 12:44 AM, jbv via use-livecode <
> use-livecode at lists.runrev.com> wrote:
> >>>
> >>> Hi list,
> >>>
> >>> Let's say I have a portion of a script like this :
> >>>
> >>> global myVar
> >>> put 0 into myVar
> >>> -- some code
> >>> repeat until myVar > 0
> >>> end repeat
> >>> -- some code
> >>>
> >>> and the content of global myVar being changed
> >>> in a handler of another control :
> >>>
> >>> on mouseUp
> >>> global myVar
> >>> put 1 into myVar
> >>> end mouseUp
> >>>
> >>> I know this is not very elegant, but my question is :
> >>> can the change in myVar be detected in a loop like
> >>> above ?
> >>> I made some tests and it doesn't seem to work...
> >>>
> >>> Thank you in advance.
> >>> jbv
> >>>
> >>> _______________________________________________
> >>> use-livecode mailing list
> >>> use-livecode at lists.runrev.com
> >>> Please visit this url to subscribe, unsubscribe and manage your
> subscription preferences:
> >>> http://lists.runrev.com/mailman/listinfo/use-livecode
> >>
> >>
> >>
> >>
> >>
> >>
> >>
> >>
> >>
> >> _______________________________________________
> >> use-livecode mailing list
> >> use-livecode at lists.runrev.com
> >> Please visit this url to subscribe, unsubscribe and manage your
> subscription preferences:
> >> http://lists.runrev.com/mailman/listinfo/use-livecode
> >
> >
> >
> >
> >
> >
> >
> >
> > _______________________________________________
> > use-livecode mailing list
> > use-livecode at lists.runrev.com
> > Please visit this url to subscribe, unsubscribe and manage your
> subscription preferences:
> > http://lists.runrev.com/mailman/listinfo/use-livecode
>
> _______________________________________________
> use-livecode mailing list
> use-livecode at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your
> subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-livecode
>
More information about the use-livecode
mailing list