| View previous topic :: View next topic |
| Author |
Message |
DV
Joined: 16 Nov 2006 Posts: 723 Location: Kyiv, Ukraine
|
Posted: Mon Apr 21, 2008 2:13 pm Post subject: |
|
|
v.1.2 (April 2008)
+ new function: altSmartEnd |
|
| Back to top |
|
 |
VladSh
Joined: 29 Nov 2006 Posts: 2507 Location: Киев, Русь
|
Posted: Wed Apr 23, 2008 11:35 am Post subject: |
|
|
Сила! Теперь даже нечего попросить  |
|
| Back to top |
|
 |
DV
Joined: 16 Nov 2006 Posts: 723 Location: Kyiv, Ukraine
|
Posted: Fri Jul 04, 2008 12:32 pm Post subject: |
|
|
v.1.3
Changed: AkelPad 3.6.0 required. |
|
| Back to top |
|
 |
DV
Joined: 16 Nov 2006 Posts: 723 Location: Kyiv, Ukraine
|
Posted: Wed Aug 13, 2008 7:26 am Post subject: |
|
|
v.1.4
* compatibility with column selection in AkelPad 4.0.1+ |
|
| Back to top |
|
 |
VladSh
Joined: 29 Nov 2006 Posts: 2507 Location: Киев, Русь
|
Posted: Wed Aug 13, 2008 8:45 am Post subject: |
|
|
DV
Емеет ли смысл теперь NoSelEOL::Main, ведь выделение с новым контролом и так не захватывает символ перевода строки/конца файла? |
|
| Back to top |
|
 |
DV
Joined: 16 Nov 2006 Posts: 723 Location: Kyiv, Ukraine
|
Posted: Thu Aug 14, 2008 10:51 am Post subject: |
|
|
| захватывает после дбл-кликов, выделяющих всю строку, а также по клику перед началом строки. |
|
| Back to top |
|
 |
VladSh
Joined: 29 Nov 2006 Posts: 2507 Location: Киев, Русь
|
Posted: Mon Nov 17, 2008 9:26 am Post subject: Неприятный баг |
|
|
Если предложение переходит на другую строку, то если установить курсор в строку, где находится начало предложения, при нажатии клавиши End курсор переходит не на последний символ этой же строки, а на первый символ следующей строки. А изредка бывает так, что курсор переходит на просто на следующую строку, а на след. строку в самый конец предложения! |
|
| Back to top |
|
 |
DV
Joined: 16 Nov 2006 Posts: 723 Location: Kyiv, Ukraine
|
Posted: Thu Nov 20, 2008 8:33 am Post subject: |
|
|
| Instructor wrote: | VladSh
Такого не наблюдаю. Может дело в NoSelEOL::SmartEnd?
|
Да, в нём. Но я не вижу решения, поскольку:
1) так ведёт себя EM_EXSETSEL. Хотя это можно было бы обойти, оставив обработку по умолчанию для позиции в конце строки, если бы не
2) для позиции каретки в конце строки, чьё продолжение перенесено на другую строку, EM_EXLINEFROMCHAR возвращает индекс не той строки, на которой находится каретка, а индекс следующей строки. Из-за этого невозможно понять, находится ли каретка в конце первой части перенесенной строки, или же в начале второй части перенесенной строки. |
|
| Back to top |
|
 |
VladSh
Joined: 29 Nov 2006 Posts: 2507 Location: Киев, Русь
|
Posted: Thu Nov 20, 2008 9:19 am Post subject: |
|
|
DV
Интересно, по какому алгоритму работает подсветка текущей строки... Она работает правильно, т.е. выход по идее есть. Но это только Instructor может подсказать  |
|
| Back to top |
|
 |
VladSh
Joined: 29 Nov 2006 Posts: 2507 Location: Киев, Русь
|
Posted: Mon Aug 31, 2009 9:22 am Post subject: |
|
|
Видимо всё же в алгоритмах ошибки.
Если отключить AltSmartEnd (SmartEnd включён) и установить курсор в предложение, оканчивающееся на этой же строке, то курсор бегает правильно!
Если при этих же условиях установить курсор в предложение, оканчивающееся на следующей строке, то при первом нажатии End курсор устанавливается в конец этой же строки (это правильно! т.е. сделать, чтобы работало правильно, возможно!), при втором нажатии от соскакивает в начало следующей строки!
Это ошибка, но можно было бы реализовать довольно-таки бомбезную штуку - при втором нажатии End устанавливать курсор в конец всего предложения Даже если оно занимает несколько строк! Мечта о такой функции есть уже давно
Если же включить AltSmartEnd, установить курсор в предложение, оканчивающееся на следующей строке, то при нажатии End курсор сразу соскакивает в начало следующей строки!
Если подправите, буду очень признателен, т.к. мучаюсь с соскоком курсора, вот уже год, постоянно...  |
|
| Back to top |
|
 |
