{ eknihy.pas Copyright (c) TrSek alias Zdeno Sekerak } { Heterogenna evidencia knih. } { Pouziva: } { - ZASOBNIK - dynamicke pole so smernikmi na obsah } { - ZOZNAM - linearny zretazeny zoznam s hlavou } { - FRONT - dynamicke pole } { - Interaktívne menu } { } { Datum:17.04.2007 http://www.trsek.com } Program eKnihy; Uses crt, gzoznam, gzasob, gfront; Const EscPgm=#27; EscHlp=#27; EscInf=#27; Enter =#13; MAX = 11; Type cMenu = object Koniec : boolean; Key : integer; constructor Init; destructor Done; virtual; procedure OknoZakl; procedure Ukoncenie; procedure Help; procedure Prev; procedure Next; procedure View; end; Var knizky : cEvidKni; menu : cMenu; constructor cMenu.Init; begin ClrScr; Koniec:=False; Key:=1; end; destructor cMenu.Done; Begin End; procedure cMenu.OknoZakl; Begin textcolor(lightgray); textbackground(red); Clrscr; gotoxy(28,1); write('Heterogenna evidencia ver.1.1'); window(2,2,78,22); textbackground(black); clrscr; End; procedure cMenu.Ukoncenie; var Znak: char; Begin window(25,15,55,20); textcolor(red); textbackground(white); clrscr; gotoxy(7,4); write('Ukoncit program A/N'); Repeat Znak:=readkey; Until Znak in ['A','a','N','n']; Koniec := Znak in ['A','a']; End; procedure cMenu.Help; Begin window(10,7,70,17); textcolor(black); textbackground(yellow); clrscr; gotoxy(8,2); write('Help'); Repeat Until Readkey = EscHlp; End; procedure cMenu.Prev; begin Key := Key-1; { uz je hore } if( Key<1 )then Key:=MAX; end; procedure cMenu.Next; begin Key := Key+1; { uz je dole } if( Key>MAX )then Key:=1; end; procedure cMenu.View; const MenuList : array[1..MAX] of string = ( ' 1. Pridaj ', ' 2. Vymaz ', ' 3. Edituj ', ' 4. Presun na prvy ', ' 5. Presun na predosly ', ' 6. Presun na nasledovny ', ' 7. Presun na posledny ', ' 8. Hladaj ', ' 9. Zrus hladanie ', ' A. Zoznam autorov ', ' 0. Koniec (ESC) ' ); var i: integer; mList: cMenuList; begin OknoZakl; mList.Init; { naplnime zoznam } for i:=1 to MAX do mList.Pridaj( MenuList[i]); { nastavime kluc } mList.SetHighlight( MAX-Key+1 ); { zobrazime menu } mList.MainMenu; while( not(mList.JePrazdna)) do mList.UkazPolozku; { zrusime alokovanu memory } mList.Done; writeln; writeln(' ---------------------------'); writeln(' Pohyb sipkami, shortcut 1-8'); end; { vypise zoznam autorov } procedure Autori; var mAutori: cAutori; autor: string; ind: integer; begin mAutori.Init; Knizky.MoveFirst; if( Knizky.JePrazdna = false )then { kazdeho autora zaradim } repeat ind := Knizky.Index; { posledny index } autor := Knizky.Aktual^.Info.autor; mAutori.Pridaj( autor ); Knizky.MoveNext; until ( ind = Knizky.Index ); { teraz ich vypisem } mAutori.MainMenu; while( not(mAutori.JePrazdna)) do mAutori.UkazPolozku; mAutori.Done; { pocka na klaves } writeln; writeln(' Stlac Enter'); readln; end; Begin Menu.Init; Menu.OknoZakl; Knizky.Init; Repeat Menu.View; Knizky.UkazZaznam; Knizky.Status; Case Readkey of EscPgm : Menu.Ukoncenie; Enter : Case Menu.Key of 1 : Knizky.PridajZozbraz; { pridaj dalsi zaznam } 2 : Knizky.VyradAktual; { vymaz aktualny zaznam } 3 : Knizky.ZmenAktual; { zmeni aktualny zaznam } 4 : Knizky.MoveFirst; { pohyb po zaznamoch } 5 : Knizky.MovePrev; 6 : Knizky.MoveNext; 7 : Knizky.MoveLast; 8 : Knizky.Search; { hladaj } 9 : Knizky.ZrusFilter; { zrus hladanie } 10 : Autori; { koniec } 11 : Menu.Ukoncenie; { koniec } End; #0 : Case Readkey of {F1} #59 : Menu.Help; {Prev} #72 : Menu.Prev; {Next} #80 : Menu.Next; End; { shortcut } #49 : Knizky.PridajZozbraz; { pridaj dalsi zaznam } #50 : Knizky.VyradAktual; { vymaz aktualny zaznam } #51 : Knizky.ZmenAktual; { zmeni aktualny zaznam } #52 : Knizky.MoveFirst; { pohyb po zaznamoch } #53 : Knizky.MovePrev; #54 : Knizky.MoveNext; #55 : Knizky.MoveLast; #56 : Knizky.Search; { hladaj } #57 : Knizky.ZrusFilter; { zrus hladanie } 'A' : Autori; { zoznm autorov } #48 : Menu.Ukoncenie; { koniec } End; Until Menu.Koniec; Menu.Done; Knizky.Done; End.