Программа Notebook
if Edit then with Data do
begin {Готовим начальный текст:}
p: = PS.At(Location); {Читаем данные из записи}
s: = p;
Name: = copy(s,1,LName);
Phone: = copy(s,succ(LName),LPhone);
Addr: = copy(s,succ(LName+LPhone),LAddr);
InWin.setData(Data) {Вставляем текст в поля ввода}
end;
Control: = DeskTop.ExecView(InWin); {Выполняем диалог}
if Control=cmOk then with Data do
begin
if Edit then
DeleteItem; {Удаляем старую запись}
Name: = BName.Data;
Phone: = BPhone.Data;
Addr: = BAddr.Data;
s[0]: = chr(L);
FillChar(s [1], L, ' ');
move (Name [1],s [1],Length (Name));
move(Phone[1],s[succ(LName)],Length(Phone));
move(Addr[1],s[succ(LName+LPhone)],Length(Addr)
OldCount: = PS. Count; {Прежнее количество записей}
PS. Insert (NewStr (s)); {Добавляем в коллекцию}
{Проверяем добавление }
if OldCount < > PS. Count then
Write (DataFile, Data) {Да – добавляем в файл}
end
until Edit or (Control=cmCancel);
Draw
end; {AddItem}
{-----------------}
Procedure SearchItem;
{Ищет нужный элемент}
Function UpString(s: String): String;
{Преобразует строку в верхний регистр}
var
k: Integer;
begin
for k: = 1 to Length(s) do
if s[k] in ['a'..'z'] then
s[k]: = chr(ord('A')+ord(s [k]) – ord('a'))
else if s[k] in ['a'..'n'] then
s[k]: = chr(ord('A')+ord(s[k])-ord('a'))
else if s[k] in ['p'..'я'] then
s[k]: = chr(ord('P')+ord(s [k]) – ord('p'))
UpString: = s
end; {UpString}
var
InWin: PDialog;
R: TRect;
s: String;
p: PInputLine;
k: Word;
begin {SearchItem}
R.Assign(15.8.65.16);
InWin: = New (PDialog, Init (R, 'Поиск записи:'))
with InWin do
begin
R.Assign(2.2.47.3);
p: = New (PInputLine,Init(R,50));
Insert (p); R.Assign(1.1.40.2);
Insert (New (PLabel, Init(R,'Введите образец для поиска:',р)));
R.Assign(10.5.20.7);
Insert (New (PButton,Init(R,'Ввести',cmOk,bfDefault)));
R.Assign(25.5.35.7);
Insert (New (PButton,Init (R,' Выход',cmCancel,bf Normal)));
SelectNext (False)
end;
if DeskTop.ExecView(InWin) = cmCancel then
exit; s: = p.Data;
Location: = 0;
while (UpString(s) >= UpString (PString(PS. At (Location))))
and (Location < pred(PS. Count)) do
inc (Location);
if (Location < Delta.Y) or (Location > Delta.Y+pred(Size.Y)) then
ScrollTo (Delta.X, Location)
else
Draw
end; {SearchItem}