![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Установить курсор перед выделенным текстом [D5, Win2k]
Анатолий © (2004-10-20 13:45:00)Сообщением EM_SETSEL можно выделить регион и установить курсор в конец этого региона.
Из MSDN : "The caret is placed at the end of the selection indicated by the greater of the two values nEnd and nStart".
Как это обойти? Мне нужен курсор в начале выделенного региона, так чтобы стедующий символ, введенный с клавиатуры, автоматически заместил выделенные символы.
Кто-нибудь делал? Спасибо заранее.
KSergey (2004-10-20 22:47:00) [1]> Анатолий (20.10.04 17:45) [13]
> А так она получит запрос: очистить поле, или добавить в справочник
> физ.лиц, к примеру.
Я же везде добавлял "если уж по задаче это недопустимо...." ;)
> Я ушел в исходники..:)
Если что подвернется - буду признателен за сообщение.
Анатолий (2004-10-20 17:45:00) [2]Не, компонент так компонент, с формой нельзя.
А если запретить ввод несуществующих - представь себе ситуацию: телефонистка быстренько набивает заказы, вводит фамилию, встретилась новая фамилия - она ее не сможет набрать. А так она получит запрос: очистить поле, или добавить в справочник физ.лиц, к примеру.
А насчет потери фокуса ты прав.. Надо помозговать. Неужто не найдется какое-нибудь подходящее сообщение? Я ушел в исходники..:)
KSergey (2004-10-20 17:18:00) [3]Можно конечно и на закрытие формы тот же код прикрутить - но хорошо ли это? Особенно, есил в виде компонента решаем задачу?
KSergey (2004-10-20 17:17:00) [4]Не всегда этот фокус теряется, зараза... Типа Enter при имеющейся дефолтной кнопке - и привет.. И нету потери фокуса....
По-моему, лучше уж и вовсе не дать вставить ерунду, если уж по задаче это недопустимо....
Анатолий (2004-10-20 17:08:00) [5]
> KSergey ©
> Основной трудностью для меня было не дать вставить из клипборда то, чего нет в списке
Мдя.. Только-что закончили гарячую дискуссию по поводу ввода несуществующего в споске значения. Решили позволить вводить что угодно, даже из клипборда. Но при потере едитом фокуса предупреждать и предлагать: отменить ввод, добавить новое значение в базу, открыть список существующих значений. Т.е. проблема с клипбордом отменяется :).
KSergey (2004-10-20 16:13:00) [6]Основной трудностью для меня было не дать вставить из клипборда то, чего нет в списке ;) Подсмотрел частично реализацию в EhLib (DBGridEh). Оказывается, уложилось в несколько строк.
Анатолий (2004-10-20 15:59:00) [7]
> [7] KSergey ©
> Если будет не жаль - было бы интересно глянуть на реализацию,
> напишите на мыло в анкете. Могу (если интересно) поделиться
> своей.
О чем речь, скину. Когда все сделаю. Основная трудность то не в выделении текста :). Надо сделать быстрый поиск вариантов в базе в трехзвенной системе.. Попробую выбрать самое существенное.
KSergey (2004-10-20 15:42:00) [8]> [6] Анатолий (20.10.04 15:16)
> > Есил интересно - есть готовый ComboBox с "дописыванием".
> Все это должно быть сделано на основе Edit'а.
Да в принципе - один фиг. Там отличия только будут откуда варианты брать.
Если будет не жаль - было бы интересно глянуть на реализацию, напишите на мыло в анкете. Могу (если интересно) поделиться своей.
> Да меня тоже.. Но рук-ство где-то увидело, сказало сделать.
> Кстати, попробую переубедить.
Вообще во всех этих "фишках" для меня авторитеты - MS Word и MS Access (в последнем дописывание есть штатно). Хотя куда курсор встает там - не помню... По-моему - как раз в начало выделенного фрагмена, помнится у себя я это пока оставил, на доделки ;)
Анатолий (2004-10-20 15:16:00) [9]
> KSergey ©
> Почему? По-моему, вполне нормальное поведение, меня оно как-то не задевало, хотя... ;)
Да меня тоже.. Но рук-ство где-то увидело, сказало сделать. Кстати, попробую переубедить.
> Есил интересно - есть готовый ComboBox с "дописыванием".
> Есть так же в библиотеке InfoPower, DB-ориентированный
Все это должно быть сделано на основе Edit'а. В проекте не поменяешь. Там разработаны свои DB-компоненты на его основе. Могу только дописать функциональность :).
Спасибо.
KSergey (2004-10-20 14:50:00) [10]> [3] Анатолий (20.10.04 14:07)
> Поэтому курсор не может прыгать в конец строки
> после каждой буквы.
Почему? По-моему, вполне нормальное поведение, меня оно как-то не задевало, хотя... ;)
Есил интересно - есть готовый ComboBox с "дописыванием". Есть так же в библиотеке InfoPower, DB-ориентированный
Анатолий (2004-10-20 14:15:00) [11]
> KSergey ©
Итак, GetCaretPos, SetCaretPos идеально все решило. Спасибо за быстрый ответ.
Анатолий (2004-10-20 14:07:00) [12]
> KSergey © (1)
Ну да. Только для пользователя должно выглядеть так: он набирает, скажем, имя, а ему автоматически подставляются имена, которые начинаются на символы, которые пользователь уже набрал, но та часть имени, которую подставила программа, должна быть выделена, и соотв. при наборе следующего символа исчезнет. Поэтому курсор не может прыгать в конец строки после каждой буквы.
> KSergey © (2)
Спасибо. Пробую заюзать SetCaretPos (Пока не выходит :) )
KSergey (2004-10-20 13:49:00) [13]См. так же http://www.delphimaster.ru/cgi-bin/forum.pl?id=1096610271&n=5и смежные к упомянутой в посл. посте ф-ции
KSergey (2004-10-20 13:48:00) [14]> Мне нужен курсор в начале выделенного региона, так чтобы
> стедующий символ, введенный с клавиатуры, автоматически
> заместил выделенные символы.
Это и так произойдет вне зависимости где стоит курсор