Jump to content

Input control context menu "Undo" bug

Recommended Posts


This could be a bug in the win api. I'd like to find a way to work around it.

When I use the GUICtrlCreateInput() to create an input field, enter some text, highlight it all and change it to some other text, then GUICtrlSetStyle() the control $ES_READONLY, the right-click context menu for the control still shows an enabled "Undo" option that can be selected and "undo" back to the original value, even though the field is readonly. Ctrl-Z on the control doesn't trigger an Undo operation though, so I don't think it's an intended "feature".

Is there a way to disable the Undo option on the context menu manually, or unset a flag that the field has been modified, so the user can't change the value when it's readonly?

Edit: This is a kludge, but I can GUICtrlSetData($iBox, GUICtrlRead ($iBox) ) when setting it $ES_READONLY and it will clear the undo data, but this has the side effect of losing the undo data when I unset $ES_READONLY. I'd really like something cleaner, if anyone has any ideas.

Edit 2: Looking at https://msdn.microsoft.com/en-us/library/windows/desktop/bb775458(v=vs.85).aspx it appears there are messages where I can perform an undo, read the data from the control, then clear the undo data. Then I could set it read only. When I wanted to unset the readonly, I could ControlSend the undo data & Ctrl-A & current data. Although, I'm afraid the ControlSend delay would make it take too long for a form with many Input boxes. I'd still like something cleaner, if anyone has any ideas.

Edited by VeryGary

Share this post

Link to post
Share on other sites


As you have found, you can easily disable the "Undo" item in the context menu by sending a $EM_EMPTYUNDOBUFFER to the input control when setting it as read-only. But I am afraid I can find no easy way to reinstate the undo buffer when you re-enable editing - and the method you propose does not seem that reliable.


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


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

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