Есть проблема: хочется получить в собитии onChange какого-нибудь текстового компонента внесенную пользовотелем разницу с предыдущей версией.
Например:
Поле Memo1 содержит:
"Hello world!",
дальше пользователь вносит изменения и становится:
"Hello my world!"
т.е. добавлено слово "my":
"Hello
my world!"
Как эффективно узнать, что именно было изменено? Можно сравнивать текст до и после и находить разницу известными алгоритмами, но этот способ в данном случае мне не подходит, потому что видится неэффективным.
Хотелось бы как-то отслеживать операцию которую делает пользователь и исходя из нее получать diff.
Например: навесить обработчик на onKeyUp (при вводе символов или стирании посредствам delete или backspace).
Однако, помимо ввода с клавиатуры есть также копирование, drag-n-drop и прочие, что делает такой способ довольно громоздким.
Может есть способ навесить обработчик на скажем что-то такое:
procedure OnTextAdd(OpType: Boolean; Str: String; Pos: Integer);
//.. где OpType - добавление или удаление текста, Str - сам текст
// Pos - позиция в исходной строке, где произведено изменение
Возможно есть какие-то готовые компоненты реалиующие это?