DV
Joined: 16 Nov 2006 Posts: 723 Location: Kyiv, Ukraine
|
Posted: Tue Sep 01, 2009 7:43 am Post subject: |
|
|
Вышеописанное - это частные (локальные) проявления упомянутого поведения EM_EXLINEFROMCHAR:
| Quote: | | для позиции каретки в конце строки, чьё продолжение перенесено на другую строку, EM_EXLINEFROMCHAR возвращает индекс не той строки, на которой находится каретка, а индекс следующей строки. Из-за этого невозможно понять, находится ли каретка в конце первой части перенесенной строки, или же в начале второй части перенесенной строки. |
Установка позиции курсора при нажатии на клавишу End описывается функцией OnEditEndKeyDown в файле "NoSelEOL.c". Можете попробовать поиграться с кодом выше строки
| Code: | | SendMessage( hEdit, EM_EXSETSEL, 0, (LPARAM) &cr ); |
Для сборки dll можно использовать Dev-C++ или Visual C++ Express. |
|
| Back to top |
|
 |
VladSh
Joined: 29 Nov 2006 Posts: 2507 Location: Киев, Русь
|
Posted: Tue Sep 01, 2009 8:52 am Post subject: |
|
|
Не, я не настолько крут)) таким никогда не занимался
А можно ли как-то анализировать, что если не конец предложения, а соскок курсора вниз (номера строк до нажатия End и после - не совпадают), то насильно возвращать курсор на одну позицию назад? |
|
| Back to top |
|
 |
DV
Joined: 16 Nov 2006 Posts: 723 Location: Kyiv, Ukraine
|
Posted: Tue Sep 01, 2009 4:14 pm Post subject: |
|
|
| VladSh wrote: | | (номера строк до нажатия End и после - не совпадают), то насильно возвращать курсор на одну позицию назад? |
Так должно получиться. Но каретка будет позиционирована не в конце строки, а за один пробел или таб перед концом строки. И придётся ещё колбасить дополнительное условие для такой позиции каретки: "если мы за один пробел или таб до конца текущей строки и если следующая позиция перенесет нас на следующую строку, то по нажатию Енд прыгнуть на последний непробельный символ, иначе прыгнуть в конец строки". |
|
| Back to top |
|
 |
VladSh
Joined: 29 Nov 2006 Posts: 2507 Location: Киев, Русь
|
Posted: Tue Sep 01, 2009 5:41 pm Post subject: |
|
|
Пожалуйста! Я Вас умоляю!!!
Upd: Может это из-за наложения алгоритмов происходит? Может удалить вообще SmartEnd (всё равно никто им не пользуется), а оставить только AltSmartEnd? |
|
| Back to top |
|
 |
DV
Joined: 16 Nov 2006 Posts: 723 Location: Kyiv, Ukraine
|
Posted: Wed Sep 02, 2009 9:39 am Post subject: |
|
|
М-да, ну что я могу сказать... Как "костыли" ни приделывай - всё равно криво получается. Пусть у нас есть перенесённая (из-за WordWrap) строка вида
abc__
defghi
где символы подчёркивания означают пробелы.
Ситуации вида
a|bc__
defghi
или
abc_|_
defghi
обрабатываются корректно - каретка устанавливается в конец первой части строки:
abc__|
defghi
И вот в последней ситуации начинается маразм: если трактовать позицию кусора в конце первой части строки как относящуюся к первой части строки, то случай
abc__
|defghi
считается идентичным приведенному выше - то есть курсор в начале второй части строки по нажатию End прыгнет в конец предыдущей части строки. То есть сюда:
abc|__
defghi
Если же считать, что
abc__|
defghi
относится к началу второй части строки, тогда по нажатию End курсор прыгнет в конец второй части строки:
abc__
defghi|
Короче, в обеих ситуациях поведение неправильное - и я не могу сказать, какое лучше. |
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|