Главная » Delphi » Форма поиска по ключевому значению

0

Код формы KeySearchForm содержится в модуле KeySrch. Она предназначена для поиска  в таблице записи с конкретным значением. Поиск  может  выполняться одним из двух предлагаемых способов.

Если переключатель установлен в положение Normal, пользователь может  ввести  в поле  Search for искомое значение и, щелкнув  на кнопке Exact или  Nearest, выполнять поиск  записи, точно отвечающей условию  или  ближайшей к нему. Если переключатель установлен в положение Incremental, то в таблице будет выполняться пошаговый поиск  непосредственно в процессе ввода условия  поиска  в по ле Search for. При  этом обращение к таблице выполняется при каждом изменении зна чения в данном поле. Код модуля KeySrch приведен в листинге 7.6.

Листинг 7.6. Исходный код модуля KeySrch.PAS

unit KeySrch;

interface uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, ExtCtrls;

type

TKeySearchForm = class(TForm)

Panel1: TPanel;

Label3: TLabel;

SearchEdit: TEdit;

RBNormal: TRadioButton;

Incremental: TRadioButton;

Label6: TLabel;

ExactButton: TButton;

NearestButton: TButton;

procedure ExactButtonClick(Sender: TObject);

procedure NearestButtonClick(Sender: TObject);

procedure RBNormalClick(Sender: TObject);

procedure IncrementalClick(Sender: TObject);

procedure FormClose(Sender: TObject;

var Action: TCloseAction);

private

procedure NewSearch(Sender: TObject);

end;

var

KeySearchForm: TKeySearchForm;

implementation

uses DataMod, Main;

{$R *.DFM}

procedure TKeySearchForm.ExactButtonClick(Sender: TObject);

{ Попытка найти ту запись, где ключевое поле точно соответствует

значению поля SearchEdit. Заметьте, что Delphi обеспечивает

преобразование типов из строкового значения поля в числовое

значение ключевого поля. }

begin

if not DM.Table1.FindKey([SearchEdit.Text]) then

MessageDlg(Format(‘Match for "%s" not found.’,

[SearchEdit.Text]),

mtInformation, [mbOk], 0);

end;

procedure TKeySearchForm.NearestButtonClick(Sender: TObject);{ Поиск ближайшего соответствия значению в поле SearchEdit. Заметьте, что снова выполняется неявное преобразование типа.} begin

DM.Table1.FindNearest([SearchEdit.Text]);

end;

procedure TKeySearchForm.NewSearch(Sender: TObject);

{ Этот метод связывается с событием OnChange поля SearchEdit при

установке переключателя в положение Incremental. }

begin

DM.Table1.FindNearest([SearchEdit.Text]); // Поиск текста

end;

procedure TKeySearchForm.RBNormalClick(Sender: TObject);

begin

ExactButton.Enabled := True;       // Кнопка Search доступна

NearestButton.Enabled := True;

SearchEdit.OnChange := Nil;        // Отключение события OnChange

end;

procedure TKeySearchForm.IncrementalClick(Sender: TObject);

begin

ExactButton.Enabled := False;          // Кнопка Search недоступна

NearestButton.Enabled := False;

SearchEdit.OnChange := NewSearch;      // Передача события OnChange

NewSearch(Sender);               // Поиск текущего фрагмента текста

end;

procedure TKeySearchForm.FormClose(Sender: TObject;

var Action: TCloseAction);

begin

Action := caHide;

MainForm.KeySearch1.Checked := False;

end;

end.Текст  приведенного модуля не должен  вызывать вопросов. В нем методам  Find- Key() и FindNearest() вновь  передается строковое значение в полной уверенно сти,  что  требуемое преобразование  типов  произойдет автоматически. Полагаем, вы оцените небольшой трюк,  используемый  для  включения и отключения пошагового поиска  "на  лету".  Для  этого  событию OnChange элемента управления SearchEdit присваивается либо необходимый метод,  либо значение Nil. При  назначении в каче стве  обработчика реального метода,  событие OnChange будет  передаваться всякий раз при изменении значения в текстовом поле. Вызов в этом обработчике метода FindNearest() позволяет организовать в таблице пошаговый поиск, выполняемый при любом изменении пользователем условия поиска.

Источник: Тейксейра, Стив, Пачеко, Ксавье.   Borland Delphi 6. Руководство разработчика. : Пер.  с англ. — М. : Издательский дом “Вильямс”, 2002. —  1120 с. : ил. — Парал. тит. англ.

По теме:

  • Комментарии