Понедельник, 07.07.2025
Королевство Delphi
Главное меню
Статьи
Наш опрос
Нужен форум на сайте?
Всего ответов: 91
Статистика
Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
Главная » Статьи » Разные » Примеры Delphi

Последовательный поиск

Для понимания этой статьи вам будет достаточно базовых знаний о программировании баз данных в Delphi.

Основная форма проекта должна содержать компоненты TTable и TEdit (назовем его edtSearch). Заметим, что таблица, к которой прикреплен компонент TTable, должна быть проиндексирована по полю, в котором производится поиск.

Компонент TTable содержит несколько методов для поиска заданного значения в таблице. Это методы Goto, GoToKey, GoToNearest, Find, FindKey, Find Nearest и другие (описание этих методов смотрите в помощи). Добавим обработчик события OnChange для компонента TEdit:

procedure TForm1.edtSearchChange(Sender: TObject);
begin
 with Table1 do begin
 SetKey;
 FieldByName('Company').AsString:=edtSearch.text;
 GotoNearest;
 end;
end;

Собственно, все. Можно откомпилировать и запустить программу. Введите что-нибудь в поле ввода и вы увидите, как после набора каждого символа указатель текущей записи таблицы перемещается, указывая на запись, сответствующую тому, что вы ввели.

Теперь можно немного усложнить обработчик onChange. Например, можно отключить обработчик, если пользователь нажимает Backspace или Delete, или поле ввода не содержит текста. Выглядеть это будет примерно так:

procedure TForm1.edtSearchChange(Sender: TObject);
var txt, sfind:string;
 len:integer;
begin
 //don't do anything if user presses
 //delete or backspace
 if edFromCode = true then begin
 edFromCode := false;
 exit;
 end;

 //don't do anything if there is
 //no text in edSearch
 txt:=edtSearch.Text;
 if Length(txt)=0 then exit;

 //goto nearest match
 with Table1 do begin
 SetKey;
 FieldByName('Company').AsString:=edtSearch.text;
 GotoNearest;
 end;

 //calculate what part of text should be selected
 sfind := Table1.FieldByName('Company').AsString;
 len := Length(sfind) - Length(txt);
 if len > 0 then begin
 edFromCode:=true;
 edtSearch.Text:=sfind;
 edtSearch.SelStart:=Length(txt);
 edtSearch.SelLength:=len;
 end;
end;

Для такого случая нужен дополнительный код - обработчик события onKeyDown:

procedure TForm1.edtSearchKeyDown(Sender: TObject; var Key: Word;
 Shift: TShiftState);
begin
 if (Key=VK_DELETE) or (Key=VK_BACK) then begin
 if Lenght(edtSearch.Text)>0 then begin
 //onchange event should not be executed...
 edFromCode := true;
 end;
 end;
end; 

Получить ссылку на материал

Категория: Примеры Delphi | Добавил: Барон (20.12.2011)
Просмотров: 1386 | Теги: поиск | Рейтинг: 0.0/0
[ Пожертвования для сайта ] [ Пожаловаться на материал ]

Если вам помог материал сайта кликните по оплаченной рекламе размещенной в центре

Поиск
Категории раздела
Delphi.NET [3]
Kylix Delphi for Linux [9]
Советы Дельферу [6]
Хитрости в Delphi [2]
Обзор Delphi [45]
Инсталлятор [11]
Пользовательский интерфейс [18]
Примеры Delphi [93]
Функции и процедуры [15]
Разные [31]
Королевство Delphi © 2010-2025
Яндекс цитирования