Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Turbo Vision

Автор: -Дима- 21.05.2007 23:22

- Помогите пожалуйста с сортировкой в 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.