Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 28.06.2012, 21:02
bmed bmed вне форума
Прохожий
 
Регистрация: 28.06.2012
Сообщения: 7
Репутация: 10
По умолчанию Как создать динамическую подсказку из БД?

Господа программисты, помогите, пожалуйста, идеями!
Задача такая: есть база данных (access), содержащая, помимо всего прочего список учащихся - поле "ФИО" в таблице. Интерфейс к БД пишется на делфи. На одной из форм есть элемент TEdit, в который нужно вводить фамилию учащегося. При этом при вводе должна выпадать подсказка на основе данных, содержащихся в БД: предположим, вводим фамилию Алексеев. Ввели первую букву фамилии - например, А. Выдались все фамилии на букву А . Ввели следующую букву л - список подсказки поменялся, остались только те фамилии, которые начинаются на Ал... Ввели следующую букву - список еще сократился. Ну, и нужно дать возможность пользователю выбрать нужную фамилию из имеющегося списка...
Как это все реализовать? Если где-то описана похожая проблема - киньте ссылку!
Заранее премного благодарна!
Ответить с цитированием
  #2  
Старый 28.06.2012, 23:46
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Я бы смотрел в сторону ComboBox. Это если список не очень большой. Если список большой, то тут придется изголяться. Открывать его все-равно придется весь, но можно фильтрацию устроить с помощью OnFilterRecord.
Ответить с цитированием
  #3  
Старый 29.06.2012, 00:01
bmed bmed вне форума
Прохожий
 
Регистрация: 28.06.2012
Сообщения: 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Я бы смотрел в сторону ComboBox. Это если список не очень большой.

Список достаточно большой - порядка 200 записей, по моим подсчетам. Может быть, будет больше...
Про ComboBox я тоже думала... А не подскажите, как сделать, чтобы выпадающий список автоматически раскрывался, а не при нажатии на стрелочку?
Ответить с цитированием
  #4  
Старый 29.06.2012, 00:12
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Открыть ComboBox:
Код:
  ComboBox1.DroppedDown := True;
...
  ComboBox1.Perform(CB_SHOWDROPDOWN, True, 0);
200 записей, не так много. Можно организовать как в браузере, выбор по первым введённым буквам.
Код:
procedure AutoInsertComboBoxItem(ComboBox: TCombobox; var LastLength: integer);
var
  i, ln: integer;
begin
  // Сравниваем длину текста, если новая длина меньше старой -
  // значит было удаление символов и автоподбор не нужен
  if Length(ComboBox.Text) <= LastLength then
  begin
    LastLength := Length(ComboBox.Text);
    exit;
  end;
  // Запоминаем длину текста для следующего вызова процедуры
  LastLength := Length(ComboBox.Text);
  // Ищем в списке начала строк, совпадающие с введенным текстом
  for i := 0 to ComboBox.Items.Count - 1 do
  begin
    // Для поиска с учетом регистра:
    //if Copy(ComboBox.Items[i],1,Length(ComboBox.Text)) = ComboBox.Text then
    // Для поиска без учета регистра:
    if Copy(AnsiUpperCase(ComboBox.Items[i]), 1, Length(ComboBox.Text)) =
      AnsiUpperCase(ComboBox.Text) then
    begin
      ln := length(ComboBox.Text);
      // Вставляем текст
      ComboBox.Text := ComboBox.Items[i];
      // Выделяем добавленный блок текста
      ComboBox.SelStart := ln;
      ComboBox.SelLength := Length(ComboBox.Items[i]) - ln;
      break;
    end;
  end;
end;

Пример использования:

Код:
var
  Form1: TForm1;
  EndL: integer;

implementation

procedure TForm1.ComboBox1Change(Sender: TObject);
begin
  AutoInsertComboBoxItem(ComboBox1, EndL);
end;
Взято из DelphiWorld.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.

Последний раз редактировалось angvelem, 29.06.2012 в 00:15.
Ответить с цитированием
  #5  
Старый 29.06.2012, 09:05
bmed bmed вне форума
Прохожий
 
Регистрация: 28.06.2012
Сообщения: 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
Можно организовать как в браузере, выбор по первым введённым буквам.

о, это именно то, что нужно! Попробовала сейчас - работает! Спасибо Вам огромнейшее!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:54.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025