alie Posted December 16, 2008 Share Posted December 16, 2008 hello, my problem is described in the first comment of the script, sorry if I didnt use correct english and couldnt exactly tell my problem very well. CODE;This script should transfer the data of an editbox on a set of labels. To realize that, I created an invisible editbox that have controlfocus ;and an array of labels that should show the editboxtext. During a while-loop changes in the editbox are detected and transfered to the labelset. ;The update of new text works well, but when i created the "backspace-function" i got into troubles that I don't understand: The labelarray gives ;the wrong control-id's when I try to get them with the position. #include<guiconstantsex.au3> #include<windowsconstants.au3> HotKeySet("q", "_quit") ;sets exitfunction GUICreate("GUITest", 600, 400, -1, -1, $WS_POPUP) Opt("GUIOnEventMode", 1) Opt("MouseCoordMode", 0) $EditBox = GUICtrlCreateEdit("", 0, 0, 600, 400) GUICtrlSetState(-1, $GUI_HIDE) ControlFocus("GUITest", "", $EditBox) $KeyInput = GUICtrlRead($EditBox) Dim $CursorX = 0, $CursorY = 0, $TextPosX = 0, $TextPosY = 0 ;the cursor-vars of create labelset and change labeldata Dim $LabelList[32][22] ;the array for the labels sorted by position _CreateLabels() ;creates the labelset on GUI While 1 Sleep(10) If StringLen(GUICtrlRead($EditBox)) > StringLen($KeyInput) Then ;If the string got longer the function "_AddInput" is called $KeyInput = GUICtrlRead($EditBox) _AddInput() EndIf If StringLen(GUICtrlRead($EditBox)) < StringLen($KeyInput) Then ;If the string got shorter the function "_eraseInput" is called $KeyInput = GUICtrlRead($EditBox) _eraseinput() EndIf WEnd ;This function fills GUI with empty labels with unique arrayid's depending on position. Func _CreateLabels() For $x = 1 To 20 $LabelList[$CursorX / 20][$CursorY / 20] = GUICtrlCreateLabel("", $CursorX, $CursorY, 20, 20) GUICtrlSetFont(-1, 12) GUICtrlSetOnEvent(-1, "_test") For $x2 = 1 To 30 $CursorX = $CursorX + 20 $LabelList[$CursorX / 20][$CursorY / 20] = GUICtrlCreateLabel("", $CursorX, $CursorY, 20, 20) GUICtrlSetFont(-1, 12) GUICtrlSetOnEvent(-1, "_test") Next $CursorY = $CursorY + 20 $CursorX = 0 Next GUISetState() EndFunc ;==>_CreateLabels ;This function refreshes the labels with new letters, creating new lines at linefeeds and lineends. Func _AddInput() If Asc(StringRight($KeyInput, 1)) <> 8 Then ;checks if a linefeed If Asc(StringRight($KeyInput, 1)) <> 10 Then ;or carriage return were sent MsgBox(1, "", $TextPosX & "," & $TextPosY & "," & $LabelList[$TextPosX][$TextPosY]) ;shows a testmsg of actual x-position, y-position and control id $LabelList[$TextPosX][$TextPosY] = GUICtrlSetData($LabelList[$TextPosX][$TextPosY], StringRight($KeyInput, 1)) MsgBox(1, "", $TextPosX & "," & $TextPosY & "," & $LabelList[$TextPosX][$TextPosY]) ;shows a testmsg of actual x-position, y-position and control id Else ;again but it shows the wrong control id $TextPosY += 1 $TextPosX = -1 EndIf EndIf $TextPosX += 1 If $TextPosX = 30 Then ;checks for lineend by position $TextPosY += 1 $TextPosX = 0 EndIf EndFunc ;==>_AddInput ;This function shoud erase the last letter-label. Func _eraseinput() $TextPosX -= 1 MsgBox(1, "", $TextPosX & "," & $TextPosY & "," & $LabelList[$TextPosX][$TextPosY]) ;here my problem is shown in a msg: the control id is not the correct one GUICtrlSetData($LabelList[$TextPosX][$TextPosY], "") ;but every time an 1. If $TextPosX = 0 Then $TextPosX = 30 $TextPosY -= 1 EndIf EndFunc ;==>_eraseinput ;Testfunction to check position - and controlid's. Func _test() GUICtrlSetData($LabelList[Round(MouseGetPos(0) / 20, 1)][Round(MouseGetPos(1) / 20, 1)], InputBox("", "")) ;testing the position id works fine here EndFunc ;==>_test ;Quitfunction and output of the original editboxtext. Func _quit() MsgBox(1, "", GUICtrlRead($EditBox)) Exit EndFunc ;==>_quit it would make me very happy, if anyone could help me with this problem, thx jakob. Link to comment Share on other sites More sharing options...
Zedna Posted December 16, 2008 Share Posted December 16, 2008 You can catch Edit change event much more eleganthttp://www.autoitscript.com/forum/index.ph...st&p=198517 Resources UDF ResourcesEx UDF AutoIt Forum Search Link to comment Share on other sites More sharing options...
alie Posted December 17, 2008 Author Share Posted December 17, 2008 hello found that silly mistake. thx a lot for your method to catch text, but i m not really able to understand it. but my scripts are complicated by default. jakob. Link to comment Share on other sites More sharing options...
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