By
CarlD
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:
; 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.