IPB
╦юушэ╧рЁюы№:

> ╧ЁюўЄшЄх яЁхцфх ўхь чрфртрЄ№ тюяЁюё!

1. ╟руюыютюъ Єхь√ фюыцхэ с√Є№ шэЇюЁьрЄштэ√ь. ┬ яЁюЄштэюь ёыєўрх Єхьр єфры хЄё  ...
2. ┬ёх ЄхъёЄ√ яЁюуЁрьь фюыцэ√ яюьх∙рЄ№ё  т Єхуш [code=pas] ... [/code].
3. ╧Ёхцфх ўхь чрфртрЄ№ тюяЁюё, ёь. "FAQ", хёыш Єрь эх эр°ыш юЄтхЄр, тюёяюы№чєщЄхё№ ╧╬╚╤╩╬╠, тючьюцэю Єръє■ чрфрўє єцх Ёх°рыш!
4. ═х яЁхфырурщЄх ётюш Ёх°хэш  эр фЁєушї  ч√ърї, ъЁюьх ╧рёъры  (шёъы■ўхэшх - Єюы№ъю ё ёюуырёш  ьюфхЁрЄюЁр).
5. ═┼ шёяюы№чєщЄх ЇюЁєь фы  ышўэюую юс∙хэш , тёх ўЄю эх юЄэюёшЄё  ъ юсёєцфхэш■ Єхь√ - эр PM!
6. ╬фэр Єхьр - юфшэ тюяЁюё (чрфрўр)
7. ╧ЁютхЁ щЄх яЁюуЁрьь√ яхЁхф Єхь, ъръ ЁрчьхёЄшЄ№ шї эр ЇюЁєьх!!!
8. ╤яЁр°штрщЄх ш юЄтхўрщЄх ўхЄъю ш яю ёє∙хёЄтє!!!

 
 ╬ЄтхЄшЄ№  ╬ЄъЁ√Є№ эютє■ Єхьє 
> Turbo Vision, ╤юЁЄшЁютър чряшёхщ т Turbo Vision...
-─шьр-
ёююс∙хэшх 21.05.2007 19:22
╤ююс∙хэшх #1


├юёЄ№






- ╧юьюушЄх яюцрыєщёЄр ё ёюЁЄшЁютъющ т Turbo Vision! ╟рфрэшх є ьхэ , ўЄюс ёюЁЄшЁютрыю єъЁршэёъшх ёшьтюы√ "│", "┐", "║" т эєцэюь яюЁ фъх, р эх т эрўрых шыш ъюэЎх...
- ╚ х∙х, ўЄюс√ яЁюшчтюфшыё  яюшёъ, яю яюы ь уфх ўшёыр, т фшрярчюэх...
╧╬╞└╦╙╔╤╥└ яюьюушЄх... ъЄю чэрхЄ ъръ ¤Єю ёфхырЄ№!!!

┬юЄ яЁюур (ьюфєы№), хёыш яюьюцхЄ...


unit FX;
{---------------------------------------------------------------------------}
INTERFACE
{---------------------------------------------------------------------------}
uses App,CRT,Objects,Menus,Drivers,Views,StdDlg,DOS,Memory,Dialogs,MsgBox,colorsel;
{---------------------------------------------------------------------------}
type {Обєкт TWorkWin створює рамкове вiкно з полосками скролiнга для
управлiння вбудованим в нього обєктом TInterior}
PWorkWin=^TWorkWin;
TWorkWin=object(TWindow)
Constructor Init(Bounds:Trect);
end;
{---------------------------------------------------------------------------}
{Обєкт TDlgwin створює дiалогове вiкно для вибору режима роботи}
PDlgWin=^TDlgWin;
TDlgWin=object(TDialog)
Procedure HandleEvent(var Event:TEvent);Virtual;
end;
{---------------------------------------------------------------------------}
{Наступний обєкт обслуговує внутрiшню частину рамкового вiкна TWorkWin.
Вiн створює скролююме вiкно з записами з архiвного файла i з допомогою
дiалогового вiкна TDlgWin управляє роботою з цими записами}
PInterior=^TInterior;
TInterior=object(TScroller)
PS:PStringCollection;
Location:Word;
Constructor Init(var Bounds:Trect;HS,VS:PscrollBar);
Procedure Draw;Virtual;
Procedure ReadFile;
Destructor Done;Virtual;
Procedure HandleEvent(var Event:TEvent);Virtual;
end;
{---------------------------------------------------------------------------}
Tbook=object(TApplication){створює обєкт-нащадок вiд TApplication}
{---------------------------------------------------------------------------}
Procedure InitMenuBar;Virtual;{Перекриває стандартний метод InitMenuBar}
Procedure InitStatusLine;Virtual;{Перекриваєм старий метод InitStatusLine новим}
Procedure HandleEvent(var Event:TEvent);Virtual;
Procedure AvtorA;
Procedure AvtorV;
Procedure FileSave;
Procedure ChangeDir;
Procedure ShallDOS;
Procedure FileOpen;
Procedure Work;
Procedure Idle;Virtual;
Constructor Init;
end;
{---------------------------------------------------------------------------}
const
{---------------------------------------------------------------------------}
cmHelp=201;
cmChDir=202;
cmWork=203;
cmDOS=204;
cmCan=205;
cmDelete=206;
cmSearch=207;
cmEdit=208;
cmAdd=209;
cmAvtorA=210;
cmAvtorV=211;
cmSearchnazva=212;
cmSearchmarka=213;
cmSearchrik=214;
cmSearchobem=215;
cmSearchcolir=216;
cmSearchcina=217;
cmSearchAll=218;

WinCom1:TCommandSet=[cmSave,cmWork];
WinCom2:TCommandSet=[cmOpen];

