diff --git a/PRAKTIKA.PAS b/PRAKTIKA.PAS index 03380d7..e03d818 100644 --- a/PRAKTIKA.PAS +++ b/PRAKTIKA.PAS @@ -5,8 +5,8 @@ program pr; y_wlcm : integer; {Vsplivayushii text} i : integer; {Vspomogatelnie peremennye} cur : integer; {Posicia kursora v menu} - x,y, stry, th : integer; {Peremennye dlya vyvoda teksta} - ln, ch : integer; {Peremennye dlya chtenia teksta} + x,y, th : integer; {Peremennye dlya vyvoda teksta} + ch, cf, ct : integer; {Peremennye dlya chtenia teksta} nolect : integer; {Nomer lekcii} f : text; {File lekcii} javame, author, @@ -14,23 +14,32 @@ program pr; menustatus, tmp, lectstatus,path,j: string; mainmenu : array [1..22] of string; {menu} + lines : array [1..30] of string; {readtext} {Procedura inicializacii grafiki} procedure init_screen; begin tmp_d := detect; initgraph(tmp_d, tmp_m, ''); + if (graphresult<>0) then + begin + writeln('Graphical interface not used. Exit...'); + readkey; + halt; + end; end; procedure menu ; forward; procedure lections(var lect:integer); forward; - procedure ui(ttitle, tbar : string); forward; + procedure ui(ttitle, tbar : string; back : integer); forward; {Procedura inicializacii peremennyh} procedure init_variables; begin + cf := 9; + ct := 14; x := 20; - th := 440; {Vysota svobodnoy oblasti pri vyvode teksta} + th := 400; {Vysota svobodnoy oblasti pri vyvode teksta} y_wlcm := -20; cur := 1; author := 'Author: Victor aNNiMON Melnik'; @@ -39,7 +48,7 @@ program pr; javame := 'JavaME'; lectstatus := 'F1 - Help T - Test ESC - Menu'; menustatus := 'ESC - Vyhod UP,DOWN,LEFT,RIGHT - Peredvijenie kursora ENTER - Perehod'; - path := 'D:\2PO-07\'; + path := 'Y:\SCHOOL.PAK\2PO-07\' {'D:\TP\BIN\annimon\'}; {Menu Lekcii} for i:= 1 to 10 do begin @@ -88,10 +97,7 @@ program pr; procedure author_screen; begin; init_screen; - ui('Authors',''); - {setcolor(7); - bar(0,0,640,480);} - settextstyle(1, 0, 7); + ui('Authors','',9); settextstyle(3, 0, 4); setcolor(red); outtextxy(100, 171, author); @@ -103,22 +109,27 @@ program pr; menu; end; - {Vyvod pomoschi pri chtenii lekcii} + {Vyvod pomoschi pri chtenii lekcii} procedure help_screen; begin; init_screen; - ui('Help',''); - outtextxy(99, 170, 'B - Smena cveta fona'); - outtextxy(99, 230, 'N - Smena cveta texta'); + ui('Help','',9); + setcolor(14); + settextstyle(2,0,7); + outtextxy(99, 110, 'UP - Chtenie lekcii s nachala'); + outtextxy(99, 150, 'DOWN - Sleduyuschaya stranica'); + outtextxy(99, 190, 'LEFT/RIGHT - Sdvinut tekst vlevo/vpravo'); + outtextxy(99, 230, 'ENTER - Normalnoe vyravnivanie teksta'); + outtextxy(99, 270, 'B - Smena cveta fona'); + outtextxy(99, 310, 'N - Smena cveta texta'); repeat until keypressed; - menu; end; - + {Procedura otrisovki ekrana} - procedure ui(ttitle, tbar : string); + procedure ui(ttitle, tbar : string; back : integer); begin {ochistka ekrana} - setfillstyle(1,9); + setfillstyle(1,back); bar(0,0,640,480); {Title} setfillstyle(1, 1); @@ -127,11 +138,45 @@ program pr; settextstyle(2,0,6); outtextxy(300, 0, ttitle); {Status} - setfillstyle(1, 7); - settextstyle(2,0,4); - bar(0, 466, 640, 480); - setcolor(24); - outtextxy(10, 468, tbar); + setfillstyle(1, 7); + settextstyle(2,0,4); + bar(0, 466, 640, 480); + setcolor(24); + outtextxy(10, 468, tbar); + end; + + {Chtenie strok iz faila} + procedure readlines; + var numl : integer; + begin + numl := 1; + if not eof(f) then + begin + repeat + readln(f, lines[numl]); + inc(numl); + until eof(f) or (numl>(th div ch)) or (numl>30); + {Ostalnie zapolnyayem probelami} + for i:= numl to 30 do lines[i] := ''; + end; + end; + + {Smena cveta fona} + procedure changebk; + begin + inc(cf); + if(cf=ct) then inc(cf); + if(cf>16) then cf:=0; + if(cf=ct) then inc(cf); + end; + + {Smena cveta teksta} + procedure changetxt; + begin + inc(ct); + if(ct=cf) then inc(ct); + if(ct>16) then ct:=0; + if(ct=cf) then inc(ct); end; {Procedura chtenia lectii} @@ -144,41 +189,26 @@ program pr; reset(f); {Schityvaem nazvanie lekcii} readln(f,tmp); - ch := TextHeight(tmp)+8; {Vysota teksta} - ln := 1; - stry := 0; - repeat p1:=readkey; + ch := TextHeight(tmp)+12; {Vysota teksta} + p1:= '0'; + readlines; + repeat {Obrabotka klavish upravlenia} - if p1=#72 then cur:=cur-2 {UP} - else if p1=#75 then x:=x-10 {LEFT} - else if p1=#80 then cur:=cur+2 {DOWN} - else if p1=#77 then x:=x+10; {RIGHT} - {else if(p=#13) then cur:=cur-1; - else if(p=#72) then cur:=cur-1; - else if(p=#72) then cur:=cur-1; } - {Proverka peremennyh} - if(cur<2) then cur:=2 - else if(cur>23) then cur:=23; - ui(tmp,lectstatus); + if p1=#72 then begin reset(f); readlines; end{UP} + else if p1=#80 then readlines {DOWN} + else if p1=#75 then x:=x-100 {LEFT} + else if p1=#77 then x:=x+100 {RIGHT} + else if p1=#13 then x:=0 {ENTER} + else if p1='b' then changebk {color background} + else if p1='n' then changetxt; {n - text color} + ui(tmp,lectstatus,cf); {Otrisovka teksta} - setcolor(14); - settextstyle(4,0,3); - while not eof(f) do - begin - readln(f,s); - outtextxy(x,20+ln*ch,s); - inc(ln); - stry := stry + ch; - if (stry+ch>th) then {Dostignut nijniy kray} - begin - readkey; - ui(tmp,lectstatus); - ln:=1; - stry:=0; - end; - end; - until (p1=#27) or (p1=#116) or (p1=#59) -{ or (p=#80) or (p=#80) or (p=#13)}; + setcolor(ct); + settextstyle(2,0,5); + for i:=1 to 30 do + outtextxy(x,20+i*ch,lines[i]); + p1:=readkey; + until (p1=#27) or (p1=#116) or (p1=#59); if(p1=#116) then menu {T - Test} else if(p1=#59) then help_screen; {F1 - Help} end; @@ -199,7 +229,8 @@ program pr; procedure menu; begin init_screen; - repeat p:=readkey; + p := '.'; + repeat {Obrabotka klavish upravlenia} if p=#72 then cur:=cur-2 {UP} else if p=#75 then cur:=cur-1 {LEFT} @@ -207,9 +238,9 @@ program pr; else if p=#77 then cur:=cur+1 {RIGHT} else if p=#13 then choicemenu(cur); {ENTER} {Proverka peremennyh} - if(cur<2) then cur:=2; - if(cur>23) then cur:=23; - ui(javame, menustatus); + if(cur<2) then cur:=2 + else if(cur>23) then cur:=23; + ui(javame, menustatus,9); {Otrisovka menu} setcolor(14); settextstyle(1,0,3); @@ -224,10 +255,10 @@ program pr; end; outtextxy(120, 40+i*30, mainmenu[i*2-1]); outtextxy(320, 40+i*30, mainmenu[i*2]); - end; - until (p=#27) {or (p=#72) or (p=#75) or (p=#77) - or (p=#80) or (p=#80) or (p=#13)}; - if(p=#27) then halt; + end; + p:=readkey; + until (p=#27); + halt; end; {Glavnaya programma}