Followers 0

# Accelerator keys, where to place them?

## 17 posts in this topic

#1 ·  Posted (edited)

I'm a bit confused about accelerator keys and checkboxes.

1) See my code below: Is this the correct way how I put them in the script?

(First: reading the ini file to see if the checkbox is enabled then setting the checkbox state before "GUISetState(@SW_SHOW"

Second: After having created the GUI, if the status of the checkbox changes disable or enable the accelerator keys (Case $CB3) Third: when the GUI is closed, write checkbox status in ini) 2) I've read in a reply of Melba in another topic that in order to disable the accelerator keys (in my case {enter}) It is needed to Send a CR to the control "ControlSend($hGUI, "", $hFocus, @CR)" I don't know why this is, I haven't understand it very well and I don't know where to put it in my case. (but it seems to work fine in my code without it) 3) In my code below I have inserted only 2 buttons (search and images) In reality I have a lot more buttons. The code between ";Focus and Accelerator key" and ";END Focus and Accelerator key" is almost the same in all Cases. The only thing different is the value of$focus. The value of $focus is the Case name. Is there a way to put this code in an external function to avoid multiplying the code many times? (I noted in the help file that there is not a GUI ID in GUICtrlSetState and GUISetAccelerators) #include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <String.au3> #include <GuiButton.au3> #include <Constants.au3> #include <EditConstants.au3> HotKeySet("^4", "SearchMenu") While 1 Sleep(10000) WEnd Func SearchMenu() ;========GUI=============$MyFile = "d:\temp\RW-autoit.ini"
Global $url$Form5=          GUICreate("Search Menu", 345, 140, @DesktopWidth*0.65, @DesktopHeight*0.21)
$RWSearch = GuiCtrlCreateEdit("", 16, 10, 270, 50)$textGoogle  =   GUICtrlCreateLabel("Google:",                       20,  90, 100, 20)
$bsearch = GUICtrlCreateButton("Search", 110, 90, 60, 20)$bimages =       GUICtrlCreateButton("Images",                      175,  90,  60, 20)
$CB3 = GUICtrlCreateCheckbox("Enter=Send (^Enter=Enter)", 110, 120, 145, 20) If FileExists($MyFile) Then
$State = IniRead($MyFile,"CheckBox","CB3",0)
If $State == 1 Then GUICtrlSetState(($CB3), BitOr($GUI_ENABLE,$GUI_CHECKED))
Else
GUICtrlSetState(($CB3), BitOr($GUI_ENABLE, $GUI_UNCHECKED)) EndIf$Focus = IniRead($MyFile,"Focus","Button",0) Else GUICtrlSetState(($CB3, BitOr($GUI_ENABLE,$GUI_CHECKED))
$Focus = "bsearch" EndIf GUISetState(@SW_SHOW) ;========END GUI========== Local$aAccelKeys[1][2] = [["{ENTER}", eval($focus)]] If _GUICtrlButton_GetCheck($CB3) Then
GUISetAccelerators($aAccelKeys) Global$EnterSubmit = true
Else
GUISetAccelerators(0)
Global $EnterSubmit = false EndIf ; Set the Default Key GUICtrlSetState(eval($focus), $GUI_DEFBUTTON) While 1$nMsg = GUIGetMsg()
Switch $nMsg Case$GUI_EVENT_CLOSE
; write status checkboxes in ini
If FileExists($MyFile) Then If _GUICtrlButton_GetCheck($CB3) Then
IniWrite($MyFile, "CheckBox", "CB3", 1) Else IniWrite($MyFile, "CheckBox", "CB3", 0)
EndIf
EndIf

; write focus in ini
IniWrite($MyFile, "Focus", "Button",$Focus)

GuiDelete($Form5) ExitLoop Case$CB3
If _GUICtrlButton_GetCheck($CB3) Then GUISetAccelerators($aAccelKeys)
Global $EnterSubmit = true Else GUISetAccelerators(0) Global$EnterSubmit = false
EndIf

Case $bsearch$RWSearch1 = GUICtrlRead($RWSearch)$RWSearch2 = StringRegExpReplace($RWSearch1, "(\s+)", "+") ;Focus and Accelerator key$focus = "bsearch"
GUICtrlSetState(eval($focus),$GUI_DEFBUTTON)
If $EnterSubmit then GUISetAccelerators($aAccelKeys)
Else
GUISetAccelerators(0)
Endif
;End Focus and Accelerator key

$url = "https://www.google.com/search?q=" &$RWSearch2

Case $bimages$RWSearch1 = GUICtrlRead($RWSearch)$RWSearch2 = StringRegExpReplace($RWSearch1, "(\s+)", "+") ;Focus and Accelerator key$focus = "bsearch"
GUICtrlSetState(eval($focus),$GUI_DEFBUTTON)
If $EnterSubmit then GUISetAccelerators($aAccelKeys)
Else
GUISetAccelerators(0)
Endif
;End Focus and Accelerator key

$url = "http://images.google.com/images?hl=en&q=" &$RWSearch2
EndSwitch
WEnd

ClipPut($url) ShellExecute($url)
EndFunc ;==>SearchMenuExec
Edited by remin

##### Share on other sites

remin,

I've read in a reply of Melba in another topic that in order to disable the accelerator keys (in my case {enter}) - It is needed to Send a CR to the control

Can you point me to where you found that because it is wrong and I cannot remember having said such a thing.

How you are setting/cancelling the Accelerator keys is fine - just pass a non-array value to the function.

M23

Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind._______My UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

##### Share on other sites

remin,

Can you point me to where you found that because it is wrong and I cannot remember having said such a thing.

How you are setting/cancelling the Accelerator keys is fine - just pass a non-array value to the function.

M23

Sure

'?do=embed' frameborder='0' data-embedContent>>

(the last post)

Can you please tell me what you mean with pass a non-array value to the function?

##### Share on other sites

remin,

That code is used because the OP wanted to to actually use the associated Accel key when another control had focus. The code looks to see which control has keyboard focus and then if required disables the Accel function, passes an ENTER to the control and then re-enables the Accel function:

Case $cEnter ; Get control with focus$hFocus = _WinAPI_GetFocus()
If $hFocus = GUICtrlGetHandle($cInput) Then
; If input
MsgBox(0, "Test", "Enter Pressed In Input")
Else
; If not we need to disable the Accel key
GUISetAccelerators(0)
; Send a CR to the control
ControlSend($hGUI, "",$hFocus, @CR)
; And then reenable the Accel key

Edited by remin

##### Share on other sites
How you are setting/cancelling the Accelerator keys is fine - just pass a non-array value to the function.

Oh.. sorry,

I didn't understand this phrase in the beginning.

I thought I had to add a non-array value to the function

but your way of writing is a confirmation of what I did.

I'm curious to know if I can use GUICtrlSetState and GUISetAccelerators

in an external function.. there is no way to indicate the Gui-name in both functions ....

##### Share on other sites

remin,

Yes, you can use a function - this is how I might do it (although I have not tested the code as I have no idea what you are doing):

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <String.au3>
#include <GuiButton.au3>
#include <Constants.au3>
#include <EditConstants.au3>

Global $url,$Focus, $EnterSubmit ; Do not declare Global variables inside functions <<<<<<<<<<<< While 1 Sleep(10) ; 10 is quite sufficient <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< WEnd Func SearchMenu() ;========GUI=============$MyFile = "d:\temp\RW-autoit.ini"

$Form5 = GUICreate("Search Menu", 345, 140, @DesktopWidth * 0.65, @DesktopHeight * 0.21)$RWSearch = GUICtrlCreateEdit("", 16, 10, 270, 50)
$textGoogle = GUICtrlCreateLabel("Google:", 20, 90, 100, 20)$bsearch = GUICtrlCreateButton("Search", 110, 90, 60, 20)
$bimages = GUICtrlCreateButton("Images", 175, 90, 60, 20)$CB3 = GUICtrlCreateCheckbox("Enter=Send (^Enter=Enter)", 110, 120, 145, 20)

If FileExists($MyFile) Then$State = IniRead($MyFile, "CheckBox", "CB3", 0) If$State = 1 Then ; == means case-sensitive string comparison, so not needed here <<<<<<<<<<<<<<<<<<<<<<<
GUICtrlSetState(($CB3), BitOR($GUI_ENABLE, $GUI_CHECKED)) Else GUICtrlSetState(($CB3), BitOR($GUI_ENABLE,$GUI_UNCHECKED))
EndIf
$Focus = IniRead($MyFile, "Focus", "Button", 0)
Else
GUICtrlSetState($CB3, BitOR($GUI_ENABLE, $GUI_CHECKED))$Focus = "bsearch"
EndIf
GUISetState(@SW_SHOW)
;========END GUI==========

Local $aAccelKeys[1][2] = [["{ENTER}", Eval($Focus)]]

;If _GUICtrlButton_GetCheck($CB3) Then If GUICtrlRead($CB3) = $GUI_CHECKED Then ; Use native functions if possible <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< GUISetAccelerators($aAccelKeys)
$EnterSubmit = True Else GUISetAccelerators(0)$EnterSubmit = False
EndIf

; Set the Default Key
GUICtrlSetState(Eval($Focus),$GUI_DEFBUTTON)

While 1
$nMsg = GUIGetMsg() Switch$nMsg
Case $GUI_EVENT_CLOSE ; write status checkboxes in ini If FileExists($MyFile) Then
If GUICtrlRead($CB3) =$GUI_CHECKED Then
IniWrite($MyFile, "CheckBox", "CB3", 1) Else IniWrite($MyFile, "CheckBox", "CB3", 0)
EndIf
EndIf
; write focus in ini
IniWrite($MyFile, "Focus", "Button",$Focus)
GUIDelete($Form5) ExitLoop Case$CB3
If GUICtrlRead($CB3) =$GUI_CHECKED Then
GUISetAccelerators($aAccelKeys)$EnterSubmit = True
Else
GUISetAccelerators(0)
$EnterSubmit = False EndIf Case$bsearch
$RWSearch1 = GUICtrlRead($RWSearch)
$RWSearch2 = StringRegExpReplace($RWSearch1, "(\s+)", "+")

_Focus_Accel("bsearch", $aAccelKeys) ; Call a function with suitable parameters <<<<<<<<<<<<<<<<<$url = "https://www.google.com/search?q=" & $RWSearch2 SearchMenuExec() Case$bimages
$RWSearch1 = GUICtrlRead($RWSearch)
$RWSearch2 = StringRegExpReplace($RWSearch1, "(\s+)", "+")

_Focus_Accel("bImages", $aAccelKeys) ; Call a function with suitable parameters <<<<<<<<<<<<<<<<<$url = "http://images.google.com/images?hl=en&q=" & $RWSearch2 SearchMenuExec() EndSwitch WEnd EndFunc ;==>SearchMenu Func SearchMenuExec() ClipPut($url)
ShellExecute($url) EndFunc ;==>SearchMenuExec Func _Focus_Accel($Focus, $aAccelKeys)$Focus = "bsearch"
GUICtrlSetState(Eval($Focus),$GUI_DEFBUTTON)
If $EnterSubmit Then GUISetAccelerators($aAccelKeys)
Else
GUISetAccelerators(0)
EndIf

EndFunc

m23

Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind._______My UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

##### Share on other sites

#8 ·  Posted (edited)

It seems that something doesn't work.

Without the function (_Focus_Accel) it works fine.

With the function not (neither the Accelerator Keys nor the focus are updated).

........

You wrote in your reply that you didn't understand what I'm trying to do.

What I would like to do with the checkbutton is:

- when the checkbutton CB3 (Enter=Send) is checked

I would like to view an inputbox of 1 line

$RWSearch = GUICtrlCreateInput("", 16, 10, 270, 25) (with accelerators enabled and focus active on last used button) - when the checkbutton CB3 (label: Enter=Send) is unchecked I would like to view an editbox of 3 lines $RWSearch = GUICtrlCreateEdit("", 16, 10, 270, 65)

(with accelerators disabled and focus active on last used button

I hope I made myself clear

Edited by remin

##### Share on other sites

remin,

I think I understand now.

I would code something like that rather differently. Most importantly I would create the GUI just once and then hide/show it as required - that way you do not need an ini file as the various values can be stored within the script itself. I have also shown how you can use a 2D array to have as many buttons as you want - although you will have to develop an algorithm to position them within your GUI, as well as making the GUI big enough to hold them.

Take a look at this and see if it does what you want - then we can then look to developing the button algorithm:

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Constants.au3>
#include <EditConstants.au3>

; These need to be Global as we retain their values between function calls
Global $RWSearch,$Focus = 9999

; Create an array to hold button data: ["Title", ControlID, "url to use"]
Global $aButton[3][3] = [[2, 0, 0], _ ["Search", -1, "https://www.google.com/search?q="], _ ["Images", -1, "http://images.google.com/images?hl=en&q="]]$Form5 = GUICreate("Search Menu", 345, 140, @DesktopWidth * 0.65, @DesktopHeight * 0.21)
$textGoogle = GUICtrlCreateLabel("Google:", 20, 90, 100, 20) For$i = 1 To $aButton[0][0]$aButton[$i][1] = GUICtrlCreateButton($aButton[$i][0], 45 + ($i * 65), 90, 60, 20)
Next
$CB3 = GUICtrlCreateCheckbox("Enter=Send (^Enter=Enter)", 110, 120, 145, 20) GUISetState(@SW_HIDE) While 1 Sleep(10) WEnd Func SearchMenu() ; Check state of checkbox If GUICtrlRead($CB3) = $GUI_CHECKED Then ; Create correct sized input$RWSearch = GUICtrlCreateInput("", 16, 10, 270, 25, $ES_WANTRETURN) ; Set accel key If$Focus <> 9999 Then
Local $aAccelKeys[1][2] = [["{ENTER}",$Focus]]
GUISetAccelerators($aAccelKeys) EndIf Else ; Create correct sized input$RWSearch = GUICtrlCreateEdit("", 16, 10, 270, 65, BitOr($ES_WANTRETURN,$WS_VSCROLL, $ES_AUTOVSCROLL)) ; Clear Accel key GUISetAccelerators(0) EndIf ; Set the Default Key GUICtrlSetState($Focus, $GUI_DEFBUTTON) ; Show GUI GUISetState(@SW_SHOW) While 1$nMsg = GUIGetMsg()
Switch $nMsg Case$GUI_EVENT_CLOSE
; Delete search box
GUICtrlDelete($RWSearch) ; Hide GUI GUISetState(@SW_HIDE) ExitLoop Case$CB3
; Delete current edit control
GUICtrlDelete($RWSearch) ; Creat new edit control and adjust Accel keys as required If GUICtrlRead($CB3) = $GUI_CHECKED Then ; Create correct sized input$RWSearch = GUICtrlCreateInput("", 16, 10, 270, 25, $ES_WANTRETURN) If$Focus = 9999 Then
; No focus set so uncheck
GUICtrlSetState($CB3,$GUI_UNCHECKED)
Else
; Set accel key
Local $aAccelKeys[1][2] = [["{ENTER}",$Focus]]
GUISetAccelerators($aAccelKeys) EndIf Else ; Create correct sized input$RWSearch = GUICtrlCreateEdit("", 16, 10, 270, 65, BitOr($ES_WANTRETURN,$WS_VSCROLL, $ES_AUTOVSCROLL)) ; Clear accel key GUISetAccelerators(0) EndIf Case Else ; Look through the buttons For$i = 1 To $aButton[0][0] If$nMsg = $aButton[$i][1] Then
; Found a button
$RWSearch1 = GUICtrlRead($RWSearch)
$RWSearch2 = StringRegExpReplace($RWSearch1, "(\s+)", "+")
; Set focus for next round
$Focus =$aButton[$i][1]$url = $aButton[$i][2] & $RWSearch2 MsgBox($MB_SYSTEMMODAL, "Actioning", $aButton[$i][0] & @CRLF & @CRLF & $url) ;SearchMenuExec($url)

; No point in looking further
ExitLoop
EndIf
Next
EndSwitch
WEnd

Func SearchMenuExec($url) ClipPut($url)
ShellExecute($url) EndFunc ;==>SearchMenuExec Let me know how it works - and if you have any questions. M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind._______My UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columns ChooseFileFolder ---- Single and multiple selections from specified path treeview listing Date_Time_Convert -- Easily convert date/time formats, including the language used ExtMsgBox --------- A highly customisable replacement for MsgBox GUIExtender -------- Extend and retract multiple sections within a GUI GUIFrame ---------- Subdivide GUIs into many adjustable frames GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView Marquee ----------- Scrolling tickertape GUIs NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes Notify ------------- Small notifications on the edge of the display Scrollbars ----------Automatically sized scrollbars with a single command StringSize ---------- Automatically size controls to fit text Toast -------------- Small GUIs which pop out of the notification area #### Share this post ##### Link to post ##### Share on other sites #10 · Posted (edited) Thank you very much Melba! You've dedicated a lot of time to my script! I resolved all my questions. The only thing I didn't use is the dynamic button creator. Most Urls's of my Cases are constructed and there is a lot more text then the single Url. Just a few remarks: -------- While 1 Sleep(10) WEnd Can I change it to Sleep(1000) or Sleep(10000)? Higher values takes less CPU I've noted. (I still don't understand very well what it does) -------- I haven't added (for now)  ExitLoop to all Case. It seems to work fine without. But I added to Case$GUI_EVENT_CLOSE:
        GuiDelete($Form5) ExitLoop Is it correct to do it without ExitLoop in all other CASE -------- Now when my Search Script is ready I'll add it to my general script file with other scripts, isn't it? There will no conflicts I believe because the search script is invoked by hotkey isn't it? -------- You've told me to write the global keys at the top of the file. I have many hotkeys in my general script file. Do I have to declare the global keys below the hotkeys or can it also be between the hotkeys? Is this correct? <includes.......> HotKeySet("^4", "SearchMenu") Global$url,$Currenttab ..... HotKeySet("^5", "emptyclipb") HotKeySet("^+5", "empty2ndclipb") -------- You wrote in a previous reply: $State = IniRead($MyFile, "CheckBox", "CB3", 0) If$State = 1 Then ; == means case-sensitive string comparison, so not needed here <<<<<<<<<<<<<<<<<<<<<<<

I still don't understand exactly what you mean by this.

--------

My convertion from AHK to AI is almost done

One thing I haven't converted till now:

My autotext lines

:?*:\\em::myname@domain.com
etc..

This isn't possible in autoit isn't it?

--------

Melba, thank you again for all you did.

I'm glad I switched to autoit.

Have a nice day.

Edited by remin

##### Share on other sites

remin,

I'm glad I switched to autoit

Good. I am glad you like the script - and it is my pleasure to help you.

Now to all the questions:

Can I change it to Sleep(1000) or Sleep(10000)?

Sleep(10) is the lowest script pause you can have and is quite suffcient to give the CPU time to breathe and personally I have never seen for than 1% CPU use on my machine when using that value. Certainly you can use a bigger value - but I doubt if would make that much difference to this script.

I haven't added (for now) ExitLoop to all Case

You do not need to. The only reason that it is present when we look for the buttons is that once we have found the pressed button there is no point looking any further. So we use ExitLoop to exit from the For $i = 1 To$aButton[0][0] loop. As the other Case codes do not use loops there is no need to exit them.

There will no conflicts I believe because the search script is invoked by hotkey isn't it?

I have no idea as I have not seen the other script.

Do I have to declare the global keys below the hotkeys or can it also be between the hotkeys?

Autoit is pretty tolerant about where you place things, but I suggest that you try and structure your code in a sensible way - it helps debugging and is a boon when you return to a script after some time. I always try to structure my scripts like this:

Directives
Include files
Options
HotKeys
Global declarations
Main code
Functions
Handlers
Obviously you may wish to do something different, but coding in a structured manner, whatever it is, makes life much easier, believe me!

case-sensitive string comparison, so not needed here <<<<<<<<<<<<<<<<<<<<<<<

I still don't understand exactly what you mean by this

AutoIt normally compares using the = operator. If both sides are numeric it does a numeric comparison; if both sides are strings it does a case-insensitive ASCII comparison; if there is a mix of datatypes it can go very wrong, so force the 2 sides into type you want using String or Number. If you use the == operator then AutoIt forces both sides into strings and does a case-sensitive ASCII comparison - this takes longer than a simple compare and so you should only use it if you really require such a comparison. In this case you are comparing 2 numbers and so there is no need.

:?*:em::myname@domain.com

I have no idea what an "autotext" line is supposed to do - so I cannot comment on whether AutoIt can do whatever it is. If you explain what you are trying to do we can probably come up with a solution.

M23

Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind._______My UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

##### Share on other sites

#12 ·  Posted (edited)

Good. I am glad you like the script - and it is my pleasure to help you.

Thank you

Sleep(10) is the lowest script pause you can have and is quite suffcient to give the CPU time to breathe and personally I have never seen for than 1% CPU use on my machine when using that value. Certainly you can use a bigger value - but I doubt if would make that much difference to this script.

The higher the sleep value the slower the response of the script isn't it?

AutoIt normally compares using the = operator. If both sides are numeric it does a numeric comparison; if both sides are strings it does a case-insensitive ASCII comparison; if there is a mix of datatypes it can go very wrong, so force the 2 sides into type you want using String or Number. If you use the == operator then AutoIt forces both sides into strings and does a case-sensitive ASCII comparison - this takes longer than a simple compare and so you should only use it if you really require such a comparison. In this case you are comparing 2 numbers and so there is no need.

I still don't get it totally.

My code:

     $State = IniRead($MyFile,"CheckBox",$cbarray[$i],0)
If $State == 1 Then GUICtrlSetState(eval($cbarray[$i]), BitOR($GUI_ENABLE, $GUI_CHECKED)) Else GUICtrlSetState(eval($cbarray[$i]), BitOR($GUI_ENABLE, $GUI_UNCHECKED)) EndIf Do i have to change it like this (is that what you mean?) If IniRead($MyFile,"CheckBox",$cbarray[$i],0) Then
Else
Endif
I have no idea what an "autotext" line is supposed to do - so I cannot comment on whether AutoIt can do whatever it is. If you explain what you are trying to do we can probably come up with a solution.

Sorry
Autotext is the name of ahk text expanding.

p.e. in this case
:?*:em::myname@domain.com

Typing "em" will expand to the email address "myname@domain.com"

Thanks again

ps:

In my search script I will use 3 global arrays with long strings inside.
I tried to declare the arrays above the scripts like this:
Global $BClass[3] etc and then use the array within the function like this: $BClass[3] = ["text", "text", "text"]

but that doesn't seems to work.

What did I wrong Melba?

.
Edited by remin

##### Share on other sites

remin,

The higher the sleep value the slower the response of the script isn't it?

But only in MessageLoop mode where you should just use the built-in pause in GUIGetMsg - that waits up to 12-15ms when the CPU is very busy while the return almost instantaneous if it is idle. In OnEvent mode, and here when only HotKeys are used, the Sleep period has no effect. This is one reason I would not comment on the interaction between your current script and the one with which you wish to merge it - until I see exactly what is involved I am not prepared to say whether problem might arise.

[=/==] I still don't get it totally

In this case as you are comparing numbers, you do not need a case-sensitive string comparison. All you need do is replace the == operator with =:

If $State == 1 Then ; should become If$State = 1 Then

Autotext is the name of ahk text expanding

I see. In Autoit you have 2 options:

- 1. Use a variable to contain the expanded text:

; Declare the content
$sEM = "myname@domain.com" ; And use it like this$url = $sEM & "\section\item.html"$url will then hold myname@domain.comsectionitem.html

-2. Use the Abbrev manager in SciTE4AutoIt3 to create an abbreviation which you can expand as you type. Look under the <Help - SciTE Help - SciTE4AutoIt3 - User Abbreviations> and <Help - SciTE Help - Extra Utilities - Abbrev Manager> to learn more. If you do not have the full SciTE4AutoIt3 package I highly recommend that you download it from here - you get lots of helpful utilities to help you code in AutoIt.

M23

1 person likes this

Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind._______My UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

##### Share on other sites

#14 ·  Posted (edited)

In this case as you are comparing numbers, you do not need a case-sensitive string comparison. All you need do is replace the == operator with =:

Oh.. I see the error I've made

Thank you also for the autotext info.

I'll study it a bit more.

I added one more thing in my previous post but you were too fast answering

------------

In my search script I will use 3 global arrays with long strings inside.
I tried to declare the arrays above the scripts like this:
Global $BClass[3] etc and then use the array within the function like this: $BClass[3] = ["text", "text", "text"]

but that doesn't seems to work.

What did I wrong Melba?
------------

Remin

Edited by remin

##### Share on other sites

remin,

I will try to do worse in future.

You need to declare the arrays and their contents at the same time - otherwise you can only assign individual elements:

; This will work
Global $BClass[3] = ["text", "text", "text"] ; As will this if you use the Beta Global$BClass[] = ["text", "text", "text"]

;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

; Or you need to declare the array at the beginning of the script
Global $BClass[3] ; And then assign the elements individually$BClass[0] = "text"
$BClass[1] = "text"$BClass[2] = "text"
Al clear?

M23

Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind._______My UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

##### Share on other sites

You need to declare the arrays and their contents at the same time - otherwise you can only assign individual elements:

Or just declare them in the function self?

Melba, thank you very much for the time you've dedicated to my script.

Thanks for all

##### Share on other sites

remin,

Or just declare them in the function self?

You can always redeclare arrays - but you still need to either declare the contents at the same time or assign the individual elements separately.

As always, my pleasure to help.

M23

Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind._______My UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

## Create an account

Register a new account

Followers 0

• ### Similar Content

• By gillesg
Hello,
I am struggling in merging GUITreeViewEx, Shelltristate and enhancing to handle a third state that means : some items under are selected.
I have difficulties handling expand order and key Space (especially when node is collapsed).
Here the zip with UDF and and example.

The problem I might need some advice to handle :
1- When load Treeview, have a correct settings of the checkbox for a tristate tree
2 - Handle keyboard used for walking in tree
Chicken is checked and  Steak is unchecked
When walking with arrow to Meat, it gets unchecked
3 - When node is collapsed and checked thru keyboard (space)
the middle state is possible which should not
Here is joined an animated gif showing the 3 problems

GUITreeview3Ex.zip
• By computergroove
I've made a form in Koda where I make a list of 3 user definable elements that I want to be able to replicate with a button press so a user can add data that can be used as part of the program.
#include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #Region ### START Koda GUI section ### Form=D:\Carbonite Important\0 - Programing\Scite and Autoit\Koda 1.7.3.0\Forms\Mileage Estimator.kxf $Form1 = GUICreate("Save Project", 614, 1126, 298, 141)$Location = GUICtrlCreateInput("Location", 40, 112, 345, 21) $Distance = GUICtrlCreateInput("Distance", 400, 112, 89, 21)$AddLocation = GUICtrlCreateButton("AddLocation", 288, 80, 97, 25) $Label1 = GUICtrlCreateLabel("Location", 40, 88, 45, 17)$Label2 = GUICtrlCreateLabel("Distance", 400, 88, 46, 17) $HomeBase = GUICtrlCreateInput("HomeBase", 312, 32, 121, 21)$LeapYear = GUICtrlCreateCheckbox("LeapYear", 464, 32, 17, 17) $Label3 = GUICtrlCreateLabel("Leap Year?", 488, 32, 59, 17)$Variance = GUICtrlCreateInput("Variance", 504, 112, 81, 21) $Label4 = GUICtrlCreateLabel("Variance", 504, 88, 46, 17)$Label5 = GUICtrlCreateLabel("Home Base", 312, 8, 59, 17) $Button1 = GUICtrlCreateButton("Button1", 144, 56, 1, 57)$Save = GUICtrlCreateButton("Save Project", 40, 16, 121, 25) $Load = GUICtrlCreateButton("Load Project", 176, 16, 121, 25) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### While 1$nMsg = GUIGetMsg() Switch $nMsg Case$GUI_EVENT_CLOSE Exit Case $Form1 Case$AddLocation EndSwitch WEnd I want to press the "add location" button and have the fields {Location, Distance and variance} create a new blank record located under the existing 3 input boxes. Since the fields can number over 30 locations in some examples I am thinking about having these items in a scrolling window. What is the best way to do this and can auto it add a variable while running by pressing a button?
• By XaelloNegative
Hi,
I made a small blunder with my code. I created the GUI under 1920x1080 resolution however, my user is configured to ONLY 1080x720 and cannot go any further than that.
What do you guys think is the best way to correct this one? Resolution mathematics is something that came to mind however I do not have access to his PC to check  from time to time if  my estimation is correct and the resolution on my PC doesn't go down to 1080x720.
~XN~
• By davidacrozier
Hello all ~
I am running an autoit script on Windows 10 inside VMware Workstation 12 Pro version 12.5.2.  Technically I am remoting into ESXi which has a Domain Controller (DC), WebServer, FilServer, Windows 10, etc.  Using the GUI (i.e. running explorer.exe) I am able to open several different folders successfully.  The desktop, documents, USB external all open without issue.  The network share opening gives me issues.  Whenever I attempt to open \\filserver\users\user\sharedfolder I get the documents folder instead.  I understand that the documents folder is the default for explorer.  I have also attempted to use the letter drive mapped to the network share (Z:) and receive the same result.  When I run this script on Windows 10 alone without  the VM or the ESXi I am able to open the network share without problems.  I have tried to use the net use command to designate a letter M: to the network share folder prior to running the script.  This did not work for me.
One additional avenue I think might work is to use the systreeview321 and _GUICtrlTreeView_FindItem to step through the tree looking for the network share.  Once found,  double click on it and see if that opens the shared network folder.  I can click inside the VM with my mouse on the network share and it opens just fine.  Not sure if running up against GUI issues, or permission issues, or what?
GUICtrlSetState Function example ，i found $GUI_DROPACCEPTED isn't working in windows10 x64（windows_10_enterprise_2016_ltsb_x64）. if the example put to windows10 x86 or windows xp, the$GUI_DROPACCEPTED is effective，
#include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> Example() Func Example() ; Create a GUI with various controls. Local $hGUI = GUICreate("Example", 420, 200, -1, -1, -1,$WS_EX_ACCEPTFILES) ; Create a label and set the state as drop accepted. Local $idLabel = GUICtrlCreateLabel("Drop a file on this label.", 10, 10, 400, 40,$WS_BORDER) GUICtrlSetState($idLabel,$GUI_DROPACCEPTED) ; Create an input and set the state as drop accepted. Local $idInput = GUICtrlCreateInput("", 10, 60, 400, 22) GUICtrlSetState($idInput, $GUI_DROPACCEPTED) Local$idOK = GUICtrlCreateButton("OK", 310, 170, 85, 25) ; Display the GUI. GUISetState(@SW_SHOW, $hGUI) While 1 Switch GUIGetMsg() Case$GUI_EVENT_CLOSE, $idOK ExitLoop Case$GUI_EVENT_DROPPED ; If the value of @GUI_DropId is $idLabel, then set the label of the dragged file. If @GUI_DropId =$idLabel Then GUICtrlSetData($idLabel, @GUI_DragFile) EndSwitch WEnd ; Delete the previous GUI and all controls. GUIDelete($hGUI) EndFunc ;==>Example