Tersion Posted August 31, 2018 Posted August 31, 2018 Here test example: Spoiler #include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #Region ### START Koda GUI section ### Form= $hMainForm = GUICreate("Form1", 167, 59, 192, 124) $idLabel = GUICtrlCreateLabel("Label1", 5, 5, 36, 17) $idStartButton = GUICtrlCreateButton("Start", 5, 25, 75, 25) $idStopButton= GUICtrlCreateButton("Stop", 85, 25, 75, 25) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### Local $iStep = 0 While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $idStartButton Update() EndSwitch WEnd Func Update() Do Sleep(1000) $iStep += 1 GUICtrlSetData($idLabel, $iStep) Until $iStep = 10 EndFunc I want to be able to update Label control and can handle Stop button event when Do...Until is working. How can I achieve that?
Danp2 Posted August 31, 2018 Posted August 31, 2018 Instead of your Do...Until, take a look at AdlibRegister. Latest Webdriver UDF Release Webdriver Wiki FAQs
BrewManNH Posted August 31, 2018 Posted August 31, 2018 You could do something like this. expandcollapse popup#include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #Region ### START Koda GUI section ### Form= $hMainForm = GUICreate("Form1", 167, 59, 192, 124) $idLabel = GUICtrlCreateLabel("Label1", 5, 5, 36, 17) $idStartButton = GUICtrlCreateButton("Start", 5, 25, 75, 25) $idStopButton = GUICtrlCreateButton("Stop", 85, 25, 75, 25) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $idStartButton Update() EndSwitch WEnd Func Update() Local $iStep = 0, $Timer = TimerInit() Do $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $idStopButton Return EndSwitch If TimerDiff($Timer) >= 1000 Then $iStep += 1 GUICtrlSetData($idLabel, $iStep) $Timer = TimerInit() EndIf Until $iStep >= 1000 EndFunc ;==>Update This takes out the Sleep function, which would affect the buttons in the Do loop, and replaces it with a timer. If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag GudeHow to ask questions the smart way! I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from. Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays. - ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script. - Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label. - _FileGetProperty - Retrieve the properties of a file - SciTE Toolbar - A toolbar demo for use with the SciTE editor - GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI. - Latin Square password generator
Tersion Posted August 31, 2018 Author Posted August 31, 2018 Danp2, BrewManNH, Thanks to both of you! I will try yours suggestions in my bigger project than that example.
Tersion Posted August 31, 2018 Author Posted August 31, 2018 Danp2, Thanks one more time! For me, your advice with AdlibRegister appeared to be simpler to incorporated to my project (mainly it's download manager for additional Left 4 Dead 2 campaigns), and now I can show simultaneously multiple progress status of downloads in ListView control column. Here the .gif: P.S. Some translation: Статус - Status Загрузить - Download Загрузка: 5% - Downloading: 5% Ожидание загрузки - Waiting for download Загружено - Downloaded
Moderators Melba23 Posted August 31, 2018 Moderators Posted August 31, 2018 Tersion, Quote it's download manager for additional Left 4 Dead 2 campaigns Is this purely a file manager or does it interact with the game itself? Please read the Forum rules to see why I ask. M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area
Tersion Posted August 31, 2018 Author Posted August 31, 2018 (edited) Melba23, Oh, I see: 1. Do not ask for help with AutoIt scripts, post links to, or start discussion topics on the following subjects: Launching, automation or script interaction with games or game servers, regardless of the game. I understand that point and my previous post with a mentions of the game related things was last. But can I explain? My program just download publicly available .zip archives (which contains .vpk files inside with additional campaigns for the game) and unpack them to game folder. That's all. As I know, in licensed (Steam version) of Left 4 Dead 2 you have two legit options to install some kind of addons to the game. First - use Workshop, or second - manual copy .vpk file to addons folder. After that you manually launch the game and it's processed newly copied .vpk files. So the whole process of installing additional campaigns I cant to name: "regardless of the game". And I use second option almost from 2013. Now I want to add some automation to this process. judge of course to you (or any other moderator) if I violate forum rules, but as already I say, I understand that kind of Forum Rules and in the future I will avoid any mention of this kind and any other prohibited topics. Edited August 31, 2018 by Tersion
Moderators Melba23 Posted August 31, 2018 Moderators Posted August 31, 2018 Tersion, Quote My program just download publicly available .zip archives [...] and unpack them to game folder Given that I will leave the thread open - but please do make sure that you respect the rules in any future threads. M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area
pixelsearch Posted August 31, 2018 Posted August 31, 2018 Hi everybody, This thread is really interesting and I would like to share some thoughts with you. I thought that the "On Event" mode would have solved Tersion's problem in a snap. After all, what seems more natural than clicking on a Stop button, triggering immediately the Stop Event associated function and taking control of the situation ? But unfortunately it's not that simple : when On Event is activated, the Stop button won't do anything until the loop ends in the Start button code, Then I read some great web pages concerning this question, thanks to AdmiralAlkex and Melba23 for their so interesting comments here, at the very bottom of this web page :https://www.autoitscript.com/forum/topic/124262-help-with-guioneventmode/ Not forgetting this very useful wiki page :https://www.autoitscript.com/wiki/Interrupting_a_running_function Then only I could rework Tersion's script, in On Event mode... and it works fine Thanks for reading and hats off to the contributors of this Forum for their help during so many years. expandcollapse popup#include <GUIConstantsEx.au3> Opt("GUIOnEventMode", 1) ;0=disabled, 1=OnEvent mode enabled $hMainForm = GUICreate("Form1", 167, 59, 192, 124) GUISetOnEvent($GUI_EVENT_CLOSE, "ClosePressed") $idLabel = GUICtrlCreateLabel("Label1", 5, 5, 36, 17) $idStartButton = GUICtrlCreateButton("Start", 5, 25, 75, 25) GUICtrlSetOnEvent(-1, "StartFlag") $idStopButton = GUICtrlCreateButton("Stop", 85, 25, 75, 25) GUICtrlSetOnEvent(-1, "StopPressed") GUISetState(@SW_SHOW) ; Declare a flag to be used in OnEvent functions Global $fStartFlag = False While 1 Sleep(10) ; Check if the flag has been set by the StartFlag OnEvent function If $fStartFlag Then ; Now start the "real" function from within the main code StartPressed() EndIf WEnd Func StartFlag() ; Set the flag within the OnEvent function $fStartFlag = True EndFunc ;==>StartFlag Func StartPressed() Local $iStep = 0 Do Sleep(1000) ; Check the flag status, in case Stop was pressed If $fStartFlag = False Then Return EndIf $iStep += 1 GUICtrlSetData($idLabel, $iStep) Until $iStep = 5 $fStartFlag = False EndFunc ;==>StartPressed Func StopPressed() $fStartFlag = False EndFunc ;==>StopPressed Func ClosePressed() Exit EndFunc ;==>ClosePressed "I think you are searching a bug where there is no bug... don't listen to bad advice."
Tersion Posted September 1, 2018 Author Posted September 1, 2018 pixelsearch, Thanks for your thoughts about the problem and for the links you provided. I tested your rework of my example and it's really works nicely and looks not that bad as for understanding. I never used "On Event" mode before, but now I understand that for some tasks it's could be a solution, so I will begin to study more about how to work in this mode.
Tersion Posted September 1, 2018 Author Posted September 1, 2018 So, I come up today with next example (see .gif below) which for now implement almost all I need for multiple download support and non blocking info report every second to ListView column (using AdlibRegister method). For now this example uses classic "Message Loop" and maybe I would rewrote it to "On Event" mode, when I would get more practical skills.
mikell Posted September 1, 2018 Posted September 1, 2018 Last solution : use the usual Message Loop mode, with loops and so on, and GUIRegisterMsg Here is a basic example #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> Global $stop = 0, $exit = 0 GUICreate("My GUI", 200, 100) $label = GUICtrlCreateLabel("", 10, 30, 50, 20) $label2 = GUICtrlCreateLabel("I'm gone", 60, 30, 80, 20) $btn = GUICtrlCreateButton("test", 10, 50, 50, 20) $btn2 = GUICtrlCreateButton("exit", 120, 50, 50, 20) GUISetState() GUIRegisterMsg($WM_COMMAND, "_WM_COMMAND") For $i = 1 to 1000 If $exit Then Exitloop GuiCtrlSetData($label, $i) Sleep(300) Next Msgbox(0,"", "Exit !") Func _WM_COMMAND($hWnd, $Msg, $wParam, $lParam) #forceref $hWnd, $Msg, $lParam Switch BitAND($wParam, 0x0000FFFF) Case $btn $stop = not $stop GuiCtrlSetData($label2, $stop ? "Hey, I'm here !" : "I'm gone") Case $btn2 $exit = 1 EndSwitch Return 'GUI_RUNDEFMSG' EndFunc
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now