- И еще, чтобы производился поиск, по полям где числа, в диапазоне...
ПОЖАЛУЙСТА помогите... кто знает как это сделать!!!
Вот прога (модуль), если поможет...
unit FX;
{---------------------------------------------------------------------------}
INTERFACE
{---------------------------------------------------------------------------}
uses App,CRT,Objects,Menus,Drivers,Views,StdDlg,DOS,Memory,Dialogs,MsgBox,colorsel;
{---------------------------------------------------------------------------}
type {ЋЎуЄв TWorkWin бвў(r)аоу а ¬Є(r)ўҐ ўiЄ(r) § Ї(r)«(r)бЄ ¬Ё бЄа(r)«iЈ ¤«п
гЇа ў«iп ўЎг¤(r)ў Ё¬ ў м(r)Ј(r) (r)ЎуЄв(r)¬ TInterior}
PWorkWin=^TWorkWin;
TWorkWin=object(TWindow)
Constructor Init(Bounds:Trect);
end;
{---------------------------------------------------------------------------}
{ЋЎуЄв TDlgwin бвў(r)аоу ¤i «(r)Ј(r)ўҐ ўiЄ(r) ¤«п ўЁЎ(r)аг ०Ё¬ а(r)Ў(r)вЁ}
PDlgWin=^TDlgWin;
TDlgWin=object(TDialog)
Procedure HandleEvent(var Event:TEvent);Virtual;
end;
{---------------------------------------------------------------------------}
{Ќ бвгЇЁ(c) (r)ЎуЄв (r)Ўб«гЈ(r)ўгу ўгваiио з бвЁг а ¬Є(r)ў(r)Ј(r) ўiЄ TWorkWin.
‚i бвў(r)аоу бЄа(r)«о ўiЄ(r) § § ЇЁб ¬Ё § аеiў(r)Ј(r) д (c)« i § ¤(r)Ї(r)¬(r)Ј(r)о
¤i «(r)Ј(r)ў(r)Ј(r) ўiЄ TDlgWin гЇа ў«пу а(r)Ў(r)в(r)о § жЁ¬Ё § ЇЁб ¬Ё}
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){бвў(r)аоу (r)ЎуЄв- й ¤(r)Є ўi¤ TApplication}
{---------------------------------------------------------------------------}
Procedure InitMenuBar;Virtual;{ЏҐаҐЄаЁў у бв ¤ авЁ(c) ¬Ґв(r)¤ InitMenuBar}
Procedure InitStatusLine;Virtual;{ЏҐаҐЄаЁў у¬ бв аЁ(c) ¬Ґв(r)¤ InitStatusLine (r)ўЁ¬}
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;{” (c)«(r)ў §¬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Є(r) § Ґўi¤ЄаЁвЁ¬ д (c)«(r)¬}
2:getpalette^[2]:=#$10f; {ЌЁ¦п в ўҐаеп Ї Ґ«м}
3:getpalette^[3]:=#$10f; {’ҐЄбв Ґ¤(r)бвгЇЁе ЇгЄвiў ¬Ґо}
4:getpalette^[4]:=#$10e; {Љ« ўiиi Ўi«п Є(r)¬ ¤}
5:getpalette^[5]:=#$10e; {‚Ё¤i«Ґi Є(r)ЇЄЁ}
6:getpalette^[6]:=#$10f; {ЏаЁ вЁбЄ i Ґ¤(r)бвгЇг Є(r)ЇЄг}
7:getpalette^[7]:=#$8e; {‘Ё¬ў(r)« Ўi«п ўЁ¤i«ҐЁе Є(r)Ї(r)Є}
9:getpalette^[9]:=#$10e; {ђ ¬Є § д (c)« }
10:getpalette^[10]:=#$10f; {„Ґв «i а ¬ЄЁ}
11:getpalette^[11]:=#$10f; {Џ(r)«(r)бЁ Їа(r)ЄагвЄЁ}
12:getpalette^[12]:=#$10e; {‘ваi«ЄЁ Їа(r)ЄагвЄЁ}
13:getpalette^[13]:=#$10f; {”(r) i ⥪бв а(r)Ў(r)з(r)х (r)Ў« бвi}
14:getpalette^[14]:=#$10e; {”(r) i ⥪бв ўЁ¤i«Ґ(r)Ј(r) § ЇЁбг}
33:getpalette^[33]:=#$10e; {ђ ¬Є ¤i «(r)Ј(r)ў(r)Ј(r) ўiЄ }
34:getpalette^[34]:=#$10f; {ЇаЁ вЁбЄ i ўiЄ(r)}
35:getpalette^[35]:=#$10f; {Џ(r)«(r)бЁ Їа(r)ЄагвЄЁ ¤i «(r)Ј(r)ў(r)Ј(r) ўiЄ }
36:getpalette^[36]:=#$10e; {‘ваi«ЄЁ Їа(r)ЄагвЄЁ ¤i «(r)Ј(r)ў(r)Ј(r) ўiЄ }
37:getpalette^[37]:=#$10e; {”(r) ¬Ґо}
38:getpalette^[38]:=#$10f; {ЌҐ ЄвЁўi §ўЁ}
39:getpalette^[39]:=#$10e; {ЂЄвЁўi §ўЁ}
40:getpalette^[40]:=#$10e;
41:getpalette^[41]:=#$6f; {Љ(r)ЇЄ }
42:getpalette^[42]:=#$6f; {Љ(r)ЇЄ }
43:getpalette^[43]:=#$6e; {ЂЄвЁў Є(r)ЇЄ }
44:getpalette^[44]:=#$8f;
45:getpalette^[45]:=#$6e;
46:getpalette^[46]:=#$10e; {‡ ¤пп з бвм Є(r)ЇЄЁ}
50:getpalette^[50]:=#$6e; {Џ(r)«Ґ ўўҐ¤Ґп}
51:getpalette^[51]:=#$6f; {— бвЁ Ї(r)«п ўўҐ¤Ґп}
52:getpalette^[52]:=#$6f;
53:getpalette^[53]:=#$10f; {‘ваi«Є }
54:getpalette^[54]:=#$10e; {Џ(r)«(r)бЁ Ўi«п бваi«ЄЁ}
55:getpalette^[55]:=#$10f; {Џ(r)«(r)бЁ Їа(r)ЄагвЄЁ ўiЄ(r)жп}
56:getpalette^[56]:=#$10e; {‘ваi«ЄЁ Їа(r)ЄагвЄЁ}
57:getpalette^[57]:=#$6f; {”(r) ¬Ґо д (c)«iў}
58:getpalette^[58]:=#$6e; {ЂЄвiў Є(r)ЇЄ }
59:getpalette^[59]:=#$6f; {ЌҐ ЄвЁў Є(r)ЇЄ }
60:getpalette^[60]:=#$0e; {ЏҐаҐЈ(r)а(r)¤Є }
61:getpalette^[61]:=#$6e;
end;
inherited init;
end;
{---------------------------------------------------------------------------}
Constructor TworkWin.Init(Bounds:Trect);
{---------------------------------------------------------------------------}
{‘вў(r)аҐп ўiЄ ¤ Ёе}
var HS,VS:PScrollBar;{Џ(r)«(r)бЁ ўЄ §iўЁЄЁ}
Interior:PInterior;{‚Є §iўЁЄ ЄҐагу¬Ґ вҐЄбв(r)ўҐ ўiЄ(r)}
begin
Twindow.Init(Bounds,'‚ЁЎҐаiвм Ї(r)ваiЎЁ(c) § ЇЁб. ESC - ЇҐаҐеi¤ ¤(r) ¤i «(r)Јг',0); {‘вў(r)аоу¬ (r)ўҐ ўiЄ(r) § а ¬Є(r)о}
GetClipRect(Bounds);{ЋваЁ¬гу¬(r) ў Bounds Є(r)(r)а¤Ё вЁ ¬ii¬ «м(r)х
ЇҐаҐ¬ «м(r)ўгу¬(r)х з бвЁЁ ўiЄ }
Bounds.Grow(-1,-1);{‚бв (r)ў«оу¬(r) а(r)§¬iаЁ ўiЄ § ⥪бв(r)¬}
{‚¬ЁЄ у¬(r) бв ¤ авi Ї(r) а(r)§¬iаг i Ї(r)«(r)¦Ґо Ї(r)«(r)бЁ-ўЄ §iўЁЄЁ}
VS:=StandardScrollBar(sbVertical+sbHandleKeyBoard);
HS:=StandardScrollBar(sbHorizontal+sbHandleKeyBoard);
{‘вў(r)аоу¬ ⥪бв(r)ўҐ ўiЄ(r):}
Interior:=New(PInterior,Init(Bounds,HS,VS));
Insert(Interior);{‚Є«оз у¬ (c)(r)Ј(r) ў (r)б(r)ўҐ ўiЄ(r)}
end;
{---------------------------------------------------------------------------}
Procedure TDlgWin.HandleEvent;
{---------------------------------------------------------------------------}
begin
Inherited HandleEvent(Event);
if Event.What=evCommand then EndModal(Event.Command);
end;
{---------------------------------------------------------------------------}
Procedure Tbook.FileOpen;
{---------------------------------------------------------------------------}
{‚i¤ЄаЁў у д (c)« ¤ Ёе}
var PF:PFileDialog;{„i «(r)Ј(r)ўҐ ўiЄ(r) ўЁЎ(r)аг д (c)« }
Control:word;
s:PathStr;
begin
{‘вў(r)аоу¬(r) ҐЄ§Ґ¬Ї«па ¤Ё ¬iз(r)Ј(r) (r)ЎуЄв :}
New(PF,Init('*.dat','‚ЁЎҐаiвм Ї(r)ваiЎЁ(c) д (c)«:','I¬"п д (c)« ',fdOpenButton,0));
{‡ ¤(r)Ї(r)¬(r)Ј(r)о бвгЇ(r)Ј(r) (r)ЇҐа в(r)а ўiЄ(r) ўЁў(r)¤Ёвмбп ҐЄа
i १г«мв в а(r)Ў(r)вЁ ЄаЁбвгў з § Ё¬ Ї(r)¬iй увмбп ў §¬iг Control:}
Control:=DeskTop^.ExecView(PF);
{Ђ «i§гу¬(r) १г«мв в § ЇЁвг:}
case Control of StdDlg.cmFileOpen,cmOk:
begin {Љ(r)аЁбвгў з ўЄ §гу i¬п д (c)« :}
PF^.GetFileName(s);{s ¬iбвЁвм i¬п д (c)« :}
Assign(f,s); {ўi¤ЄаЁвЁ д (c)«}
{$I-}
Reset(f);
if IoResult<>0 then
Rewrite(f);
Openf:=IoResult=0;
{$I+}
if Openf then
Begin
DisableCommands(WinCom2);
EnableCommands(WinCom1);
Work;{ЏҐаҐе(r)¤Ё¬(r) ¤(r) а(r)Ў(r)вЁ}
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 «(r)Ј(r)ўҐ ўiЄ(r) §¬iЁ Є в «(r)Ј }
Control:Word;
begin
New(Pd,Init(cdNormal,0)); {бвў(r)аоу¬ ¤i «(r)Ј(r)ўҐ ўiЄ(r)}
Control:=DeskTop^.ExecView(PD); {‚ЁЄ(r)аЁбв(r)ўгу¬ ўiЄ(r)}
Chdir(PD^.DirInput^.data^); {‚бв (r)ў«оу¬(r) (r)ўЁ(c) Є в «(r)Ј}
Dispose(PD,Done) {‚Ё¤ «пу¬(r) ўiЄ(r) § Єгзi}
end;
{---------------------------------------------------------------------------}
Procedure Tbook.ShallDOS;
{---------------------------------------------------------------------------}
const txt='„«п Ї(r)ўҐаҐп ўўҐ¤iвм EXIT ў ўi¤Ї(r)ўi¤м'+' § ЇЁв DOS...';
begin
DoneEvents; {‡ ЄаЁў у (r)Ўа(r)Ў«оў з Ї(r)¤i(c)}
DoneVideo; {‡ ЄаЁвЁ ¬(r)iв(r)а ҐЄа }
DoneMemory; {‡ ЄаЁвЁ ¬(r)iв(r)а Ї ¬пвi}
SetMemTop(HeapPtr); {‡ўi«мЁвЁ Єгзг}
Writeln(txt); {ЋЇ(r)ўiбвЁвЁ Їа(r) ўЁеi¤}
SwapVectors; {‚бв (r)ўЁвЁ бв ¤ авi ўҐЄв(r)аЁ}
{ЏҐаҐ¤ вЁ гЇа ў«iп Є(r)¬ ¤(r)¬г Їа(r)жҐб(r)аг DOS:}
Exec(GetEnv('COMSPEC'),'');
{Џ(r)ўҐагвЁбп § DOS:}
SwapVectors; {Џ(r)(r)ўЁвЁ ўҐЄв(r)аЁ}
SetMemTop(HeapEnd); {Џ(r)(r)ўЁвЁ Єгзг}
InitMemory; {‚i¤ЄаЁвЁ ¬(r)iв(r)а Ї ¬пвi}
InitVideo; {‚i¤ЄаЁвЁ ¬(r)iв(r)а ҐЄа }
Initevents; {‚i¤ЄаЁвЁ (r)Ўа(r)Ў«оў з Ї(r)¤i(c)}
InitSysError; {‚i¤ЄаЁвЁ (r)Ўа(r)Ў«оў з Ї(r)¬Ё«(r)Є}
Redraw {Џ(r)(r)ўЁвЁ ўЁ¤ ҐЄа }
end;
{---------------------------------------------------------------------------}
Procedure Tbook.AvtorA;
{---------------------------------------------------------------------------}
const txt:array [0..1] of string[40]=(
' ‚ЁЄ(r) ў:бв㤥⠣агЇЁ ЂЉ‘ 1-7 ',
' ђгбб Є(r)ўбмЄЁ(c) „¬Ёва(r) Ћ«ҐЄб ¤а(r)ўЁз ');
var r:TRect;{§ ¤ п Є(r)(r)а¤Ё в Їап¬(r)Єгв.¤i«пЄЁ ҐЄа ,¤«п а(r)§в.Avtor}
d:PDLgWin;
i:integer;
Control:Word;
begin
r.assign(24,10,63,14);
d:=New(PDlgWin,Init(R,' Ђўв(r)а Їа(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аЁў ўЁЄ« ¤ з: ',
' Ѓа(r)ўзҐЄ(r) Ќ в «iп ЌҐбв(r)аiў ');
var r:TRect;{§ ¤ п Є(r)(r)а¤Ё в Їап¬(r)Єгв.¤i«пЄЁ ҐЄа ,¤«п а(r)§в.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;{Ј(r)¤ЁЁЄ,¤ в }
{---------------------------------------------------------------------------}
const Old:byte=0;
Dt=1;
days:array [0..6] of String[9]=('ЌҐ¤.','Џ(r)','‚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);{а(r)§в игў п з бг ҐЄа 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);
{---------------------------------------------------------------------------}
{‘вў(r)аоу ўiЄ(r) бЄа(r)«Ґа }
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Є | ЋЎ"Ґ¬ | Љ(r)«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;
{---------------------------------------------------------------------------}
{‚Ёў(r)¤Ёвм ¤ i ў ўiЄ(r) ЇҐаҐЈ«п¤г}
var n{Ї(r)в(r)з бва(r)Є ҐЄа },k:integer;{Ї(r)в(r)з бва(r)Є ¬ бЁў }
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бвм бва(r)Є ў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;
{---------------------------------------------------------------------------}
{ЋваЁ¬гу Є(r)¬ ¤г i§ (r)б(r)ў(r)Ј(r) ¤Ё «(r)Ј(r)ў(r)Ј(r) ўiЄ }
const L=2;
Dy=2;
But:array [0..4] of string[20]={Ќ ЇЁбЁ Є(r)ЇЄ е}
('~1~ ‚Ёеi¤','~2~ ‡ЁйЁвЁ','~3~ ‡ (c)вЁ','~4~ ‡¬iЁвЁ','~5~ „(r)Ў ўЁвЁ');
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);{ЂЄвЁўгу¬(r) ЇҐаиг Є(r)ЇЄг}
end;
Control:=DeskTop^.ExecView(D);{‡¤i(c)боу¬(r) ¤i «(r)Ј}
end;
{---------------------------------------------------------------------------}
Function Poshuk:Word;
{---------------------------------------------------------------------------}
const L=2;
Dy=2;
But:array[0..6] of String[20]={ ЇЁб Є(r)ЇЄ е}
('~1~ ‡ §ў(r)о ' ,'~2~ ‡ ¬ аЄ(r)о' , '~3~ ‡ а(r)Є(r)¬ ',
'~4~ ‡ (r)Ў"н¬(r)¬','~5~ ‡ Є(r)«м(r)а(r)¬','~6~ ‡ жi(r)о','~7~ ‡ Ј «мЁ(c) ');
var R:TRect;
D:PDlgWin;
k:Integer;
begin
R.Assign(42,3,69,20);
D:=New(PDlgWin,Init(R,'ЊҐо Ї(r)игЄ:'));
with D^ do
begin
for k:=0 to 6 do
begin{ўбв ў«пу¬(r) Є(r)ЇЄЁ}
R.Assign(1,2+k*Dy,25,2+k*Dy+L);
Insert(New(PButton,Init(R,But[k],cmSearchnazva+k,bfNormal)));
end;
SelectNext(False);{ ЄвЁўгу¬(r) ЇҐаиг Є(r)ЇЄг}
end;
Poshuk:=DeskTop^.ExecView(D);{ўЁЄ(r)гу¬(r) ¤i «(r)Ј}
end;
{---------------------------------------------------------------------------}
Procedure TInterior.HandleEvent;
{---------------------------------------------------------------------------}
Procedure DeleteItem;
{---------------------------------------------------------------------------}
var D:integer;
PStr:Pstring;
s:String;
data:autopark;
begin
PStr:=PS^.At(Location);{ЋваЁ¬гу¬(r) Ї(r)зЁ(c) § ЇЁб}
s:=copy(Pstr^,1,Lnazva);
seek(f,0);
D:=-1; {D - Ќ(r)¬Ґа § ЇЁб ў д (c)«i}
repeat {–ЁЄ« Ї(r)игЄг Ї(r) бЇiўЇ ¤ о Ї(r)«п 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); {зЁв у¬(r) (r)бв i(c) § ЇЁб}
seek(f,D);
write(f,data); {Џ(r)¬iй у¬(r) хх ¬iбжҐ ўЁ¤ «пу¬(r)х}
seek(f,pred(FileSize(f)));
truncate(f); {‚Ё¤ «пу¬(r) (r)бв i(c) § ЇЁб}
with PS^ do D:=IndexOf(At(Location));
PS^.AtFree(D); {‚Ё¤ «пу¬ бва(r)Єг § Є(r)«ҐЄжiх}
Draw; {ЋЎ(r)ў«пу¬(r) ўiЄ(r)}
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));{„(r)Ў ў«пу¬ § ЇЁбЁ ў ЄiҐжм д (c)« }
repeat{–ЁЄ« ўў(r)¤ § ЇЁбiў}
if Edit then{ѓ(r)вгу¬(r) § Ј «(r)ў(r)Є} s:='ђҐ¤ Јгў п:'
else
begin
Str(Filesize(f)+1,s);
s:='‚ў(r)¤Ёвмбп § ЇЁб:';
end;
FillChar(data,SizeOf(data),' ');{‡ Ї(r)ўпу¬(r) Ї(r)«п Їа(r)Ўi« ¬Ё}
R.Assign(15,2,39,19);
InWin:=New(PDialog,Init(R,s));{‘вў(r)аоу¬(r) ўiЄ(r)}
with InWin^ do
begin{”(r)а¬гу¬(r) ўiЄ(r)}
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,'Љ(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)));
{‚бв ў«пу¬(r) ¤ўi Є(r)¬ ¤i Є(r)ЇЄЁ}
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);{ ЄвЁўгу¬(r) ЇҐаиг Є(r)ЇЄг}
end;{ЉiҐжм д(r)а¬гў п ўiЄ }
if Edit then With data do
begin{ѓ(r)вгу¬(r) Ї(r)з вЄ(r)ўЁ(c) ⥪бв:}
p:=PS^.At(Location);{—Ёв у¬(r) ¤ 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);{‚бв ў«пу¬ ⥪бв ў Ї(r)«п ўў(r)¤г}
end;
control:=DeskTop^.ExecView(InWin);{Џа(r)ў(r)¤Ё¬(r) ¤i «(r)Ј}
if Control=cmOk then with data do
begin
if Edit then DeleteItem;{‡Ёйгу¬(r) бв аЁ(c) § ЇЁб}
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;{Џ(r)ЇҐаҐ¤п Є-бвм § ЇЁбiў}
PS^.Insert(NewStr(s));{„(r)Ў ў«пу¬ ў Є(r)«ҐЄжiо}
{ЏҐаҐўiапу¬(r) ¤(r)Ў ў«Ґп}
if OldCount<>Ps^.Count then Write(f,data);
{’ Є - ¤(r)Ў ў«пу¬ ў д (c)«}
end
until Edit or (Control=cmCancel);
Draw;
end;
{---------------------------------------------------------------------------}
Procedure SearchItem;
{---------------------------------------------------------------------------}
{˜гЄ у¬(r) Ї(r)ваiЎЁ(c) Ґ«Ґ¬Ґв}
{---------------------------------------------------------------------------}
Function UpString(s:string):String;
{---------------------------------------------------------------------------}
{ЏҐаҐвў(r)аоу¬(r) бва(r)Єг ў ўҐаеi(c) аҐубва}
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('‡ ¤ Ё¬ § ЇЁв(r)¬ Ґ § (c)¤Ґ(r) ¦(r)¤(r)Ј(r) § ЇЁбг',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,'Џ(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,'§ §ў(r)о:',p)));
R.Assign(2,4,12,6);
Insert(New(PButton,Init(R,'‡ (c)вЁ',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Є | ЋЎ"Ґ¬ | Љ(r)«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));{¤(r)Ў ў«пҐ¬ ў Є(r)«ҐЄжЁо}
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,'Џ(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,'§ ¬ аЄ(r)о:',p)));
R.Assign(2,4,12,6);
Insert(New(PButton,Init(R,'‡ (c)вЁ',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Є | ЋЎ"Ґ¬ | Љ(r)«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));{¤(r)¤ у¬(r) г Є(r)«ҐЄж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,'Џ(r)игЄ § а(r)Є(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,'¤(r):',p2)));
R.Assign(2,6,12,8);
Insert (New(PButton,Init(R,'‡ (c)вЁ',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Є | ЋЎ"Ґ¬ | Љ(r)«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));{¤(r)¤ у¬(r) г Є(r)«ҐЄж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,'Џ(r)игЄ § (r)Ў"н¬(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,'¤(r):',p2)));
R.Assign(2,6,12,8);
Insert(New(PButton,Init(R,'‡ (c)вЁ',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Є | ЋЎ"Ґ¬ | Љ(r)«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));{¤(r)¤ у¬(r) г Є(r)«ҐЄж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,'Џ(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,'§ Є(r)«м(r)а(r)¬:',p)));
R.Assign(2,4,12,6);
Insert(New(PButton,Init(R,'‡ (c)вЁ',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Є | ЋЎ"Ґ¬ | Љ(r)«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));{¤(r)¤ у¬(r) г Є(r)«ҐЄж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,'Џ(r)игЄ § жi(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,'¤(r):',p2)));
R.Assign(2,6,12,8);
Insert(New(PButton,Init(R,'‡ (c)вЁ',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Є | ЋЎ"Ґ¬ | Љ(r)«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));{¤(r)¤ у¬(r) г Є(r)«ҐЄж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,'Џ(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,'‡ Ј «мЁ(c):',p)));
R.Assign(2,4,12,6);
Insert(New(PButton,Init(R,'‡ (c)вЁ',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Є | ЋЎ"Ґ¬ | Љ(r)«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));{¤(r)¤ у¬(r) г Є(r)«ҐЄж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{ЋваЁ¬ вЁ Є(r)¬ ¤г § (r)б(r)ў(r)Ј(r) ¤i «(r)Ј(r)ў(r)Ј(r) ў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) ў R «(r)Є «мi Є(r)(r)а¤Ё вЁ
ўЄ §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;
{---------------------------------------------------------------------------}
{ђ(r)Ў(r)в § ¤ Ё¬Ё}
var R:TRect;
Control:Word;
PW:PWorkWin;
begin
R.Assign(0,0,80,23);
PW:=New(PWorkWin,Init(r));
Control:=DeskTop^.ExecView(PW);
Dispose(PW,Done);
end;
{---------------------------------------------------------------------------}
Procedure Tbook.HandleEvent(var Event:TEvent);
{---------------------------------------------------------------------------}
{ЋЎа(r)Ў«оў з Ї(r)¤i(c) Їа(r)Ја ¬Ё}
type TEvent=record
What:Word;{ЋЇаЁ¤i«пу вЁЇ Ї(r)¤iх}
case Word of{"Џгбв " Ї(r)¤iп}
evMouse:({Џ(r)¤iп ўi¤ ¬ЁиЄЁ:}
Buttons:Byte;{‘в Є« ўiи}
Double:Boolean;{Ћ§ Є Ї(r)¤ўi(c)(r)Ј(r) ¦ ввп Є(r)ЇЄЁ ¬ЁиЁ}
Where:TPoint);{Љ(r)(r)а¤Ё вЁ Єгаб(r)а ¬ЁиЁ}
evKeyDown:({Џ(r)¤iп ўi¤ Є« ўi вгаЁ:}
case Integer of
0:(KeyCode:Word);{Љ(r)¤ Є« ўiиЁ}
1:(CharCode:Byte;
ScanCode:Byte));
evMessage:({Џ(r)¤iп-§ўiбв(r)зЄ :}
Command:Word;{Љ(r)¤ Є(r)¬ ¤Ё}
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);{ЋЎа(r)ЎЄ бв ¤ авЁе Є(r)¬ ¤ cmQuit i cmMenu}
if Event.What=evCommand then
case Event.Command of{ЋЎа(r)ЎЄ (r)ўЁе Є(r)¬ ¤}
cmOpen:FileOpen;
cmSave:FileSave;
cmChangeDir:ChangeDir;
cmDOSShell:ShallDOS;
cmWork:Work;
cmAvtorA:AvtorA;
cmAvtorV:AvtorV;
else
exit;{ЌҐ (r)Ўа(r)Ў«пвЁ iиi Є(r)¬ ¤Ё}
end;
ClearEvent(Event);{ЋзЁбвЁвЁ Ї(r)¤iх Їiб«п (r)Ўа(r)Ў«Ґп}
end;{TDovidnuk.HandleEvent}
{---------------------------------------------------------------------------}
Procedure Tbook.InitMenuBar;
{---------------------------------------------------------------------------}
{‘вў(r)аҐп ўҐаем(r)Ј(r) ¬Ґо}
var R:TRect;
begin
GetExtent(r);
R.B.Y:=succ(R.A.Y);{R -Є(r)(r)а¤Ё вЁ бва(r)ЄЁ ¬Ґо}
MenuBar:=New(PMenuBar,Init(R,
NewMenu(
NewSubMenu('~F~/ ” (c)«', 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Ґжм а(r)Ў(r)вЁ','Alt-X',kbAltX,cmQuit,hcNoContext,
NIL)))))) {ЌҐ¬ iиЁе Ґ«Ґ¬Ґвiў Їi¤¬Ґо}),
NewSubMenu('~A~/ Ђўв(r)а',hcNoContext,
NewMenu(
NewItem('~1~/ Ђўв(r)а Їа(r)Ја ¬Ё','Alt-P',kbAltP,cmAvtorA,hcNoContext,
NewLine(
NewItem('~2~/ ‚ЁЄ« ¤ з','Alt-V',kbAltV,cmAvtorV,hcNoContext,
NIL)))),
NIL)))));
end;{TDovidnuk.InitMenuBar;}
{---------------------------------------------------------------------------}
Procedure Tbook.InitStatusLine;
{---------------------------------------------------------------------------}
{ЋЇЁб п (r)ў(r)Ј(r) ¬Ґв(r)¤ , § ¤(r)Ї(r)¬(r)Ј(r)о пЄ(r)Ј(r) бвў(r)аоувмбп бва(r)Є бв вгб }
var R:Trect;
begin
GetExtent(r);
R.A.Y:=pred(R.B.Y);{Џ(r)¬iй у¬ ў R Є(r)(r)а¤Ё вЁ бва(r)ЄЁ бв вгб }
{‘вў(r)аоу¬ бва(r)Єг бв вгб :}
StatusLine:=New(PStatusLine,Init(R,
{ЋЇаЁ¤i«пу¬ (r)¤Ё ў аi в бва(r)ЄЁ бв вгб :}
NewStatusDef(0, $FFFF,{ўбв (r)ў«оу¬(r) ¤«п жм(r)Ј(r) ў аi в ¬ ЄбЁ¬ «мЁ(c) ¤i Ї §(r) Є(r)⥪бв(r)х бЇа ў(r)з(r)х б«г¦ЎЁ}
NewStatusKey('~Alt-X~ ‚Ёеi¤',kbAltX,cmQuit,
NewStatusKey('~F10~ ЊҐо',kbF10,cmMenu,
NIL)), {ЌҐ¬ iиЁе Є« ўiи}
NIL) {ЌҐ¬ iиЁе ўЁ§ зҐм}));
DisableCommands(Wincom1)
end;{TDovidnuk.InitStatusLine}
{--------------------------------------------------------------------------------}
end.