Lnazva=20;
Lmarka=16;
Lrik=11;
Lobem=10;
Lcolir=12;
Lcina=8;
LLine=Lnazva+Lmarka+Lrik+Lobem+Lcolir+Lcina;
{---------------------------------------------------------------------------}
type autopark=record
nazva:string[Lnazva];
marka:string[Lmarka];
rik:string[Lrik];
obem:string[Lobem];
colir:string[Lcolir];
cina:string[Lcina];
end;
{---------------------------------------------------------------------------}
var {auto:autopark}i:integer;
f:file of autopark;{Файлова змiнна}
Openf:Boolean;
Posh,Poz:array[1..200] of autopark;
{---------------------------------------------------------------------------}
IMPLEMENTATION
{---------------------------------------------------------------------------}
Constructor Tbook.init;
{---------------------------------------------------------------------------}
var i:integer;
begin
for i:=1 to 63 do
case i of
1:getpalette^[1]:=#$7e; {Вiкно з невiдкритим файлом}
2:getpalette^[2]:=#$10f; {Нижня та верхня панель}
3:getpalette^[3]:=#$10f; {Текст недоступних пунктiв меню}
4:getpalette^[4]:=#$10e; {Клавiшi бiля команд}
5:getpalette^[5]:=#$10e; {Видiленi кнопки}
6:getpalette^[6]:=#$10f; {При натисканнi на недоступну кнопку}
7:getpalette^[7]:=#$8e; {Символ бiля видiлених кнопок}
9:getpalette^[9]:=#$10e; {Рамка з файла}
10:getpalette^[10]:=#$10f; {Деталi рамки}
11:getpalette^[11]:=#$10f; {Полоси прокрутки}
12:getpalette^[12]:=#$10e; {Стрiлки прокрутки}
13:getpalette^[13]:=#$10f; {Фон i текст робочої областi}
14:getpalette^[14]:=#$10e; {Фон i текст видiленого запису}
33:getpalette^[33]:=#$10e; {Рамка дiалогового вiкна}
34:getpalette^[34]:=#$10f; {при натисканнi на вiкно}
35:getpalette^[35]:=#$10f; {Полоси прокрутки дiалогового вiкна}
36:getpalette^[36]:=#$10e; {Стрiлки прокрутки дiалогового вiкна}
37:getpalette^[37]:=#$10e; {Фон меню}
38:getpalette^[38]:=#$10f; {Неактивнi назви}
39:getpalette^[39]:=#$10e; {Активнi назви}
40:getpalette^[40]:=#$10e;
41:getpalette^[41]:=#$6f; {Кнопка}
42:getpalette^[42]:=#$6f; {Кнопка}
43:getpalette^[43]:=#$6e; {Активна кнопка}
44:getpalette^[44]:=#$8f;
45:getpalette^[45]:=#$6e;
46:getpalette^[46]:=#$10e; {Задняя часть кнопки}
50:getpalette^[50]:=#$6e; {Поле введення}
51:getpalette^[51]:=#$6f; {Частина поля введення}
52:getpalette^[52]:=#$6f;
53:getpalette^[53]:=#$10f; {Стрiлка}
54:getpalette^[54]:=#$10e; {Полоси бiля стрiлки}
55:getpalette^[55]:=#$10f; {Полоси прокрутки вiконця}
56:getpalette^[56]:=#$10e; {Стрiлки прокрутки}
57:getpalette^[57]:=#$6f; {Фон меню файлiв}
58:getpalette^[58]:=#$6e; {Актiвна кнопка}
59:getpalette^[59]:=#$6f; {Неактивна кнопка}
60:getpalette^[60]:=#$0e; {Перегородка}
61:getpalette^[61]:=#$6e;
end;
inherited init;
end;
{---------------------------------------------------------------------------}
Constructor TworkWin.Init(Bounds:Trect);
{---------------------------------------------------------------------------}
{Створення вiкна даних}
var HS,VS:PScrollBar;{Полоси вказiвники}
Interior:PInterior;{Вказiвник на керуєме текстове вiкно}
begin
Twindow.Init(Bounds,'Виберiть потрiбний запис. ESC - перехiд до дiалогу',0); {Створюєм нове вiкно з рамкою}
GetClipRect(Bounds);{Отримуємо в Bounds координати мiнiмальної
перемальовуємої частини вiкна}
Bounds.Grow(-1,-1);{Встановлюємо розмiри вiкна з текстом}
{Вмикаємо стандартнi по розмiру i положенню полоси-вказiвники}
VS:=StandardScrollBar(sbVertical+sbHandleKeyBoard);
HS:=StandardScrollBar(sbHorizontal+sbHandleKeyBoard);
{Створюєм текстове вiкно:}
Interior:=New(PInterior,Init(Bounds,HS,VS));
Insert(Interior);{Включаєм його в основне вiкно}
end;
{---------------------------------------------------------------------------}
Procedure TDlgWin.HandleEvent;
{---------------------------------------------------------------------------}
begin
Inherited HandleEvent(Event);
if Event.What=evCommand then EndModal(Event.Command);
end;
{---------------------------------------------------------------------------}
Procedure Tbook.FileOpen;
{---------------------------------------------------------------------------}
{Вiдкриває файл даних}
var PF:PFileDialog;{Дiалогове вiкно вибору файла}
Control:word;
s:PathStr;
begin
{Створюємо екземпляр динамiчного обєкта:}
New(PF,Init('*.dat','Виберiть потрiбний файл:','Iм"я файла',fdOpenButton,0));
{За допомогою наступного оператора вiкно виводиться на екран
i результат роботи кристувача з ним помiщається в змiнну Control:}
Control:=DeskTop^.ExecView(PF);
{Аналiзуємо результат запиту:}
case Control of StdDlg.cmFileOpen,cmOk:
begin {Користувач вказує iмя файла:}
PF^.GetFileName(s);{s мiстить iмя файла:}
Assign(f,s); {вiдкрити файл}
{$I-}
Reset(f);
if IoResult<>0 then
Rewrite(f);
Openf:=IoResult=0;
{$I+}
if Openf then
Begin
DisableCommands(WinCom2);
EnableCommands(WinCom1);
Work;{Переходимо до роботи}
end;
end;
end;
Dispose(PF,Done) {Знищує екземпляр}
end;
{---------------------------------------------------------------------------}
Procedure Tbook.FileSave;
{---------------------------------------------------------------------------}
begin
Close(f);
Openf:=False;
EnableCommands(WinCom2);
DisableCommands(WinCom1);
end;
{---------------------------------------------------------------------------}
Procedure Tbook.ChangeDir;
{---------------------------------------------------------------------------}
var PD:PChDirDialog;{Дiалогове вiкно змiни каталога}
Control:Word;
begin
New(Pd,Init(cdNormal,0)); {створюєм дiалогове вiкно}
Control:=DeskTop^.ExecView(PD); {Використовуєм вiкно}
Chdir(PD^.DirInput^.data^); {Встановлюємо новий каталог}
Dispose(PD,Done) {Видаляємо вiкно з кучi}
end;
{---------------------------------------------------------------------------}
Procedure Tbook.ShallDOS;
{---------------------------------------------------------------------------}
const txt='Для повернення введiть EXIT в вiдповiдь'+' на запит DOS...';
begin
DoneEvents; {Закриває оброблювач подiй}
DoneVideo; {Закрити монiтор екрана}
DoneMemory; {Закрити монiтор памятi}
SetMemTop(HeapPtr); {Звiльнити кучу}
Writeln(txt); {Оповiстити про вихiд}
SwapVectors; {Встановити стандартнi вектори}
{Передати управлiння командному процесору DOS:}
Exec(GetEnv('COMSPEC'),'');
{Повернутися з DOS:}
SwapVectors; {Поновити вектори}
SetMemTop(HeapEnd); {Поновити кучу}
InitMemory; {Вiдкрити монiтор памятi}
InitVideo; {Вiдкрити монiтор екрана}
Initevents; {Вiдкрити оброблювач подiй}
InitSysError; {Вiдкрити оброблювач помилок}
Redraw {Поновити вид екрана}
end;
{---------------------------------------------------------------------------}
Procedure Tbook.AvtorA;
{---------------------------------------------------------------------------}
const txt:array [0..1] of string[40]=(
' Виконав:студент групи АКС 1-7 ',
' Руссаковський Дмитро Олександрович ');
var r:TRect;{задання координат прямокутн.дiлянки екрана,для розт.Avtor}
d:PDLgWin;
i:integer;
Control:Word;
begin
r.assign(24,10,63,14);
d:=New(PDlgWin,Init(R,' Автор програми: '));
with d^ do
for i:=0 to 1 do
begin
r.Assign(1,1+i,38,2+i);
Insert(New(PStaticText,Init(R,#3+Txt[i])));
end;
DeskTop^.ExecView(d);
end;
{---------------------------------------------------------------------------}
Procedure Tbook.AvtorV;
{---------------------------------------------------------------------------}
const txt:array [0..1] of string[40]=(
' Перевiрив викладач: ',
' Бровченко Наталiя Несторiвна ');
var r:TRect;{задання координат прямокутн.дiлянки екрана,для розт.Avtor}
d:PDLgWin;
i:integer;
Control:Word;
begin
r.assign(24,10,63,14);
d:=New(PDlgWin,Init(R,' Викладач: '));
with d^ do
for i:=0 to 1 do
begin
r.Assign(1,1+i,38,2+i);
Insert(New(PStaticText,Init(R,#3+Txt[i])));
end;
DeskTop^.ExecView(d);
end;
{---------------------------------------------------------------------------}
Procedure Tbook.Idle;{годинник,дата}
{---------------------------------------------------------------------------}
const Old:byte=0;
Dt=1;
days:array [0..6] of String[9]=('Нед.','Пон','Вiвт.','Сер',
'Четв.','Пятн.','Суб.');
var Ho,Mi,Se,S100:word;
y,m,d,dow,xx,yy:Word;
Function timestr(K:word):string;
var Ss:string[2];
begin
Str(K,Ss);
if K<10 then Ss:='0'+Ss;
Timestr:=Ss
end;
begin
xx:=wherex;
yy:=wherey;
gettime(ho,mi,se,s100);
if (se mod dt=0) and (old<>se) then
begin
old:=se;
textcolor(white);
textbackground(8);
gotoxy(72,1);{розташування часу на екранi}
write(timestr(ho)+':'+timestr(mi)+':'+timestr(se));
end;
GetDate(y,m,d,dow);
GotoXY(50,1);
Writeln('',days[dow],',',d:0,'/',m:0,'/',y:0);
gotoXY(xx,yy);
end;
{---------------------------------------------------------------------------}
Constructor TInterior.Init(var Bounds:Trect;HS,VS:PScrollBar);
{---------------------------------------------------------------------------}
{Створює вiкно скролера}
begin
Inherited Init(Bounds,HS,VS);
ReadFile;
GrowMode:=gfGrowHiX+gfGrowHiY;
SetLimit(LLine,PS^.Count);
end;
{---------------------------------------------------------------------------}
Destructor TInterior.Done;
{---------------------------------------------------------------------------}
begin
Dispose(PS,Done);
Inherited Done;
end;
{---------------------------------------------------------------------------}
Procedure TInterior.ReadFile;
{---------------------------------------------------------------------------}
var k:integer;
s,shapka:String;
data:autopark;
t:text;
begin
PS:=New(PStringCollection,Init(100,10));
seek(f,0);
shapka:=' Назва | Марка | Рiк | Об"ем | Колiр | Цiна ';
PS^.insert(NewStr(shapka));
while not (EOF(f) or LowMemory) do
begin
read(f,data);
with data do
begin
s:=nazva;
while Length(s)<Lnazva do s:=s+' ';
s:=s+marka;
while Length(s)<Lnazva+Lmarka do s:=s+' ';
s:=s+rik;
while Length(s)<Lnazva+Lmarka+Lrik do s:=s+' ';
s:=s+obem;
while Length(s)<Lnazva+Lmarka+Lrik+Lobem do s:=s+' ';
s:=s+colir;
while Length(s)<Lnazva+Lmarka+Lrik+Lobem+Lcolir do s:=s+' ';
s:=s+cina;
end;
if s<>' ' then PS^.Insert(NewStr(S));
end;
Location:=0;
end;
{---------------------------------------------------------------------------}
Procedure TInterior.Draw;
{---------------------------------------------------------------------------}
{Виводить данi в вiкно перегляду}
var n{поточна строка екрана},k:integer;{поточна строка масива}
B:TDrawBuffer;
Color:Byte;
p:PString;
begin
if Delta.Y>Location then Location:=Delta.Y;
if Location>Delta.Y+pred(Size.Y) then Location:=Delta.Y+Pred(Size.Y);
for n:=0 to pred(Size.Y) do
{Size.Y - Кiлькiсть строк вiкна}
begin
k:=Delta.Y+n;
if k=Location then Color:=GetColor(2)
else Color:=GetColor(1);
MoveChar(B,' ',Color,Size.X);
if k<pred(PS^.Count) then
begin
p:=PS^.At(k);
MoveStr(B,Copy(p^,Delta.X,size.X),Color);
end;
WriteLine(0,N,Size.X,1,B)
end;
EnableCommands(WinCom1);
end;
{---------------------------------------------------------------------------}
Function Control:Word;
{---------------------------------------------------------------------------}
{Отримує команду iз основного диалогового вiкна}
const L=2;
Dy=2;
But:array [0..4] of string[20]={Написи на кнопках}
('~1~ Вихiд','~2~ Знищити','~3~ Знайти','~4~ Змiнити','~5~ Добавити');
var R:TRect;
D:PDlgWin;
k:Integer;
Begin
R.Assign(42,3,69,16);
D:=New(PDlgWin,Init(R,'Меню:'));
with D^ do
begin
for k:=0 to 4 do
begin
R.Assign(1,2+k*Dy,25,2+k*Dy+L);
Insert(New(PButton,
Init(R,But[k],cmCan+k,bfNormal)));
end;
SelectNext(False);{Активуємо першу кнопку}
end;
Control:=DeskTop^.ExecView(D);{Здiйснюємо дiалог}
end;
{---------------------------------------------------------------------------}
Function Poshuk:Word;
{---------------------------------------------------------------------------}
const L=2;
Dy=2;
But:array[0..6] of String[20]={напис на кнопках}
('~1~ За назвою ' ,'~2~ За маркою' , '~3~ За роком ',
'~4~ За об"эмом','~5~ За кольором','~6~ За цiною','~7~ Загальний ');
var R:TRect;
D:PDlgWin;
k:Integer;
begin
R.Assign(42,3,69,20);
D:=New(PDlgWin,Init(R,'Меню пошук:'));
with D^ do
begin
for k:=0 to 6 do
begin{вставляємо кнопки}
R.Assign(1,2+k*Dy,25,2+k*Dy+L);
Insert(New(PButton,Init(R,But[k],cmSearchnazva+k,bfNormal)));
end;
SelectNext(False);{активуємо першу кнопку}
end;
Poshuk:=DeskTop^.ExecView(D);{виконуємо дiалог}
end;
{---------------------------------------------------------------------------}
Procedure TInterior.HandleEvent;
{---------------------------------------------------------------------------}
Procedure DeleteItem;
{---------------------------------------------------------------------------}
var D:integer;
PStr:Pstring;
s:String;
data:autopark;
begin
PStr:=PS^.At(Location);{Отримуємо почний запис}
s:=copy(Pstr^,1,Lnazva);
seek(f,0);
D:=-1; {D - Номер записа в файлi}
repeat {Цикл пошуку по спiвпаданню поля Priz:}
inc(D);
read(f,data);
with data do while Length(nazva)<Lnazva do nazva:=nazva+' '
until data.nazva=s;
seek(f,pred(FileSize(f)));
read(f,data); {читаємо останнiй запис}
seek(f,D);
write(f,data); {Помiщаємо її на мiсце видаляємої}
seek(f,pred(FileSize(f)));
truncate(f); {Видаляємо останнiй запис}
with PS^ do D:=IndexOf(At(Location));
PS^.AtFree(D); {Видаляєм строку з колекцiї}
Draw; {Обновляємо вiкно}
end;
{---------------------------------------------------------------------------}
Procedure AddItem(Edit:Boolean);
{---------------------------------------------------------------------------}
const y=1;
dy=2;
LLine=Lnazva+Lmarka+Lrik+Lobem+Lcolir+Lcina;
var data:autopark;
R:TRect;
InWin:PDialog;
Bnazva,Bmarka,Brik,Bobem,Bcolir,Bcina:PInputLine;
Control:Word;
OldCount:Word;
s:String;
p:PString;
begin
Seek(f,fileSize(f));{Добавляєм записи в кiнець файла}
repeat{Цикл ввода записiв}
if Edit then{Готуємо загаловок} s:='Редагування:'
else
begin
Str(Filesize(f)+1,s);
s:='Вводиться запис:';
end;
FillChar(data,SizeOf(data),' ');{Заповняємо поля пробiлами}
R.Assign(15,2,39,19);
InWin:=New(PDialog,Init(R,s));{Створюємо вiкно}
with InWin^ do
begin{Формуємо вiкно}
R.Assign(2,y+1,22,y+2);
Bnazva:=New(PInputLine,Init(R,Lnazva));
Insert(Bnazva);
R.Assign(2,y,22,y+1);
Insert(New(PLabel,Init(R,'Назва',Bnazva)));
R.Assign(2,y+dy+1,22,y+dy+2);
Bmarka:=New(PInputLine,Init(R,Lmarka));
Insert(Bmarka);
R.Assign(2,y+dy,22,y+dy+1);
Insert(New(PLabel,Init(R,'Марка',Bmarka)));
R.Assign(2,y+2*dy+1,22,y+2*dy+2);
Brik:=New(PInputLine,Init(R,Lrik));
Insert(Brik);
R.Assign(2,y+2*dy,22,y+2*dy+1);
Insert(New(PLabel,Init(R,'Рiк',Brik)));
R.Assign(2,y+3*dy+1,22,y+3*dy+2);
Bobem:=New(PInputLine,Init(R,Lobem));
Insert(Bobem);
R.Assign(2,y+3*dy,22,y+3*dy+1);
Insert(New(PLabel,Init(R,'Об"ем',Bobem)));
R.Assign(2,y+4*dy+1,22,y+4*dy+2);
Bcolir:=New(PInputLine,Init(R,Lcolir));
Insert(Bcolir);
R.Assign(2,y+4*dy,22,y+4*dy+1);
Insert(New(PLabel,Init(R,'Колiр',Bcolir)));
R.Assign(2,y+5*dy+1,22,y+5*dy+2);
Bcina:=New(PInputLine,Init(R,Lcina));
Insert(Bcina);
R.Assign(2,y+5*dy,22,y+5*dy+1);
Insert(New(PLabel,Init(R,'Цiна',Bcina)));
{Вставляємо двi команднi кнопки}
R.Assign(2,y+6*dy+1,12,y+6*dy+3);
Insert(New(PButton,Init(R,'Ввести',cmOK,bfDefault)));
R.Assign(2+10,y+6*dy+1,12+10,y+6*dy+3);
Insert(New(Pbutton,Init(R,'Вихiд',cmCancel,BfNormal)));
SelectNext(False);{активуємо першу кнопку}
end;{Кiнець формування вiкна}
if Edit then With data do
begin{Готуємо початковий текст:}
p:=PS^.At(Location);{Читаємо данi з запису}
s:=p^;
nazva:=copy(s,1,Lnazva);
marka:=copy(s,succ(Lnazva),Lmarka);
rik:=copy(s,succ(Lnazva+Lmarka),Lrik);
obem:=copy(s,succ(Lnazva+Lmarka+Lrik),Lobem);
colir:=copy(s,succ(Lnazva+Lmarka+Lrik+Lobem),Lcolir);
cina:=copy(s,succ(Lnazva+Lmarka+Lrik+Lobem+Lcolir),Lcina);
InWin^.SetData(data);{Вставляєм текст в поля вводу}
end;
control:=DeskTop^.ExecView(InWin);{Проводимо дiалог}
if Control=cmOk then with data do
begin
if Edit then DeleteItem;{Знищуємо старий запис}
nazva:=Bnazva^.data^;
marka:=Bmarka^.data^;
rik:=Brik^.data^;
obem:=Bobem^.data^;
colir:=Bcolir^.data^;
cina:=Bcina^.data^;
s[0]:=chr(LLine);
FillChar(s[1],LLine,' ');
move(nazva[1],s[1],Length(nazva));
move(marka[1],s[succ(Lnazva)],Length(marka));
move(rik[1],s[succ(Lnazva+Lmarka)],Length(rik));
move(obem[1],s[succ(Lnazva+Lmarka+Lrik)],Length(obem));
move(colir[1],s[succ(Lnazva+Lmarka+Lrik+Lobem)],Length(colir));
move(cina[1],s[succ(Lnazva+Lmarka+Lrik+Lobem+Lcolir)],Length(cina));
OldCount:=PS^.Count;{Попередня к-сть записiв}
PS^.Insert(NewStr(s));{Добавляєм в колекцiю}
{Перевiряємо добавлення}
if OldCount<>Ps^.Count then Write(f,data);
{Так - добавляєм в файл}
end
until Edit or (Control=cmCancel);
Draw;
end;
{---------------------------------------------------------------------------}
Procedure SearchItem;
{---------------------------------------------------------------------------}
{˜укаємо потрiбний елемент}
{---------------------------------------------------------------------------}
Function UpString(s:string):String;
{---------------------------------------------------------------------------}
{Перетворюємо строку в верхнiй реєстр}
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 ['а'..'п'] then
s[k]:=chr(ord('А')+ord(s[k])-ord('а'))
else
if s[k] in ['р'..'я'] then
s[k]:=chr(ord('Р')+ord(s[k])-ord('р'));
UpString:=s;
end;
{---------------------------------------------------------------------------}
Procedure NotFound;
{---------------------------------------------------------------------------}
begin
MessageBox('За даним запитом не знайдено жодного запису',nil,mfInformation or mfOkButton);
end;
{---------------------------------------------------------------------------}
Procedure Searchnazva;
{---------------------------------------------------------------------------}
const LLine=Lnazva+Lmarka+Lrik+Lobem+Lcolir+Lcina;
var InWin:PDialog;
R:TRect;
s,ss,shapka:String;
p:PInputLine;
pp:Pstring;
Data:autopark;
kk,ii,kp,zap:integer;
b1:TDrawBuffer;
col:byte;
k:Word;
begin
R.Assign(15,8,45,15);
InWin:=New(PDialog,Init(R,'Пошук запису...'));
with InWin^ do
begin
R.Assign(2,2,28,3);
p:=New(PInputLine,Init(R,20));
Insert(p);
R.Assign(1,1,21,2);
Insert(New(PLabel,Init(R,'за назвою:',p)));
R.Assign(2,4,12,6);
Insert(New(PButton,Init(R,'Знайти',cmOk,bfDefault)));
R.Assign(18,4,28,6);
Insert(New(PButton,Init(R,'Вихiд',cmCancel,bfNormal)));
SelectNext(False);
end;
if DeskTop^.ExecView(InWin)=cmCancel then exit;
s:=p^.Data^;
Location:=0;
kp:=0;
kk:=0;
for i:=1 to pred(PS^.Count) do
begin
pp:=PS^.At(i);
ss:=pp^;
with data do
begin
nazva:=copy(ss,1,Lnazva);
marka:=copy(ss,succ(Lnazva),Lmarka);
rik:=copy(ss,succ(Lnazva+Lmarka),Lrik);
obem:=copy(ss,succ(Lnazva+Lmarka+Lrik),Lobem);
colir:=copy(ss,succ(Lnazva+Lmarka+Lrik+Lobem),Lcolir);
cina:=copy(ss,succ(Lnazva+Lmarka+Lrik+Lobem+Lcolir),Lcina);
end;
if pos(UpString(s),Upstring(Data.nazva)) <> 0 then
begin
kk:=kk+1;
Posh[kk]:=Data;
end;
kp:=kp+1;
Poz[kp]:=Data;
end;
if kk<>0 then
begin
zap:=kp;
i:=0;
PS:=New(PStringCollection,Init(100,10));
shapka:=' Назва | Марка | Рiк | Об"ем | Колiр | Цiна ';
PS^.insert(NewStr(shapka));
for i:=1 to kk do
begin
with Posh[i] do
begin
s[0] := chr(LLine);
FillChar(s[1],LLine,' ');
move(nazva[1],s[1],Length(nazva));
move(marka[1],s[succ(Lnazva)],Length(marka));
move(rik[1],s[succ(Lnazva+Lmarka)],Length(rik));
move(obem[1],s[succ(Lnazva+Lmarka+Lrik)],Length(obem));
move(colir[1],s[succ(Lnazva+Lmarka+Lrik+Lobem)],Length(colir));
move(cina[1],s[succ(Lnazva+Lmarka+Lrik+Lobem+Lcolir)],Length(cina));
end;
PS^.Insert(NewStr(s));{добавляем в колекцию}
end;
i:=kk+1;
with Poz[kp] do
begin
s[0]:=chr(LLine);
FillChar(s[1],LLine,' ');
move(nazva[1],s[1],Length(nazva));
move(marka[1],s[succ(Lnazva)],Length(marka));
move(rik[1],s[succ(Lnazva+Lmarka)],Length(rik));
move(obem[1],s[succ(Lnazva+Lmarka+Lrik)],Length(obem));
move(colir[1],s[succ(Lnazva+Lmarka+Lrik+Lobem)],Length(colir));
move(cina[1],s[succ(Lnazva+Lmarka+Lrik+Lobem+Lcolir)],Length(cina));
end;
PS^.Insert(NewStr(s));
location:=0;
Draw;
end
else NotFound;
end;
{---------------------------------------------------------------------------}
Procedure Searchmarka;
{---------------------------------------------------------------------------}
const LLine=Lnazva+Lmarka+Lrik+Lobem+Lcolir+Lcina;
var InWin:PDialog;
R:TRect;
s,ss,shapka:String;
p:PInputLine;
pp:Pstring;
Data:autopark;
kk,ii,kp,zap:integer;
b1:TDrawBuffer;
col:byte;
k:Word;
begin
R.Assign(15,8,45,15);
InWin:=New(PDialog,Init(R,'Пошук запису...'));
with InWin^ do
begin
R.Assign(2,2,28,3);
p:=New(PInputLine,Init(R,20));
Insert(p);
R.Assign(1,1,21,2);
Insert(New(PLabel,Init(R,'за маркою:',p)));
R.Assign(2,4,12,6);
Insert(New(PButton,Init(R,'Знайти',cmOk,bfDefault)));
R.Assign(18,4,28,6);
Insert(New (PButton,Init(R,'Вихiд' ,cmCancel,bfNormal)));
SelectNext(False);
end;
if DeskTop^.ExecView(InWin)=cmCancel then exit;
s:=p^.Data^;
Location:=1;
kp:=0;
kk:=0;
for i:=1 to pred(PS^.Count) do
begin
pp:=PS^.At(i);
ss:=pp^;
with data do
begin
nazva:=copy(ss,1,Lnazva);
marka:=copy(ss,succ(Lnazva),Lmarka);
rik:=copy(ss,succ(Lnazva+Lmarka),Lrik);
obem:=copy(ss,succ(Lnazva+Lmarka+Lrik),Lobem);
colir:=copy(ss,succ(Lnazva+Lmarka+Lrik+Lobem),Lcolir);
cina:=copy(ss,succ(Lnazva+Lmarka+Lrik+Lobem+Lcolir),Lcina);
end;
if pos(UpString(s),Upstring(Data.marka)) <> 0 then
begin
kk:=kk+1;
Posh[kk]:=Data;
end;
kp:=kp+1;
Poz[kp]:=Data;
end;
if kk<>0 then
begin
zap:=kp;
i:=0;
PS:=New(PStringCollection,Init(100,10));
shapka:=' Назва | Марка | Рiк | Об"ем | Колiр | Цiна ';
PS^.insert(NewStr(shapka));
for i:=1 to kk do
begin
with Posh[i] do
begin
s[0]:=chr(LLine);
FillChar(s[1],LLine,' ');
move(nazva[1],s[1],Length(nazva));
move(marka[1],s[succ(Lnazva)],Length(marka));
move(rik[1],s[succ(Lnazva+Lmarka)],Length(rik));
move(obem[1],s[succ(Lnazva+Lmarka+Lrik)],Length(obem));
move(colir[1],s[succ(Lnazva+Lmarka+Lrik+Lobem)],Length(colir));
move(cina[1],s[succ(Lnazva+Lmarka+Lrik+Lobem+Lcolir)],Length(cina));
end;
PS^.Insert(NewStr(s));{додаємо у колекцiю}
end;
i:=kk+1;
with Poz[kp] do
begin
s[0]:=chr(LLine);
FillChar(s[1],LLine,' ');
move(nazva[1],s[1],Length(nazva));
move(marka[1],s[succ(Lnazva)],Length(marka));
move(rik[1],s[succ(Lnazva+Lmarka)],Length(rik));
move(obem[1],s[succ(Lnazva+Lmarka+Lrik)],Length(obem));
move(colir[1],s[succ(Lnazva+Lmarka+Lrik+Lobem)],Length(colir));
move(cina[1],s[succ(Lnazva+Lmarka+Lrik+Lobem+Lcolir)],Length(cina));
end;
PS^.Insert(NewStr(s));
location:=1;
Draw;
end
else NotFound;
end;
{---------------------------------------------------------------------------}
Procedure Searchrik;
{---------------------------------------------------------------------------}
const LLine=Lnazva+Lmarka+Lrik+Lobem+Lcolir+Lcina;
var InWin:PDialog;
R:TRect;
s,ss,shapka:String;
p,p2:PInputLine;
pp:Pstring;
Data:autopark;
kk,ii,kp,zap:integer;
b1:TDrawBuffer;
col:byte;
k:Word;
begin
R.Assign(15,7,45,16);
InWin:=New(PDialog,Init(R,'Пошук за роком...'));
with InWin^ do
begin
R.Assign(2,2,28,3) ;
p:=New(PInputLine,Init(R,20));
Insert(p);
R.Assign(1,1,21,2);
Insert(New(PLabel,Init(R,'вiд:',p)));

R.Assign(2,4,28,5);
p2:=New(PInputLine,Init(R,20));
Insert(p2);
R.Assign(1,3,21,4);
Insert(New(PLabel,Init(R,'до:',p2)));

R.Assign(2,6,12,8);
Insert (New(PButton,Init(R,'Знайти',cmOk,bfDefault)));
R.Assign(18,6,28,8);
Insert(New(PButton,Init(R,'Вихiд',cmCancel,bfNormal)));
SelectNext(False);
end;
if DeskTop^.ExecView(InWin)=cmCancel then exit;
s:=p^.Data^;
Location:=1;
kp:=0;
kk:=0;
for i:=1 to pred(PS^.Count) do
begin
pp:=PS^.At(i);
ss:=pp^;
with data do
begin
nazva:=copy(ss,1,Lnazva);
marka:=copy(ss,succ(Lnazva),Lmarka);
rik:=copy(ss,succ(Lnazva+Lmarka),Lrik);
obem:=copy(ss,succ(Lnazva+Lmarka+Lrik),Lobem);
colir:=copy(ss,succ(Lnazva+Lmarka+Lrik+Lobem),Lcolir);
cina:=copy(ss,succ(Lnazva+Lmarka+Lrik+Lobem+Lcolir),Lcina);
end;
if UpString(s)=copy(Upstring(Data.rik),1,length(s)) then
begin
kk:=kk+1;
Posh[kk]:=Data;
end;
kp:=kp+1;
Poz[kp]:=Data;
end;
if kk<>0 then
begin
zap:=kp;
i:=0;
PS:=New(PStringCollection,Init(100,10));
shapka:=' Назва | Марка | Рiк | Об"ем | Колiр | Цiна ';
PS^.insert(NewStr(shapka));
for i:=1 to kk do
begin
with Posh[i] do
begin
s[0]:=chr(LLine);
FillChar(s[1],LLine,' ');
move(nazva[1],s[1],Length(nazva));
move(marka[1],s[succ(Lnazva)],Length(marka));
move(rik[1],s[succ(Lnazva+Lmarka)],Length(rik));
move(obem[1],s[succ(Lnazva+Lmarka+Lrik)],Length(obem));
move(colir[1],s[succ(Lnazva+Lmarka+Lrik+Lobem)],Length(colir));
move(cina[1],s[succ(Lnazva+Lmarka+Lrik+Lobem+Lcolir)],Length(cina));
end;
PS^.Insert(NewStr(s));{додаємо у колекцiю}
end;
i:=kk+1;
with Poz[kp] do
begin
s[0]:=chr(LLine);
FillChar(s[1],LLine,' ');
move(nazva[1],s[1],Length(nazva));
move(marka[1],s[succ(Lnazva)],Length(marka));
move(rik[1],s[succ(Lnazva+Lmarka)],Length(rik));
move(obem[1],s[succ(Lnazva+Lmarka+Lrik)],Length(obem));
move(colir[1],s[succ(Lnazva+Lmarka+Lrik+Lobem)],Length(colir));
move(cina[1],s[succ(Lnazva+Lmarka+Lrik+Lobem+Lcolir)],Length(cina));
end;
PS^.Insert(NewStr(s));
location:=1;
Draw;
end
else NotFound;
end;
{---------------------------------------------------------------------------}
Procedure Searchobem;
{---------------------------------------------------------------------------}
const LLine=Lnazva+Lmarka+Lrik+Lobem+Lcolir+Lcina;
var InWin:PDialog;
R:TRect;
s,ss,shapka:String;
p,p2:PInputLine;
pp:Pstring;
Data:autopark;
kk,ii,kp,zap:integer;
b1:TDrawBuffer;
col:byte;
k:Word;
begin
R.Assign(15,7,45,16);
InWin:=New(PDialog,Init(R,'Пошук за об"эмом...'));
with InWin^ do
begin
R.Assign(2,2,28,3);
p:=New(PInputLine,Init(R,20));
Insert(p);
R.Assign(1,1,21,2);
Insert(New(PLabel,Init(R,'вiд:',p)));

R.Assign(2,4,28,5);
p2:=New(PInputLine,Init(R,20));
Insert(p2);
R.Assign(1,3,21,4);
Insert(New(PLabel,Init(R,'до:',p2)));

R.Assign(2,6,12,8);
Insert(New(PButton,Init(R,'Знайти',cmOk,bfDefault)));
R.Assign(18,6,28,8);
Insert(New(PButton,Init(R,'Вихiд',cmCancel,bfNormal)));
SelectNext (False);
end;
if DeskTop^.ExecView(InWin)=cmCancel then exit;
s:=p^.Data^;
Location:=1;
kp:=0;
kk:=0;
for i:=1 to pred(PS^.Count) do
begin
pp:=PS^.At(i);
ss:=pp^;
with data do
begin
nazva:=copy(ss,1,Lnazva);
marka:=copy(ss,succ(Lnazva),Lmarka);
rik:=copy(ss,succ(Lnazva+Lmarka),Lrik);
obem:=copy(ss,succ(Lnazva+Lmarka+Lrik),Lobem);
colir:=copy(ss,succ(Lnazva+Lmarka+Lrik+Lobem),Lcolir);
cina:=copy(ss,succ(Lnazva+Lmarka+Lrik+Lobem+Lcolir),Lcina);
end;
if UpString(s)=copy(Upstring(Data.obem),1,length(s)) then
begin
kk:=kk+1;
Posh[kk]:=Data;
end;
kp:=kp+1;
Poz[kp]:=Data;
end;
if kk<>0 then
begin
zap:=kp;
i:=0;
PS:=New(PStringCollection,Init(100,10));
shapka:=' Назва | Марка | Рiк | Об"ем | Колiр | Цiна ';
PS^.insert(NewStr(shapka));
for i:=1 to kk do
begin
with Posh[i] do
begin
s[0]:=chr(LLine);
FillChar(s[1],LLine,' ');
move(nazva[1],s[1],Length(nazva));
move(marka[1],s[succ(Lnazva)],Length(marka));
move(rik[1],s[succ(Lnazva+Lmarka)],Length(rik));
move(obem[1],s[succ(Lnazva+Lmarka+Lrik)],Length(obem));
move(colir[1],s[succ(Lnazva+Lmarka+Lrik+Lobem)],Length(colir));
move(cina[1],s[succ(Lnazva+Lmarka+Lrik+Lobem+Lcolir)],Length(cina));
end;
PS^.Insert(NewStr(s));{додаємо у колекцiю}
end;
i:=kk+1;
with Poz[kp] do
begin
s[0]:=chr(LLine);
FillChar(s[1],LLine,' ');
move(nazva[1],s[1],Length(nazva));
move(marka[1],s[succ(Lnazva)],Length(marka));
move(rik[1],s[succ(Lnazva+Lmarka)],Length(rik));
move(obem[1],s[succ(Lnazva+Lmarka+Lrik)],Length(obem));
move(colir[1],s[succ(Lnazva+Lmarka+Lrik+Lobem)],Length(colir));
move(cina[1],s[succ(Lnazva+Lmarka+Lrik+Lobem+Lcolir)],Length(cina));
end;
PS^.Insert(NewStr(s));
location:=1;
Draw;
end
else NotFound;
end;
{---------------------------------------------------------------------------}
Procedure Searchcolir;
{---------------------------------------------------------------------------}
const LLine=Lnazva+Lmarka+Lrik+Lobem+Lcolir+Lcina;
var InWin:PDialog;
R:TRect;
s,ss,shapka:String;
p:PInputLine;
pp:Pstring;
Data:autopark;
kk,ii,kp,zap:integer;
b1:TDrawBuffer;
col:byte;
k:Word;
begin
R.Assign(15,8,45,15);
InWin:=New(PDialog,Init(R,'Пошук запису...'));
with InWin^ do
begin
R.Assign(2,2,28,3);
p:=New(PInputLine,Init(R,20));
Insert(p);
R.Assign(1,1,21,2);
Insert(New(PLabel,Init(R,'за кольором:',p)));
R.Assign(2,4,12,6);
Insert(New(PButton,Init(R,'Знайти',cmOk,bfDefault)));
R.Assign(18,4,28,6);
Insert(New(PButton,Init(R,'Вихiд',cmCancel,bfNormal)));
SelectNext(False);
end;
if DeskTop^.ExecView(InWin)=cmCancel then exit;
s:=p^.Data^;
Location:=1;
kp:=0;
kk:=0;
for i:=1 to pred(PS^.Count) do
begin
pp:=PS^.At(i);
ss:=pp^;
with data do
begin
nazva:=copy(ss,1,Lnazva);
marka:=copy(ss,succ(Lnazva),Lmarka);
rik:=copy(ss,succ(Lnazva+Lmarka),Lrik);
obem:=copy(ss,succ(Lnazva+Lmarka+Lrik),Lobem);
colir:=copy(ss,succ(Lnazva+Lmarka+Lrik+Lobem),Lcolir);
cina:=copy(ss,succ(Lnazva+Lmarka+Lrik+Lobem+Lcolir),Lcina);
end;
if UpString(s)=copy(Upstring(Data.colir),1,length(s)) then
begin
kk:=kk+1;
Posh[kk]:=Data;
end;
kp:=kp+1;
Poz[kp]:=Data;
end;
if kk<>0 then
begin
zap:=kp;
i:=0;
PS:=New(PStringCollection,Init(100,10));
shapka:=' Назва | Марка | Рiк | Об"ем | Колiр | Цiна ';
PS^.insert(NewStr(shapka));
for i:=1 to kk do
begin
with Posh[i] do
begin
s[0]:=chr(LLine);
FillChar(s[1],LLine,' ');
move(nazva[1],s[1],Length(nazva));
move(marka[1],s[succ(Lnazva)],Length(marka));
move(rik[1],s[succ(Lnazva+Lmarka)],Length(rik));
move(obem[1],s[succ(Lnazva+Lmarka+Lrik)],Length(obem));
move(colir[1],s[succ(Lnazva+Lmarka+Lrik+Lobem)],Length(colir));
move(cina[1],s[succ(Lnazva+Lmarka+Lrik+Lobem+Lcolir)],Length(cina));
end;
PS^.Insert(NewStr(s));{додаємо у колекцiю}
end;
i:=kk+1;
with Poz[kp] do
begin
s[0]:=chr(LLine);
FillChar(s[1],LLine,' ');
move(nazva[1],s[1],Length(nazva));
move(marka[1],s[succ(Lnazva)],Length(marka));
move(rik[1],s[succ(Lnazva+Lmarka)],Length(rik));
move(obem[1],s[succ(Lnazva+Lmarka+Lrik)],Length(obem));
move(colir[1],s[succ(Lnazva+Lmarka+Lrik+Lobem)],Length(colir));
move(cina[1],s[succ(Lnazva+Lmarka+Lrik+Lobem+Lcolir)],Length(cina));
end;
PS^.Insert(NewStr(s));
location:=1;
Draw;
end
else NotFound;
end;
{---------------------------------------------------------------------------}
Procedure Searchcina;
{---------------------------------------------------------------------------}
const LLine=Lnazva+Lmarka+Lrik+Lobem+Lcolir+Lcina;
var InWin:PDialog;
R:TRect;
s,ss,shapka:String;
p,p2:PInputLine;
pp:Pstring;
Data:autopark;
kk,ii,kp,zap:integer;
b1:TDrawBuffer;
col:byte;
k:Word;
begin
R.Assign(15,7,45,16);
InWin:=New(PDialog,Init(R,'Пошук за цiною...'));
with InWin^ do
begin
R.Assign(2,2,28,3);
p:=New(PInputLine,Init(R,20));
Insert(p);
R.Assign(1,1,21,2);
Insert(New(PLabel,Init(R,'вiд:',p)));

R.Assign(2,4,28,5);
p2:=New(PInputLine,Init(R,20));
Insert(p2);
R.Assign(1,3,21,4);
Insert(New(PLabel,Init(R,'до:',p2)));

R.Assign(2,6,12,8);
Insert(New(PButton,Init(R,'Знайти',cmOk,bfDefault)));
R.Assign(18,6,28,8);
Insert(New(PButton,Init(R,'Вихiд',cmCancel,bfNormal)));
SelectNext(False);
end;
if DeskTop^.ExecView(InWin)=cmCancel then exit;
s:=p^.Data^;
Location:=1;
kp:=0;
kk:=0;
for i:=1 to pred(PS^.Count) do
begin
pp:=PS^.At(i);
ss:=pp^;
with data do
begin
nazva:=copy(ss,1,Lnazva);
marka:=copy(ss,succ(Lnazva),Lmarka);
rik:=copy(ss,succ(Lnazva+Lmarka),Lrik);
obem:=copy(ss,succ(Lnazva+Lmarka+Lrik),Lobem);
colir:=copy(ss,succ(Lnazva+Lmarka+Lrik+Lobem),Lcolir);
cina:=copy(ss,succ(Lnazva+Lmarka+Lrik+Lobem+Lcolir),Lcina);
end;
if UpString(s)=copy(Upstring(Data.cina),1,length(s)) then
begin
kk:=kk+1;
Posh[kk]:=Data;
end;
kp:=kp+1;
Poz[kp]:=Data;
end;
if kk<>0 then
begin
zap:=kp;
i:=0;
PS:=New(PStringCollection,Init(100,10));
shapka:=' Назва | Марка | Рiк | Об"ем | Колiр | Цiна ';
PS^.insert(NewStr(shapka));
for i:=1 to kk do
begin
with Posh[i] do
begin
s[0]:=chr(LLine);
FillChar(s[1],LLine,' ');
move(nazva[1],s[1],Length(nazva));
move(marka[1],s[succ(Lnazva)],Length(marka));
move(rik[1],s[succ(Lnazva+Lmarka)],Length(rik));
move(obem[1],s[succ(Lnazva+Lmarka+Lrik)],Length(obem));
move(colir[1],s[succ(Lnazva+Lmarka+Lrik+Lobem)],Length(colir));
move(cina[1],s[succ(Lnazva+Lmarka+Lrik+Lobem+Lcolir)],Length(cina));
end;
PS^.Insert(NewStr(s));{додаємо у колекцiю}
end;
i:=kk+1;
with Poz[kp] do
begin
s[0]:=chr(LLine);
FillChar(s[1],LLine,' ');
move(nazva[1],s[1],Length(nazva));
move(marka[1],s[succ(Lnazva)],Length(marka));
move(rik[1],s[succ(Lnazva+Lmarka)],Length(rik));
move(obem[1],s[succ(Lnazva+Lmarka+Lrik)],Length(obem));
move(colir[1],s[succ(Lnazva+Lmarka+Lrik+Lobem)],Length(colir));
move(cina[1],s[succ(Lnazva+Lmarka+Lrik+Lobem+Lcolir)],Length(cina));
end;
PS^.Insert(NewStr(s));
location:=1;
Draw;
end
else NotFound;
end;
{---------------------------------------------------------------------------}
Procedure Searchall;
{---------------------------------------------------------------------------}
const LLine=Lnazva+Lmarka+Lrik+Lobem+Lcolir+Lcina;
var InWin:PDialog;
R:TRect;
s,ss,shapka:String;
p:PInputLine;
pp:Pstring;
Data:autopark;
kk,ii,kp,zap:integer;
b1:TDrawBuffer;
k:Word;
begin
R.Assign(15,8,45,15) ;
InWin:=New(PDialog,Init(R,'Пошук запису...'));
with InWin^ do
begin
R.Assign(2,2,28,3);
p:=New(PInputLine,Init(R,20));
Insert(p);
R.Assign(1,1,21,2);
Insert(New(PLabel,Init(R,'Загальний:',p)));
R.Assign(2,4,12,6);
Insert(New(PButton,Init(R,'Знайти',cmOk,bfDefault)));
R.Assign(18,4,28,6);
Insert(New(PButton,Init(R,'Вихiд',cmCancel,bfNormal)));
SelectNext(False);
end;
if DeskTop^.ExecView(InWin)=cmCancel then exit;
s:=p^.Data^;
Location:=1;
kp:=0;
kk:=0;
for i:=1 to pred(PS^.Count) do
begin
pp:=PS^.At(i);
ss:=pp^;
with data do
begin
nazva:=copy(ss,1,Lnazva);
marka:=copy(ss,Lnazva+1,Lmarka);
rik:=copy(ss,Lnazva+Lmarka+1,Lrik);
obem:=copy(ss,Lnazva+Lmarka+Lrik+1,Lobem);
colir:=copy(ss,Lnazva+Lmarka+Lrik+Lobem+1,Lcolir);
cina:=copy(ss,Lnazva+Lmarka+Lrik+Lobem+Lcolir+1,Lcina);
end;
if (UpString(s)=copy(Upstring(Data.nazva),1,length(s))) or
(UpString(s)=copy(Upstring(Data.marka),1,length(s))) or
(UpString(s)=copy(Upstring(Data.rik),1,length(s))) or
(UpString(s)=copy(Upstring(Data.obem),1,length(s))) or
(UpString(s)=copy(Upstring(Data.colir),1,length(s))) or
(UpString(s)=copy(Upstring(Data.cina),1,length(s)))
then
begin
kk:=kk+1;
Posh[kk]:=Data;
end;
kp:=kp+1;
Poz[kp]:=Data;
end;
if kk<>0 then
begin
zap:=kp;
i:=0;
PS:=New(PStringCollection,Init(100,10));
shapka:=' Назва | Марка | Рiк | Об"ем | Колiр | Цiна ';
PS^.insert(NewStr(shapka));
for i:=1 to kk do
begin
with Posh[i] do
begin
s[0]:=chr(LLine);
FillChar(s[1],LLine,' ');
move(nazva[1],s[1],Length(nazva));
move(marka[1],s[succ(Lnazva)],Length(marka));
move(rik[1],s[succ(Lnazva+Lmarka)],Length(rik));
move(obem[1],s[succ(Lnazva+Lmarka+Lrik)],Length(obem));
move(colir[1],s[succ(Lnazva+Lmarka+Lrik+Lobem)],Length(colir));
move(cina[1],s[succ(Lnazva+Lmarka+Lrik+Lobem+Lcolir)],Length(cina));
end;
PS^.Insert(NewStr(s));{додаємо у колекцiю}
end;
i:=kk+1;
with Poz[kp] do
begin
s[0] := chr(LLine);
FillChar(s[1],LLine,' ');
move(nazva[1],s[1],Length(nazva));
move(marka[1],s[succ(Lnazva)],Length(marka));
move(rik[1],s[succ(Lnazva+Lmarka)],Length(rik));
move(obem[1],s[succ(Lnazva+Lmarka+Lrik)],Length(obem));
move(colir[1],s[succ(Lnazva+Lmarka+Lrik+Lobem)],Length(colir));
move(cina[1],s[succ(Lnazva+Lmarka+Lrik+Lobem+Lcolir)],Length(cina));
end;
PS^.Insert(NewStr(s));
location:=1;
Draw;
end
else NotFound;
end;
{---------------------------------------------------------------------------}
begin
case poshuk of
cmSearchnazva:Searchnazva;
cmSearchmarka:Searchmarka;
cmSearchrik:Searchrik;
cmSearchobem:Searchobem;
cmSearchcolir:Searchcolir;
cmSearchcina:Searchcina;
cmSearchAll:SearchAll;
end;
end;{SearchItem}
{--------------------------------------------------------------------------------}
var R:TPoint;
label cls;
begin
TScroller.HandleEvent(Event);
case Event.What of evCommand:
case Event.Command of cmClose:
begin
Cls:
case Control of{Отримати команду з основного дiалогового вiкна}
cmCan,
cmCancel:EndModal(cmCancel);
cmEdit:AddItem(True);
cmDelete:DeleteItem;
cmSearch:SearchItem;
cmAdd:AddItem(False);
end;
end;
cmzoom:exit;
end;
evMouseDown:{Реакцiя на нажаття клавiши мишi}
begin
MakeLocal(MouseWhere,R);{Отримуємо в R локальнi координати
вказiвника мишi}
Location:=Delta.Y+R.Y;
Draw;
end;
evKeyDown:{Реакцiя на клавiши + -}
case Event.KeyCode of
kbEsc: goto Cls;
kbGrayMinus: if Location>Delta.Y then
begin
dec(Location);
Draw;
end;
kbGrayPlus:
if Location<Delta.Y+pred(Size.Y) then
begin
inc(Location);
Draw;
end;
end;
end;
end;{TInterior.HandleEvent}
{---------------------------------------------------------------------------}
Procedure Tbook.Work;
{---------------------------------------------------------------------------}
{Робота з даними}
var R:TRect;
Control:Word;
PW:PWorkWin;
begin
R.Assign(0,0,80,23);
PW:=New(PWorkWin,Init®);
Control:=DeskTop^.ExecView(PW);
Dispose(PW,Done);
end;
{---------------------------------------------------------------------------}
Procedure Tbook.HandleEvent(var Event:TEvent);
{---------------------------------------------------------------------------}
{Оброблювач подiй програми}
type TEvent=record
What:Word;{Опридiляє тип подiї}
case Word of{"Пуста" подiя}
evMouse:({Подiя вiд мишки:}
Buttons:Byte;{Стан клавiш}
Double:Boolean;{Ознака подвiйного нажаття кнопки миши}
Where:TPoint);{Координати курсора миши}
evKeyDown:({Подiя вiд клавiатури:}
case Integer of
0:(KeyCode:Word);{Код клавiши}
1:(CharCode:Byte;
ScanCode:Byte));
evMessage:({Подiя-звiсточка:}
Command:Word;{Код команди}
case Word of
0:(InfoPtr:Pointer);
1:(InfoLong:LongInt);
2:(Infoword:Word);
3:(InfoInt:Integer);
4:(InfoByte:Byte);
5:(InfoChar:Char));
end;
begin {TDovidnuk.HandleEvent}
TApplication.HandleEvent(Event);{Обробка стандартних команд cmQuit i cmMenu}
if Event.What=evCommand then
case Event.Command of{Обробка нових команд}
cmOpen:FileOpen;
cmSave:FileSave;
cmChangeDir:ChangeDir;
cmDOSShell:ShallDOS;
cmWork:Work;
cmAvtorA:AvtorA;
cmAvtorV:AvtorV;
else
exit;{Не обробляти iншi команди}
end;
ClearEvent(Event);{Очистити подiї пiсля оброблення}
end;{TDovidnuk.HandleEvent}
{---------------------------------------------------------------------------}
Procedure Tbook.InitMenuBar;
{---------------------------------------------------------------------------}
{Створення верхнього меню}
var R:TRect;
begin
GetExtent®;
R.B.Y:=succ(R.A.Y);{R -координати строки меню}
MenuBar:=New(PMenuBar,Init(R,
NewMenu(
NewSubMenu('~F~/ Файл', hcNoContext,
NewMenu(
NewItem('~1~/ Вiдкрити','F3',kbF3,cmOpen,hcNoContext,
NewItem('~2~/ Закрити','F2',kbF2,cmSave,hcNoContext,
NewItem('~3~/ Змiнити диск','',0,cmChangeDir,hcNoContext,
NewLine(
NewItem('~4~/ Виклик DOS','',0,cmDOSShell,hcNoContext,
NewItem('~5~/ Кiнець роботи','Alt-X',kbAltX,cmQuit,hcNoContext,
NIL)))))) {Нема iнших елементiв пiдменю}),
NewSubMenu('~A~/ Автор',hcNoContext,
NewMenu(
NewItem('~1~/ Автор програми','Alt-P',kbAltP,cmAvtorA,hcNoContext,
NewLine(
NewItem('~2~/ Викладач','Alt-V',kbAltV,cmAvtorV,hcNoContext,
NIL)))),
NIL)))));
end;{TDovidnuk.InitMenuBar;}
{---------------------------------------------------------------------------}
Procedure Tbook.InitStatusLine;
{---------------------------------------------------------------------------}
{Описання нового метода, з допомогою якого створюється строка статуса}
var R:Trect;
begin
GetExtent®;
R.A.Y:=pred(R.B.Y);{Помiщаєм в R координати строки статуса}
{Створюєм строку статуса:}
StatusLine:=New(PStatusLine,Init(R,
{Опридiляєм один варiант строки статуса:}
NewStatusDef(0, $FFFF,{встановлюємо для цього варiанта максимальний дiапазон контекстної справочної служби}
NewStatusKey('~Alt-X~ Вихiд',kbAltX,cmQuit,
NewStatusKey('~F10~ Меню',kbF10,cmMenu,
NIL)), {Нема iнших клавiш}
NIL) {Нема iнших визначень}));
DisableCommands(Wincom1)
end;{TDovidnuk.InitStatusLine}
{--------------------------------------------------------------------------------}
end.

 ╩ эрўрыє ёЄЁрэшЎ√ 
+ ╬ЄтхЄшЄ№ 

 ╬ЄтхЄшЄ№  ╬ЄъЁ√Є№ эютє■ Єхьє 
1 ўхы. ўшЄр■Є ¤Єє Єхьє (уюёЄхщ: 1, ёъЁ√Є√ї яюы№чютрЄхыхщ: 0)
╧юы№чютрЄхыхщ: 0

 



- ╥хъёЄютр  тхЁёш  27.04.2024 17:51
╒юёЄшэу яЁхфюёЄртыхэ ъюьярэшхщ "┬хс ╤хЁтшё ╓хэЄЁ" яЁш яюффхЁцъх ъюьярэшш "─юъ╦рс"