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,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,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,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.