Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- unit SearchUnit;
- interface
- uses
- Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
- Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Buttons;
- type
- TSearch = class(TForm)
- SearchingBox: TComboBox;
- ToSearch: TEdit;
- OkeyButton: TButton;
- HelpButton: TBitBtn;
- procedure ToSearchKeyPress(Sender: TObject; var Key: Char);
- procedure OkeyButtonClick(Sender: TObject);
- procedure SearchingBoxChange(Sender: TObject);
- procedure ToSearchChange(Sender: TObject);
- procedure FormKeyPress(Sender: TObject; var Key: Char);
- procedure HelpButtonClick(Sender: TObject);
- procedure ToSearchKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
- procedure FormClose(Sender: TObject; var Action: TCloseAction);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
- var
- Search: TSearch;
- IndexArray: array of integer;
- implementation
- uses
- MainUnit, ShowUnit, EditUnit;
- {$R *.dfm}
- procedure TSearch.FormClose(Sender: TObject; var Action: TCloseAction);
- begin
- Anya.Enabled := true;
- end;
- procedure TSearch.FormKeyPress(Sender: TObject; var Key: Char);
- begin
- if Key = #27 then
- begin
- SearchingBox.ItemIndex := -1;
- ToSearch.Clear;
- Close;
- end;
- end;
- procedure TSearch.HelpButtonClick(Sender: TObject);
- const
- Help = 'Для осуществления поиска записи выберите критерий поиска и введите запрос.';
- begin
- MessageDlg(Help, mtInformation, [mbOk], 0);
- end;
- procedure TSearch.OkeyButtonClick(Sender: TObject);
- var
- s: string[1];
- str: string[30];
- i, j, k, index, indexArrLen: integer;
- begin
- if SearchingBox.ItemIndex = 2 then
- begin
- str := ToSearch.Text;
- s := str[1];
- s := AnsiUpperCase(s);
- str[1] := s[1];
- for i := 2 to Length(str) do
- if str[i] = ' ' then
- begin
- s := str[i + 1];
- s := AnsiUpperCase(s);
- str[i + 1] := s[1];
- end;
- ToSearch.Text := str;
- end;
- str := ToSearch.Text;
- i := 1;
- index := 1;
- indexArrLen := 0;
- with Anya.Table do
- if ToEdit then
- begin
- for i := 1 to Anya.Table.RowCount do
- if (Anya.Table.Cells[SearchingBox.ItemIndex, i] = str) then
- begin
- WhatEdit.ResultTable.Height := WhatEdit.ResultTable.Height + 41;
- WhatEdit.ResultTable.RowCount := WhatEdit.ResultTable.RowCount + 1;
- WhatEdit.ResultTable.FixedRows := 1;
- for k := 0 to 4 do
- WhatEdit.ResultTable.Cells[k, index] := Anya.Table.Cells[k, i];
- inc(indexArrLen);
- SetLength(IndexArray,indexArrLen);
- IndexArray[indexArrLen - 1] := i;
- inc(index);
- end;
- WhatEdit.ResultTable.RowCount := WhatEdit.ResultTable.RowCount - 1;
- end
- else
- begin
- for i := 1 to Anya.Table.RowCount do
- if (Anya.Table.Cells[SearchingBox.ItemIndex, i] = str) then
- begin
- WhatFound.ResultTable.Height := WhatFound.ResultTable.Height + 41;
- WhatFound.ResultTable.RowCount := WhatFound.ResultTable.RowCount + 1;
- WhatFound.ResultTable.FixedRows := 1;
- for k := 0 to 4 do
- WhatFound.ResultTable.Cells[k, index] := Anya.Table.Cells[k, i];
- inc(index);
- end;
- end;
- SearchingBox.ItemIndex := -1;
- ToSearch.Clear;
- Close;
- if index = 1 then
- MessageDlg('Запись не найдена', mtError, [mbOk], 0)
- else
- if ToEdit then
- EditUnit.WhatEdit.Show
- else
- ShowUnit.WhatFound.Show;
- end;
- procedure TSearch.SearchingBoxChange(Sender: TObject);
- begin
- if SearchingBox.Text = '' then
- begin
- ToSearch.Enabled := false;
- OkeyButton.Enabled := false;
- end
- else
- ToSearch.Enabled := true;
- ToSearch.Clear;
- end;
- procedure TSearch.ToSearchChange(Sender: TObject);
- begin
- if Length(ToSearch.Text) > 0 then
- OkeyButton.Enabled := true
- else
- OkeyButton.Enabled := false;
- end;
- procedure TSearch.ToSearchKeyPress(Sender: TObject; var Key: Char);
- const
- Numbers = ['0'..'9', #8];
- Date = Numbers + ['.'];
- begin
- if Key = #13 then
- OkeyButtonClick(Sender);
- if SearchingBox.ItemIndex = 0 then
- begin
- if (Length(ToSearch.Text) > 5) and (Key <> #8) then
- Key := #0;
- if not (Key in Numbers) then
- Key := #0;
- end;
- if SearchingBox.ItemIndex = 1 then
- begin
- if (Length(ToSearch.Text) > 1) and (Key <> #8) then
- Key := #0;
- if not (Key in Numbers) then
- Key := #0;
- end;
- if SearchingBox.ItemIndex = 2 then
- begin
- if not (((Key >= 'а') and (Key <= 'я')) or ((Key >= 'А') and (Key <= 'Я')) or (Key = ' ') or (Key = '.') or (Key = #8)) then
- Key := #0;
- if (Key = '.') and (Length(ToSearch.Text) = 0) then
- Key := #0;
- if (Length(ToSearch.Text) > 29) and (Key <> #8) then
- Key := #0;
- end;
- if SearchingBox.ItemIndex = 3 then
- begin
- if (Key = '.') and (Length(ToSearch.Text) = 0) then
- Key := #0;
- if (Length(ToSearch.Text) = 2) and (Key <> #8) then
- begin
- ToSearch.Text := ToSearch.Text + '.';
- end
- else
- if (Length(ToSearch.Text) = 5) and (Key <> #8) then
- begin
- ToSearch.Text := ToSearch.Text + '.';
- end;
- if ((not (Key in Date)) or ((Length(ToSearch.Text) > 9) and (Key <> #8))) then
- Key := #0;
- end;
- if SearchingBox.ItemIndex = 4 then
- begin
- if ((Key <> 'м') and (Key <> 'ж') and (Key <> #8)) then
- Key := #0;
- if (Length(ToSearch.Text) > 0) and (Key <> #8) then
- Key := #0;
- end;
- end;
- procedure TSearch.ToSearchKeyUp(Sender: TObject; var Key: Word;
- Shift: TShiftState);
- begin
- if SearchingBox.ItemIndex = 3 then
- if (Length(ToSearch.Text) = 2) then
- begin
- ToSearch.Text := ToSearch.Text + '.';
- ToSearch.SelStart := 4;
- end
- else
- if (Length(ToSearch.Text) = 5) then
- begin
- ToSearch.Text := ToSearch.Text + '.';
- ToSearch.SelStart := 7;
- end;
- end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement