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
Link to comment
Share on other sites

  • Moderators


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.


Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see 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


Link to comment
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

  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Create New...