Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.08.2007, 18:11   #1
neodream
 
Регистрация: 14.08.2007
Сообщений: 4
По умолчанию Автозаполнение в TEdit

Здравствуйте.
Нужна помощь. Необходимо сделать автозаполнение в TEdit, как в некоторых базах данных(например Access).
Тоесть пользователь вводит в TEdit слово а программа сама добавляет остальные буквы(производя поиск, например, по масиву). Желательно не использовать других компонет.
Заранее огромное спасибо.
neodream вне форума Ответить с цитированием
Старый 14.08.2007, 19:47   #2
Andr
Пользователь
 
Аватар для Andr
 
Регистрация: 11.04.2007
Сообщений: 75
По умолчанию

Тоесть у тебя есть массив, ты вводишь в Edit текст, а прога после введения каждого символа выбирает из массива подходящее слово и пишет его в Edit?
Andr вне форума Ответить с цитированием
Старый 14.08.2007, 19:55   #3
neodream
 
Регистрация: 14.08.2007
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Andr Посмотреть сообщение
Тоесть у тебя есть массив, ты вводишь в Edit текст, а прога после введения каждого символа выбирает из массива подходящее слово и пишет его в Edit?
да, но проблема в том, что бы поиск символов продолжался до тех пор, пока TEdit не потеряет фокус.
Например, в поле ми вводим букву А, и программа сама дописывает слово Александр, но мы продолжаем ввод сами и добавляем лексе(тоесть получится Алексе) и программа меняет Александр на Алексей.Если нас устраивает данное имя мы нажимаем Tab и данное имя остается.
neodream вне форума Ответить с цитированием
Старый 14.08.2007, 20:09   #4
AVer
Андрей
Форумчанин
 
Аватар для AVer
 
Регистрация: 21.11.2006
Сообщений: 457
По умолчанию

Сделай 2 переменные строки. В первой, после ввода букв в Едит будет содержаться, то что ввел пользователь. После каждого изменения Едита во вторую строку будет загружеться наиболее близкое слово к тому, которое в первой строке. При нажатии Tab первой переменной присваивается содержание второй. ИМХО достаточно просто.
ICQ: 5311314
[SIGPIC][/SIGPIC]
AVer вне форума Ответить с цитированием
Старый 14.08.2007, 20:43   #5
neodream
 
Регистрация: 14.08.2007
Сообщений: 4
По умолчанию

Цитата:
Сообщение от AVer Посмотреть сообщение
ИМХО достаточно просто.
Как пользователь узнает, что нужно прекратить ввод, так как он вводит в Едит свой текст, а во второй переменной содержится уже другое значение, которое не известно пользователю. В других приложения это решалось следующим образом: пользователь вводит значение, а программа добавляет после курсора окончание слова, сам же курсор не перемещается в конец слова, если приставка не подходит, пользователь вводит следующую букву и приставка меняется.
neodream вне форума Ответить с цитированием
Старый 14.08.2007, 20:54   #6
AVer
Андрей
Форумчанин
 
Аватар для AVer
 
Регистрация: 21.11.2006
Сообщений: 457
По умолчанию

Цитата:
Как пользователь узнает, что нужно прекратить ввод
Выводить предпологаемое слово в всплывающем окошке.
ICQ: 5311314
[SIGPIC][/SIGPIC]
AVer вне форума Ответить с цитированием
Старый 14.08.2007, 21:03   #7
Alex21
With best regards
Участник клуба
 
Регистрация: 20.04.2007
Сообщений: 1,448
По умолчанию

Все намного проще.
Берем компонент ComboBox. Загружаем в него список (хоть сразу, хоть динамически) и выполняем код:

ComboBox1.Style:=csSimple;

Все, работает на УРА!!!
Alex21 вне форума Ответить с цитированием
Старый 14.08.2007, 22:28   #8
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Alex21 прав, для этого лучше использовать Combobox. Во первых Combobox это Edit с ListBox'ом, то есть твое условие насчет Edit'a выполняется. Во вторых везде для таких целей используют его, потому что он удобнее, посмотри хотя бы на адресную строку в браузере.
А почему Tab? А не лучше выпадающий список (с дописыванием конечно)?
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 15.08.2007, 14:30   #9
neodream
 
Регистрация: 14.08.2007
Сообщений: 4
По умолчанию

Всем спасибо, но проблему решил более экстравагантно. И все гораздо проще.
Код:
 
for i:=0 to 11 do
         if (Edit5.Text=copy(months[i],1,Length(Edit5.Text))) and not (Edit5.Text ='') then
            begin
               ln:=Length(months[i])-Length(Edit5.Text);
               lne:=Length(Edit5.Text);
               Edit5.Text:=months[i];
               Edit5.SelStart:=lne;
               Edit5.SelLength:=ln;
               exit;
            end;
Это только пробный вариант, но действенный. После каждого ввода символа, приставка выделяется и таким образом, при вводе нового символа, выделенный фрагмент заменяется.
neodream вне форума Ответить с цитированием
Старый 15.08.2007, 15:03   #10
AVer
Андрей
Форумчанин
 
Аватар для AVer
 
Регистрация: 21.11.2006
Сообщений: 457
По умолчанию

Весьма мудрое решение. neodream респект.
ICQ: 5311314
[SIGPIC][/SIGPIC]
AVer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
автозаполнение таблицы. Warlock Microsoft Office Excel 6 25.12.2008 11:13
Автозаполнение форм в WebBrowser CoDeR Работа с сетью в Delphi 7 28.09.2008 21:58
Автозаполнение полей Максим_Леонидович Общие вопросы Delphi 5 17.08.2008 00:51
автозаполнение из нескольких документов Азамат Microsoft Office Excel 2 04.06.2008 11:25
Не работает автозаполнение Yuran Работа с сетью в Delphi 7 24.05.2008 13:16