Page 3 of 5

Posted: Wed Sep 02, 2009 9:48 am
by DV
Пожалуй, во второй ситуации реализация "прямее". А в случае первой каретка в начале любой строки (в том числе реальной, не-WordWrap-овой строки) по нажатию End неудержимо хочет прыгнуть в конец предыдущей строки.

Пробуем:
http://www.megaupload.com/?d=DXNY0N9J

Posted: Wed Sep 02, 2009 10:40 am
by Instructor
DV
Почему бы не передать на обработку программе перехваченный WM_KEYDOWN, когда требуется установить курсор в конце строки?

Posted: Wed Sep 02, 2009 11:38 am
by DV
Instructor wrote:DV
Почему бы не передать на обработку программе перехваченный WM_KEYDOWN, когда требуется установить курсор в конце строки?
В принципе, результат тот же, только более "прямым" путём :)

Пробуем:
http://www.megaupload.com/?d=62KNSFOJ

Posted: Wed Sep 02, 2009 12:31 pm
by VladSh
Есть интересный трабл но всё равно значительно лучше!
Спасибо оргомадное! :)

Суть трабла: если нажать End, то курсор уходит нормально в конец текущей строки, если 2-й раз нажать End, то курсор уйдёт в конец следующей.
Это так работает только если курсор изначально установлен в предпоследней строке предложения.

Posted: Wed Sep 02, 2009 12:42 pm
by DV
VladSh wrote:Есть интересный трабл
Да, есть такое.
Появилась у меня еще одна идейка: в такой ситуации заставить окно редактирования обработать нажатие End, чтобы узнать, изменится позиция каретки (тогда мы, значит, в начале строки) или нет (тогда мы уже в конце строки). И реагировать на это соответственно. Благо, есть команда WM_SETREDRAW, позволяющая запретить перерисовку окна на то время, пока окно будет гонять картеку туда-сюда.
Если получится, можете поставить свечку за моё здравие :)) Шутка ;)

Posted: Wed Sep 02, 2009 1:44 pm
by Instructor
DV

Code: Select all

SendMessage(hWndEdit, EM_EXLINEFROMCHAR, 0, (LPARAM)-1);
Возвращает номер строки, на которой находится курсор.

Posted: Thu Sep 03, 2009 9:04 am
by DV
Instructor wrote:Возвращает номер строки, на которой находится курсор.
Нифига себе! :shock: Какой магией я должен был обладать, чтобы узнать об этом??? Ведь сраный MSDN (MuStDieNow) умалчивает про магический параметр -1.

Пробуем:
http://www.megaupload.com/?d=4Q5EDPKP

Posted: Thu Sep 03, 2009 12:55 pm
by VladSh
Instructor, DV
Нет парни, вы монстры! 8)
Спасибо!!!

Posted: Fri Sep 04, 2009 7:13 am
by DV
VladSh wrote:Нет парни, вы монстры! 8)
Работает без дефектов?

Posted: Fri Sep 04, 2009 8:19 am
by VladSh
Да, пока дефектов не наблюдаю. Работает отлично!
Если что-то будет, то опять обращусь :) куда ж я денусь с подводной лодки-то... :lol:

Posted: Fri Sep 04, 2009 11:39 am
by VladSh
DV
Есть всё-таки небольшой баг. Если выделить текст, начиная от конца строки (даже несколько символов), то End не работает. Приходится сбрасывать выделение клавишами Left или Right, а потом уже жать End.

Posted: Sat Sep 05, 2009 11:07 am
by DV
VladSh wrote:Есть всё-таки небольшой баг
Это была оптимизация ;)

Пробуем:
http://ifolder.ru/13860681

Posted: Sun Sep 06, 2009 2:52 pm
by VladSh
Теперь выделение сбрасывается, но курсор становится за последним значащим символом, а не в конец строки (когда в конце строки есть пробел); такое поведение, как будто AltSmartEnd не загружен.

Posted: Sun Sep 06, 2009 3:50 pm
by DV
VladSh wrote:Теперь выделение сбрасывается, но курсор становится за последним значащим символом, а не в конец строки (когда в конце строки есть пробел); такое поведение, как будто AltSmartEnd не загружен.
???

Posted: Sun Sep 06, 2009 5:49 pm
by VladSh
DV wrote:???
В конце предложения ставим пробел, затем сразу же, с этого пробела, начинаем выделять кусок строки влево, потом жмём End, глядим, куда прыгнет курсор.