-
Мне нужно выделить несколько символов в Edit и передать ему управление, чтобы можно было эти выделенные символы чем-то заменить (т.е. в Edit написано например 443000, надо выделить 000, чтобы пользователь смог заменить эти три цифры своими, не переписывая первые три). Какой командой/сообщением воспользоваться, чтобы отловить это событие?
-
см. SelStart, SelLength.
-
Это-то я уже сообразил. Но потом если передаешь Edit'у фокус, выделяется все равно весь текст. Где-то я уже видел подобное, да найти не могу...
-
> потом если передаешь Edit'у фокус
Так ты сначала фокус передай, и уж только потом устанавливай выделение текста сфокусированного контрола)
-
> Где-то я уже видел подобное, да найти не могу
Дык в справке по SelStart, наверно, и видел)
-
Ага, пасиб
А ещё такой вопрос: у меня есть файл с названиями улиц, как мне сделать автоподстановку из этого файла например для ввода: "Советс[кой армии, ул.]" и чтобы при нажатии Enter эта строчка применялась для текущего edit?
-
Большой файл-то ?
-
36,7Мб
скорость не критична.
-
Принципиально ли держать эту инф-цию именно в обычном текстовом файле ?
Или не исключается вариант переноса инф-ции в полноценную базу данных ?
-
Вариант не исключается, интересует метод реализации "автодополнения".
-
> метод реализации "автодополнения".
Он сводится к эффективному поиску строки, начинающейся с уже введенного юзером фрагмента. Это ключевой момент в решении задачи. В случае использования СУБД решение многократно упрощается.
-
Да нет же!
Я знаю, как искать и в строке, и в базе. Меня интересует сама метода - как сделать так, чтобы при вводе Стро пользователю предлагалось Стро[ка], Стро[йка] и тд...
-
ну что-то вроде этого:
Pattern := 'Стро';
plen := Length(Pattern);
Found := SearchStringLike(Pattern);
len := Length(Found) - plen;
if len > 0 then begin
Edit.Text := Found;
Edit.SelStart := plen;
Edit.SelLength := len;
end;
-
Почти получилось. Только если юзер решит удалить "выделенную" часть, то она удаляется, а потом заново восстанавливается...
-
А это уж ты сам разруливай, при каких действиях юзера использовать эту логику, а при каких не использовать.
-
Я попытался повесить это на событие OnChange - тогда восстанавливается после удаления. Повесил на OnKeyPress - вообще выводит только после нажатия лишней кнопки :(
-
Тут два пути:
1. Продолжать вешать "это" на: OnKeyDown, OnClick, OnDblClick, OnDragOver и т.д.
2. Начать думать.