Здравствуйте, Went, Вы писали:
W>И еще один вопрос по Rich Edit. При изменении текста он посылает уведомление EN_CHANGE. Если документ достаточно большой, то "просто так брать весь текст и целиком отослать его клиенту" не хочется. Хочется вычленить только изменившуюся часть, и дальше уже что надо делать.
Уже плохо помню, но возможно следующая схема подойдет: получить ITextRange на весь документ, получить его дубликат (GetDublicate), оригинальный text-range будет отслеживать все изменения текста, дубликат (вероятно) останется прежним, соотв. изменения получать их диффом. Тут важно понимать, что измениться могут несколько участков текста (напр. при драг-н-дроп текста — удаление и вставка), ну и разумно дифф делать после некоторого таймаута после событий об изменении текста.
W>Можно, конечно, кешировать старое состояние текста и сравнивать с новым, но это все равно огромный оверхед
Имхо без этого не обойтись
Re[2]: Rich Edit - какая именно часть текста изменилась?
Здравствуйте, pilgrim_, Вы писали:
_>Уже плохо помню, но возможно следующая схема подойдет: получить ITextRange на весь документ, получить его дубликат (GetDublicate), оригинальный text-range будет отслеживать все изменения текста, дубликат (вероятно) останется прежним, соотв. изменения получать их диффом.
Ну, в любом случае придется хранить "старую версию", то есть копировать туда-сюда по пол-мегабайта данных, сравнивать эти куски, чтобы узнать, что вписали одну букву... Ну, так, значит так.
_>Тут важно понимать, что измениться могут несколько участков текста (напр. при драг-н-дроп текста — удаление и вставка), ну и разумно дифф делать после некоторого таймаута после событий об изменении текста.
Да, я думаю, раз уже сравнивать весь текст целиком, то можно откладывать это до, например, секунды после последнего изменения. Грубо говоря, если пользователь секунду не печатает — происходит синхронизация.
И еще один вопрос по Rich Edit. При изменении текста он посылает уведомление EN_CHANGE. Если документ достаточно большой, то "просто так брать весь текст и целиком отослать его клиенту" не хочется. Хочется вычленить только изменившуюся часть, и дальше уже что надо делать. Можно, конечно, кешировать старое состояние текста и сравнивать с новым, но это все равно огромный оверхед. Есть способ узнать, что именно изменилось в окне редактирования?
Re: Rich Edit - какая именно часть текста изменилась?
Здравствуйте, Went, Вы писали:
W>И еще один вопрос по Rich Edit. При изменении текста он посылает уведомление EN_CHANGE. Если документ достаточно большой, то "просто так брать весь текст и целиком отослать его клиенту" не хочется. Хочется вычленить только изменившуюся часть, и дальше уже что надо делать. Можно, конечно, кешировать старое состояние текста и сравнивать с новым, но это все равно огромный оверхед. Есть способ узнать, что именно изменилось в окне редактирования?
А как именно будет меняться текст? Только пользователем? Клавитура, мышь, вырезать\копировать\вставить? Или нужно еще отслеживать изменения сторонним кодом? Ну, к примеру через EM_STREAMIN, EM_INSERTIMAGE, EM_INSERTTABLE и.т.д…
Здравствуйте, Carc, Вы писали: C>А как именно будет меняться текст? Только пользователем? Клавитура, мышь, вырезать\копировать\вставить? Или нужно еще отслеживать изменения сторонним кодом?
Ну, например, еще, чрез ReplaceSel. В принципе, все.
C>Ну, к примеру через EM_STREAMIN, EM_INSERTIMAGE, EM_INSERTTABLE и.т.д…
Нет, без такой экзотики. Это, фактически, редактор кода.