Jump to content
Sign in to follow this  
van Dusen

Input-control: How To Insert Text At Cursor Position?

Recommended Posts

van Dusen

I'd like to insert text into an Input control at the current position of the text cursor. The text should be inserted by pressing a button. I tried this, but I can't get it work:

#include <GUIConstants.au3>
AutoItSetOption("WinTitleMatchMode", 4)
AutoItSetOption("GUIOnEventMode", 1)

$frm = GUICreate("Test ControlSend", 200, 60)
$txt = GUICtrlCreateInput("Given text in a input control", 10, 10, 180, 20)
$btnA = GUICtrlCreateButton("A", 10, 35, 20, 20)
$btnB = GUICtrlCreateButton("B", 35, 35, 20, 20)
GUICtrlSetState($btnA, $GUI_FOCUS)
GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
GUICtrlSetOnEvent($btnA, "_UpdateTxtA")
GUICtrlSetOnEvent($btnB, "_UpdateTxtB")
GUISetState(@SW_SHOW)

While 1
WEnd

Func _Exit()
    GUIDelete($frm)
    Exit(0)
EndFunc

Func _UpdateTxtA()
    $ins = "[" & GUICtrlRead(@GUI_CtrlId) & "]"
    ControlSend($frm, "", $txt, $ins, 0)
;~  ControlSend($frm, "", $txt, $ins, 1)
;~  ControlSend($frm, "", $txt, "+{END}")
    Return
EndFunc

Func _UpdateTxtB()
    GUICtrlSetState($txt, $GUI_FOCUS)
    Send("[")
    Send(GUICtrlRead(@GUI_CtrlId))
    Send("]")
    Return
EndFunc

For the Send function (Func _UpateTxtB) I need to set focus to the $txt-control first. This marks all text content, which is lost after first Send operation.

The ControlSend function (Func _UpdateTxtA) inserts the sent text at the right position, but sends wrong text. In the example script it should insert "[A]", but it inserts "8a9" instead. On a german keyboard "[" is "AltGr+8", "]" is "AltGr+9" and "A" is "Shift+a". I assume, that ControlSend sends raw keyboard strokes without any qualifiers?

I tried the functions from the Include file GuiEdit.au3 too, but unfortunately without success (I throws many errors, and even if I ignore them, I don't get a result).

I am using AutoIT beta-version 3.1.1.111 (V3.1.1.0 have bugs with tristate checkboxes, so I need to use this beta... in the history list for V3.1.1.112 and newer I didn't see, that problems with ControlSend has been solved... or do I miss anything?)

Any ideas, how I can solve the problem?

Many thanks in advance!

Share this post


Link to post
Share on other sites
GaryFrost

not sure what errors you were getting but this works for me

#include <GUIConstants.au3>
#include <GuiEdit.au3>

AutoItSetOption("WinTitleMatchMode", 4)
AutoItSetOption("GUIOnEventMode", 1)

$frm = GUICreate("Test ControlSend", 200, 60)
$txt = GUICtrlCreateInput("Given text in a input control", 10, 10, 180, 20)
$btnA = GUICtrlCreateButton("A", 10, 35, 20, 20)
$btnB = GUICtrlCreateButton("B", 35, 35, 20, 20)
GUICtrlSetState($btnA, $GUI_FOCUS)
GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
GUICtrlSetOnEvent($btnA, "_UpdateTxt")
GUICtrlSetOnEvent($btnB, "_UpdateTxt")
GUISetState(@SW_SHOW)

While 1
WEnd

Func _Exit()
    GUIDelete($frm)
    Exit(0)
EndFunc

Func _UpdateTxt()
    $ins = "[" & GUICtrlRead(@GUI_CtrlId) & "]"
     _GUICtrlEditReplaceSel($txt,True,$ins)
    Return
EndFunc

SciTE for AutoItDirections for Submitting Standard UDFs

 

Don't argue with an idiot; people watching may not be able to tell the difference.

 

Share this post


Link to post
Share on other sites
van Dusen

Hello gafrost,

thanks a lot for your reply!

I had reinstalled AutoIT+AutoIT.beta+SciTe4AutoIT several times, and I think, that I follwed the given instructions for beta-installations in each try. But for all that I never get a proper installation. Now I have installed AutoIT.beta not in a seperate beta subdirectory, but above the stable 3.1.1 version.

And now it works, at least concerning AutoIT :)

When I start a script from within SciTe I still get a bunch of messages like "ERROR: {func()}: undefined function" (with {func()} = HWnd(), IsHWnd, DllStructCreate() and so on). This problem concerns only SciTe (my installation / configuration, respectively) : When I ignore these errors, the script runs anyway. So I'll learn to live with these error messages :mellow:

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
Sign in to follow this  

×