![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Позиция курсора в Edit
KSergey © (2004-10-01 09:57:00)Штука вот в чем. ПОнтяно, что есть SelStart (ну EM_GETSEL).
Но вот ведь как: если есть выделение, то курсор вообще-то может как стоять до него, так и после.
Отсда вопрос: можно ли как-то определить где же этот курсор сейчас стоит??
KSergey (2004-10-08 11:42:00) [1]УРА!!
GetCaretPos
KSergey (2004-10-01 13:31:00) [2]> [3] MBo © (01.10.04 12:50)
> Посмотри, какие извращения:
Да уж... ;)
Особенно не понял переназначение процедуры окна:
NewWndProc := MakeObjectInstance(EditWindowProc);
OldWndProc := pointer(GetWindowLong(EditControl.handle, GWL_WNDPROC));
SetWindowLong(EditControl.handle, GWL_WNDPROC, longint(NewWndProc));
Не проще ли было воспользоваться WindowProc? Впрочем, возможно в тех версиях дельфи его еще не было...
MBo (2004-10-01 12:50:00) [3]Посмотри, какие извращения:
http://www.undu.com/DN970901/00000033.htm
http://www.undu.com/DN970901/00000034.htm
KSergey (2004-10-01 12:15:00) [4]Есть смысл. Раскажу в чем нюанс.
Возьмем MS Word (для примера).
Некий текст, Shift+стрелка_вправо. Несколько раз.
Понятно, выделится часть текста.
Теперь, Shift+стрелка_влево. Выеление уменьшается. Доходит до 0 - и увеличивается в обратном направлении.
Есл теперь Shift+стрелка_вправо - оно (выделение) уменьшается.
Собственно проблема в том, что без знания позиции именно мигающего курсора такую логику не удается реализовать, вот в чем штука... Т.е. в некий момент времени при нажатии Shift (вообще-то проблема для Ctrl+Shift) и стрелок влево/вправо я не знаю как изменять имеющееся выделение.
А ведь выделить можно и мышью, при этом направление выделения имеет значение... (курсор остается либо справа, либо с лева...)
MBo (2004-10-01 12:08:00) [5]похоже, что нельзя - но и смысла большого в этом нет - Caret мигает в том месте, где будет производиться вставка текста. Если выделение ненулевое - оно заменится.