Меня всегда беспокоил тот факт, что TMemo (и другие аналогичные элементы управления) имеют только событие OnChange. Я хотел бы знать, когда USER изменил текст, а не когда текст был изменен программно.Как узнать, когда ПОЛЬЗОВАТЕЛЬ изменил текст в TMemo/TEdit?
Я знаю два способа различения пользователь изменил текст и программно изменен текст:
- Помещенный OnChange: = NIL, прежде чем изменить текст программно. Затем восстановите OnChange. Это подвержено ошибкам, так как вам нужно помнить о том, чтобы делать это каждый раз, когда вы меняете текст из кода (и для каких заметок/исправлений требуется эта специальная обработка, которая будет применяться). Теперь мы знаем, что каждый раз, когда вызывается OnChange, элемент управления редактировался пользователем.
- Захват событий OnKeyPress, MouseDown и т. Д. Решите, действительно ли текст был изменен, и вручную вызовите код, который нужно вызвать, когда пользователь отредактировал ext. Это может добавить большой объем процедур в уже большой файл.
Существует более элегантный способ сделать это?
Что делать, если изменение происходит от вставки? Или от автоматизации? Есть намного больше, что может изменить содержимое, чем просто набирать текст или код приложения. –
Это задает вопрос - почему это имеет значение? Может быть, вы пытаетесь решить неправильную проблему. –