revonatu Posted April 21, 2015 Posted April 21, 2015 (edited) Hi, I have a quite complex script and now I would like to define the initial parameters and directories via a GUI. The first question is: Which GUI mode is best for my purposes? I don't understand in detail what the difference is. I tend to OnEvent mode as I only need the GUI at the beginning. Edit: Ok, only in loop mode the file selection works. One question solved. But how do I pause my script and start it after I am done with the GUI? This is my code so far: #include <MsgBoxConstants.au3> #include <WindowsConstants.au3> #include <File.au3> #include <FileConstants.au3> #include <StringConstants.au3> #include <Date.au3> #include <Array.au3> #include <GUIConstantsEx.au3> Local $AutoIt_GUI = GUICreate("ATCOR4 - Initial Settings", 500, 400) ; title, width and height Local $idLabel0 = GUICtrlCreateLabel("Wellcome to this ATCOR4 automation. Please choose your preferences.", 30, 10) ; text and position (left, top) Local $idButton1 = GUICtrlCreateButton("*.meta file", 30, 50, 60) Local $idLabel1 = GUICtrlCreateLabel("select the meta file with start and end time", 120, 55, 300, 60) Local $idButton2 = GUICtrlCreateButton("*.pos file", 30, 80, 60); name, position and width Local $idLabel2 = GUICtrlCreateLabel("select the pos file with flight geometry", 120, 85, 300, 60) Local $idCombo1 = GUICtrlCreateCombo("Operation Type", 30, 150, 100) GUICtrlSetData($idCombo1, "GUI|.inn file", "Operation Type") Global $OperationMode = '"' & GUICtrlRead($idCombo1) & '"' GUISetState(@SW_SHOW) ; display this GUI Local $idMsg = 0 ; In this message loop we use variables to keep track of changes to the GUI controls While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE ExitLoop Exit ;Case $GUI_EVENT_MINIMIZE ;MsgBox($MB_SYSTEMMODAL, "", "Dialog minimized", 2) ;Case $GUI_EVENT_MAXIMIZE ;MsgBox($MB_SYSTEMMODAL, "", "Dialog restored", 2) Case $idButton1 Local $MetaOpenDialog = FileOpenDialog("Select the meta file...", @ScriptDir & "\", "Meta (*.meta)") $metaPath = $MetaOpenDialog GUICtrlSetData($idLabel1, $MetaOpenDialog) Case $idButton2 Local $PosOpenDialog = FileOpenDialog("Select the pos file...", @ScriptDir & "\", "Pos (*.pos)") $posPath = $PosOpenDialog GUICtrlSetData($idLabel2, $PosOpenDialog) EndSwitch WEnd Thanks in advance for any hints and suggestions (the shorter the code the better). Edited April 21, 2015 by revonatu
MikahS Posted April 21, 2015 Posted April 21, 2015 The buttons work for me as expected. Snips & Scripts My Snips: graphCPUTemp ~ getENVvarsMy Scripts: Short-Order Encrypter - message and file encryption V1.6.1 ~ AuPad - Notepad written entirely in AutoIt V1.9.4 Feel free to use any of my code for your own use. Forum FAQ
revonatu Posted April 21, 2015 Author Posted April 21, 2015 Yes, some things work, but why does the Window not close when pressing the x Button in the upper right corner? How do I get back to my script and how do I pause it for the time the GUI is open. WinWaitActive and -Close?
MikahS Posted April 22, 2015 Posted April 22, 2015 When are you not able to close your GUI? As, I was able to when it started and after hitting both buttons. Snips & Scripts My Snips: graphCPUTemp ~ getENVvarsMy Scripts: Short-Order Encrypter - message and file encryption V1.6.1 ~ AuPad - Notepad written entirely in AutoIt V1.9.4 Feel free to use any of my code for your own use. Forum FAQ
revonatu Posted April 23, 2015 Author Posted April 23, 2015 I don't know why but now it worked indeed. Maybe I included some needed package for other reasons. I would still like to know if the loop mode is best for my case. Could I use the event mode as well? If yes, how? After not doing many changes one of my combo boxes (operation mode --> GUI) won"t open a FileOpenDialog anymore. Can you reproduce this? I can"t find an error. expandcollapse popupGlobal $metaPath = "" Global $posPath = "" Global $bsqPath = "" Global $innPath = "" Global $DEMPath = "" ;#cs GUI Creation ################################################################################################################################ Local $AutoIt_GUI = GUICreate("Initial Settings", 500, 300) ; title, width and height Local $idLabel0 = GUICtrlCreateLabel("Wellcome to this automation. Please choose your preferences.", 30, 10) ; text and position (left, top) Local $idButton1 = GUICtrlCreateButton("*.meta file", 30, 50, 60) Local $idLabel1 = GUICtrlCreateLabel("Select the meta file with start and end time in lines 1 and 2.", 150, 55, 300, 60, 0x0002) ; right-aligned Local $idButton2 = GUICtrlCreateButton("*.pos file", 30, 80, 60) Local $idLabel2 = GUICtrlCreateLabel("Select the pos file with geometry.", 150, 85, 300, 60, 0x0002) ; right-aligned Local $idCombo1 = GUICtrlCreateCombo("operation mode", 30, 150, 100) GUICtrlSetData($idCombo1, "GUI|.inn file", "operation mode") Local $idLabel3 = GUICtrlCreateLabel("Select an operation mode and the corresponding input file.", 150, 155, 300, 60, 0x0002) ; right-aligned Local $idCombo2 = GUICtrlCreateCombo("terrain type", 30, 200, 100) GUICtrlSetData($idCombo2, "Flat|Rugged", "terrain type") Local $idLabel4 = GUICtrlCreateLabel("Select a terrain type and in case of rugged terrain a DEM.", 150, 205, 300, 60, 0x0002) ; right-aligned Local $idBExit = GUICtrlCreateButton("Exit", 400, 250, 60); name, position (l t) and width GUICtrlSetColor($idBExit, $COLOR_RED) Local $idBRun = GUICtrlCreateButton("Run", 30, 250, 60) GUICtrlSetColor($idBRun, $COLOR_GREEN) Sleep(1000) GUISetState(@SW_SHOW) ; display the GUI WinWaitActive("ATCOR4 - Initial Settings") ; In this message loop we use variables to keep track of changes to the GUI controls ======================================================== While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE , $idBExit ; when pressed, cancel and exit the script GUIDelete($AutoIt_GUI) Case $idButton1 ; when pressed, open the meta file selection, save and display the path in Label1 $metaPath = FileOpenDialog("Select the meta file...", @ScriptDir, "Meta (*.meta)") GUICtrlSetData($idLabel1, $metaPath) Case $idButton2 ; when pressed, open the pos file selection, save and display the path in Label2 $posPath = FileOpenDialog("Select the pos file...", @ScriptDir, "Pos (*.pos)") GUICtrlSetData($idLabel2, $posPath) Case $idCombo1 ; when pressed, save the selection as variable $OperationMode = GUICtrlRead($idCombo1) If $OperationMode = "GUI" Then $bsqPath = FileOpenDialog("Select the bsq file...", @ScriptDir, "BSQ (*.bsq") GUICtrlSetData($idLabel3, $bsqPath) ElseIf $OperationMode = ".inn file" Then $innPath = FileOpenDialog("Select the initialisation file...", @ScriptDir, "inn (*.inn)") GUICtrlSetData($idLabel3, $innPath) Else GUICtrlSetData($idLabel3, "The operation mode is not set yet. Please do so to continue.") EndIf Case $idCombo2 ; when pressed, save the selection as variable $TerrainType = GUICtrlRead($idCombo2) If $TerrainType = "Rugged" Then $DEMPath = FileOpenDialog("Select the DEM...", @ScriptDir, "DEM (*.bsq;*.grd))") GUICtrlSetData($idLabel4, "Rugged, DEM: " & $DEMPath) ElseIf $TerrainType = "Flat" Then GUICtrlSetData($idLabel4, $TerrainType) Else GUICtrlSetData($idLabel4, "The terrain type is not set yet. Please do so to continue.") EndIf Case $idBRun ; when pressed, return to script and continue ExitLoop EndSwitch WEnd WinClose("Initial Settings")
TheSaint Posted April 23, 2015 Posted April 23, 2015 (edited) You should add in an ExitLoop line after the GUIDelete line for the close event. GUIDelete only removes the visual elements. Probably add a GUIDelete line before the ExitLoop line in your RUN button code too. I would add in error checking for a lot of your code, and test various stages, variable values etc with many a MsgBox to test your code is working as anticipated. P.S. If you only want the GUI to work momentarily, then investigate embedding it in a function, which you call from your main code at a relevant moment(s). You will get finer control that way. Edited April 23, 2015 by TheSaint Make sure brain is in gear before opening mouth! Remember, what is not said, can be just as important as what is said. Spoiler What is the Secret Key? Life is like a Donut If I put effort into communication, I expect you to read properly & fully, or just not comment. Ignoring those who try to divert conversation with irrelevancies. If I'm intent on insulting you or being rude, I will be obvious, not ambiguous about it. I'm only big and bad, to those who have an over-active imagination. I may have the Artistic Liesense to disagree with you. TheSaint's Toolbox (be advised many downloads are not working due to ISP screwup with my storage)
revonatu Posted April 24, 2015 Author Posted April 24, 2015 (edited) Of course! I could have come to that idea by myself. My script is full of error checking but in this case I forgot. There was just a bracket in the filter missing. Thanks a lot. I would still like to know if the loop mode is best for my case. Could I use the event mode as well? If yes, how? Edited April 24, 2015 by revonatu
kylomas Posted April 27, 2015 Posted April 27, 2015 revonatu,I would still like to know if the loop mode is best for my case.Without a definition of "is best" it is impossible to answer.kylomas Forum Rules Procedure for posting code "I like pigs. Dogs look up to us. Cats look down on us. Pigs treat us as equals." - Sir Winston Churchill
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