CarlD Posted June 16, 2019 Posted June 16, 2019 (edited) Update: Download the latest version here. As my first stab at GUI scripting, I'm trying to write a simple graphical interface for Grep for Windows. I have a basic GUI, but I'm stuck on one point and nothing I've tried so far works. The sticking point is that while the Tab key works to move focus from one input control to the next, clicking the mouse on any but the first input does nothing. This seems like a basic feature of GUI functionality that should work out of the box (like Tab), but clearly I'm missing something. I tried (among many other things) Melba23's technique in the post below, but this doesn't do what I'm after -- getting the left click to set the insertion point for user input. Would greatly appreciate a pointer or two. 😉 Here's my code so far: expandcollapse popup; Grep for Windows -- GUI [CLD] #include <AutoItConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WinAPI.au3> #include <WindowsConstants.au3> Opt("WinTitleMatchMode", -2) #cs FileInstall("X:\nix\search1.ico", @TempDir & "\search1.ico") FileInstall("X:\nix\grep.exe", @TempDir & "\grep.exe") FileInstall("X:\nix\sed.exe", @TempDir & "\sed.exe") FileInstall("X:\nix\libiconv2.dll", @TempDir & "\libiconv2.dll") FileInstall("X:\nix\libintl3.dll", @TempDir & "\libintl3.dll") FileInstall("X:\nix\pcre3.dll", @TempDir & "\pcre3.dll") FileInstall("X:\nix\regex2.dll", @TempDir & "\regex2.dll") #ce ; $sDefFs = @ScriptDir & "\.txt" $sOut = "" $iX = 20 $iY = 20 $hgGGrep = GUICreate("Grep for Windows: Simple TeXT search", 600, 600) GUISetState(@SW_SHOW, $hgGGrep) ; Obtain value of control: GUICtrlRead() ; left, top, width, height ; $iX, $iY, $iX + n, $iY + m ; $hgIco = GUICtrlCreateIcon(@ScriptDir & "\search1.ico", $iX, $iY, 10) $hgGL0 = GUICtrlCreateLabel("Enter a string or regular expression" & @CRLF & "(space between words means ""OR"")", $iX + 50, $iY, 250, 30) $hgSch = GUICtrlCreateInput("", $iX + 50, $iY + 40, 325, 20, $GUI_SS_DEFAULT_INPUT, -1) $hgXyZ = GUICtrlCreateCheckbox("cAsE-sEnSiTiVe", $iX + 50, $iY + 65, -1, -1) $hgExe = GUICtrlCreateButton("Search", 400, $iY + 40, -1, -1) $hgFL1 = GUICtrlCreateLabel("Filespec", $iX + 50, $iY + 100, 250, 20) $hgFs1 = GUICtrlCreateInput("d:\path\*.txt", $iX + 110, $iY + 100, 250, 20, $GUI_SS_DEFAULT_INPUT, -1) $hgFL2 = GUICtrlCreateLabel("Filespec", $iX + 50, $iY + 120, 250, 20) $hgFs2 = GUICtrlCreateInput("", $iX + 110, $iY + 120, 250, 20, $GUI_SS_DEFAULT_INPUT, -1) $hgFL3 = GUICtrlCreateLabel("Filespec", $iX + 50, $iY + 140, 250, 20) $hgFs3 = GUICtrlCreateInput("", $iX + 110, $iY + 140, 250, 20, $GUI_SS_DEFAULT_INPUT,-1) $hgOut = GUICtrlCreateEdit($sOut, 25, 190, 550, 400, $ES_LEFT, -1) GUICtrlSetState($hgSch, $GUI_FOCUS) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd ; #cs _WinAPI_SetFocus(ControlGetHandle("Grep for Windows", "", $hgSch)) _WinAPI_SetFocus(ControlGetHandle("Grep for Windows", "", $hgFs1)) _WinAPI_SetFocus(ControlGetHandle("Grep for Windows", "", $hgFs2)) _WinAPI_SetFocus(ControlGetHandle("Grep for Windows", "", $hgFs3)) #ce Thanks in advance. Edited June 23, 2019 by CarlD Added download link
pixelsearch Posted June 16, 2019 Posted June 16, 2019 (edited) Hi CarlD Your 3 Label controls got a too large width that overlaps the 3 Input controls on the same line. Just reduce each Label control width, for example from 250 to 50, then you can select the 3 Input controls with your mouse $hgFL1 = GUICtrlCreateLabel("Filespec", $iX + 50, $iY + 100, 50, 20) $hgFs1 = GUICtrlCreateInput("d:\path\*.txt", $iX + 110, $iY + 100, 250, 20, $GUI_SS_DEFAULT_INPUT, -1) $hgFL2 = GUICtrlCreateLabel("Filespec", $iX + 50, $iY + 120, 50, 20) $hgFs2 = GUICtrlCreateInput("", $iX + 110, $iY + 120, 250, 20, $GUI_SS_DEFAULT_INPUT, -1) $hgFL3 = GUICtrlCreateLabel("Filespec", $iX + 50, $iY + 140, 50, 20) $hgFs3 = GUICtrlCreateInput("", $iX + 110, $iY + 140, 250, 20, $GUI_SS_DEFAULT_INPUT,-1) $hgOut = GUICtrlCreateEdit($sOut, 25, 190, 550, 400, $ES_LEFT, -1) Also, concerning the $GUI_SS_DEFAULT_* styles, Melba23 explained something interesting here :https://www.autoitscript.com/forum/topic/122105-gui_ss_default_input/?do=findComment&comment=847583 It shows that you don't need to use the $GUI_SS_DEFAULT_INPUT variable in your Input control style, because it's the default and you're not adding any new style to it. On the contrary, as you're adding a new style to your Edit control, then you should keep its default $GUI_SS_DEFAULT_EDIT and add to it your new style, using the BitOr() function. Also, -1 is not required as extended style as it's the default, which brings us here : $hgFL1 = GUICtrlCreateLabel("Filespec", $iX + 50, $iY + 100, 50, 20) $hgFs1 = GUICtrlCreateInput("d:\path\*.txt", $iX + 110, $iY + 100, 250, 20) $hgFL2 = GUICtrlCreateLabel("Filespec", $iX + 50, $iY + 120, 50, 20) $hgFs2 = GUICtrlCreateInput("", $iX + 110, $iY + 120, 250, 20) $hgFL3 = GUICtrlCreateLabel("Filespec", $iX + 50, $iY + 140, 50, 20) $hgFs3 = GUICtrlCreateInput("", $iX + 110, $iY + 140, 250, 20) $hgOut = GUICtrlCreateEdit($sOut, 25, 190, 550, 400, BitOR($GUI_SS_DEFAULT_EDIT, $ES_LEFT)) Good luck Edited June 16, 2019 by pixelsearch "I think you are searching a bug where there is no bug... don't listen to bad advice."
CarlD Posted June 17, 2019 Author Posted June 17, 2019 4 hours ago, pixelsearch said: Your 3 Label controls got a too large width that overlaps the 3 Input controls on the same line. Just reduce each Label control width, for example from 250 to 50, then you can select the 3 Input controls with your mouse That's it! Problem solved. Thank you, @pixelsearch! 4 hours ago, pixelsearch said: Also, concerning the $GUI_SS_DEFAULT_* styles, Melba23 explained something interesting here :https://www.autoitscript.com/forum/topic/122105-gui_ss_default_input/?do=findComment&comment=847583 It shows that you don't need to use the $GUI_SS_DEFAULT_INPUT variable in your Input control style, because it's the default and you're not adding any new style to it. On the contrary, as you're adding a new style to your Edit control, then you should keep its default $GUI_SS_DEFAULT_EDIT and add to it your new style, using the BitOr() function. Also, -1 is not required as extended style as it's the default, which brings us here : [...]  Noted, thank you. Some of these parameters are just placeholders, as I'm still learning my way. I just started this yesterday! Your help is much appreciated! 😀
CarlD Posted June 21, 2019 Author Posted June 21, 2019 (edited) Well, I've got pretty far with this in the last week, I think. Grep for Windows is lightning fast for text search, and my script wraps a simple GUI around it. You can read search results in the Edit window, or export them to a text editor or to Word (rich text). The EXEcutable is attached (GGREP.ZIP). The source code is accessible via the Settings button. Thanks again to @pixelsearch for getting me over the initial hump. 🤓 You can download the latest version here. Edited June 23, 2019 by CarlD Added download link
CarlD Posted June 22, 2019 Author Posted June 22, 2019 (edited) Made a few tweaks to the script. The updated ZIP is attached. The script now offers a choice to display the source in plain text or PDF (syntax-highlighted) format. You can download the latest version here. Edited June 23, 2019 by CarlD Added download link
CarlD Posted June 22, 2019 Author Posted June 22, 2019 (edited) Whoops, Case-sensitive option was not working -- FIXED. Please use the script attached to this message and discard all earlier. Thanks. You can download the latest version here. Edited June 23, 2019 by CarlD Added download link
CarlD Posted June 22, 2019 Author Posted June 22, 2019 (edited) Further tweak: added FileOpenDialog buttons for the Filespec fields. You can download the latest version here. Â Edited June 23, 2019 by CarlD Added download link
CarlD Posted June 23, 2019 Author Posted June 23, 2019 (edited) Bug in RTF output when text contains "{" -- FIXED. You can download the latest version here. Edited June 23, 2019 by CarlD Added download link
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