nwbyy

Problem with infinite loop

8 posts in this topic

#1 ·  Posted

Hi

Sorry if threads like this already exist, but I don't get it to work, even with examples.

I set a bmp picture button changing on mouse hover.
Next to it, there is a jpg picture that also changes when the mouse goes over this same button.

So far no problem.

But the idea is to make the jpg picture change 3 times in a infinite loop.
Let's say a "animated gif effect".

#include <GUIConstantsEx.au3>
#include <GUICtrlSetOnHover_UDF.au3>


Global $sImages_Path    = @ScriptDir & "\Example Images"


GUICreate("OnClick Hovering Example", 580, 500)


$button = GUICtrlCreatePic($sImages_Path & "\Button.bmp", 70, 100, 40, 40)
_GUICtrl_SetOnHover(-1, "_Hover_Proc", "_Leave_Hover_Proc")


$picture = GUICtrlCreatePic($sImages_Path & "\picture 1.jpg", 300, 300, 165, 124)


GUISetState()


While 1
    $nMsg = GUIGetMsg()

    Switch $nMsg

        Case $GUI_EVENT_CLOSE
            Exit

        Case $button
            ; Any actions

         EndSwitch


WEnd


Func anim()

   While 1
      GUICtrlSetImage($picture, $sImages_Path & "\picture 2.jpg")
      Sleep(250)
      GUICtrlSetImage($picture, $sImages_Path & "\picture 3.jpg")
      Sleep(250)
      GUICtrlSetImage($picture, $sImages_Path & "\picture 4.jpg")
      Sleep(250)
   WEnd

EndFunc


Func _Hover_Proc($iCtrlID)

    Switch $iCtrlID

        Case $button
            GUICtrlSetImage($iCtrlID, $sImages_Path & "\Button_Hover.bmp")
            anim()

         EndSwitch

EndFunc


Func _Leave_Hover_Proc($iCtrlID)

    Switch $iCtrlID

        Case $button
            GUICtrlSetImage($iCtrlID, $sImages_Path & "\Button.bmp")

         EndSwitch

EndFunc

When I put the mouse over the button, the loop goes around a few times and the script crashes.
With Sleep() set on 150, the loop goes around about 10 times before crash.
Set on 250 it crashes after about 7 times. So it seems not to depend on the number of times the loop restarts.

What am I doing wrong?

Another thing I can't figure out, is how to exit the loop in the _Leave_Hover_Proc function...?

Thanks a lot.

Share this post


Link to post
Share on other sites



#2 ·  Posted (edited)

Add ExitLoop to Func anim()?

Edited by kosamja

Share this post


Link to post
Share on other sites

#3 ·  Posted

By adding ExitLoop() it won't be an infinite loop any more.

So I tried with conditions:

#include <GUIConstantsEx.au3>
#include <GUICtrlSetOnHover_UDF.au3>


Global $sImages_Path    = @ScriptDir & "\Example Images"


GUICreate("OnClick Hovering Example", 580, 500)


$button = GUICtrlCreatePic($sImages_Path & "\Button.bmp", 70, 100, 40, 40)
_GUICtrl_SetOnHover(-1, "_Hover_Proc", "_Leave_Hover_Proc")


$picture = GUICtrlCreatePic($sImages_Path & "\picture 1.jpg", 300, 300, 165, 124)


GUISetState()


While 1
    $nMsg = GUIGetMsg()

    Switch $nMsg

        Case $GUI_EVENT_CLOSE
            Exit

        Case $button
            ; Any actions

         EndSwitch


WEnd


Func anim()

   $exit = False

   While 1
      If $exit = False Then
         GUICtrlSetImage($picture, $sImages_Path & "\picture 2.jpg")
         Sleep(250)
         GUICtrlSetImage($picture, $sImages_Path & "\picture 3.jpg")
         Sleep(250)
         GUICtrlSetImage($picture, $sImages_Path & "\picture 4.jpg")
         Sleep(250)
      Else
         ExitLoop
      EndIf
   WEnd

EndFunc


Func _Hover_Proc($iCtrlID)

    Switch $iCtrlID

        Case $button
            GUICtrlSetImage($iCtrlID, $sImages_Path & "\Button_Hover.bmp")
            anim()

         EndSwitch

EndFunc


Func _Leave_Hover_Proc($iCtrlID)

    Switch $iCtrlID

        Case $button
            GUICtrlSetImage($iCtrlID, $sImages_Path & "\Button.bmp")
            $exit = True

         EndSwitch

EndFunc

Like this, the loop is not stoped when the mouse leaves the button, and the loop crashes the same way than before anyway.

I thaught maybe it's not possible to change the value of the $exit variable when it was set inside a function.

So I tried to set $exit = False outside the function, but then, the loop goes around only one time. Weird...

Share this post


Link to post
Share on other sites

#5 ·  Posted

5 minutes ago, Jos said:

Define: crashes.

When I put mouse over the button, the loop begins, goes on for about 7 times, and then comes a "autoit v3 script not responding"  window with the 3 choices:

- get online help.

- close program.

- wait for program to answer.

Share this post


Link to post
Share on other sites

#7 ·  Posted (edited)

Thanks both for your answers by tha way.

Frome here:

True.
I remember that the download link of the lastest version is dead. So I took the one before...

Will have a look for an updated version of the file.

Edited by nwbyy

Share this post


Link to post
Share on other sites

#8 ·  Posted

The creator posted this about the last version of the UDF:

Quote

The disadvantage is obvious, any blocking function or loop will "freeze" the hovering events.

Which certainly explains the problem I have.

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