Hi Tom, That is even easier way to make a variable listener for LiveCode!
Thanks for that recipie. I do have a question about this. I would think that ‘wait until [condition is true]’ must have a loop under the hood although probably much faster that running a loop written in LiveCode script would. Is that true? I am curious as to what kind of performance hit from that. (Probably nothing we have to worry about for a single variable listener like your example. If you were monitoring many variables could it have a noticiable effect, or I am still just stuck in the 90s. 💾👴🏻📠 Best regards, Martin Koob > On Jul 26, 2025, at 8:59 PM, Tom Glod via use-livecode > <use-livecode@lists.runrev.com> wrote: > > 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@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@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 sc...@elementarysoftware.com >>> booth 1-360-734-4701 >>> ------------------------------------------------------ >>> >>> >>>> On Jul 26, 2025, at 1:59 AM, scott--- via use-livecode < >> use-livecode@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 sc...@elementarysoftware.com >>>> booth 1-360-734-4701 >>>> ------------------------------------------------------ >>>> >>>>> On Jul 26, 2025, at 12:44 AM, jbv via use-livecode < >> use-livecode@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@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@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@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@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@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@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-livecode