Из опыта создания универсальных тестовых редакторов — страница 5

  • Просмотров 3883
  • Скачиваний 181
  • Размер файла 108
    Кб

данными, используя данные о длине строк фамилии, имени, отчества и вычитая их из постоянного числа Таймер, системное время. Таймер был разработан для отсчета времени на тест, время вводится предварительно составителем теста. Кроме того, параллельно с выводом времени на тест выводится текущее системное время. Действие таймера основано на переменной-счетчике, которая через определенные промежутки времени уменьшает свое

значение на 1(секунду). Системное время выводится благодаря процедуре GetTime. Repeat {цикл счетчика времени} Window(60,20,70,21); {окно вывода времени} TextBackGround(black); clrscr; z2:=z2-1; {обратный отсчет секунд} If z2<0 Then Begin {обнуление счетчика} z1:=z1-1; z2:=60; End; If (z1=0)and(z2=0) Then GoTo l1; {проверка исхода времени} GetTime(g1,g2,g3,g4); {вывод таймера и текущего времени} Writeln(z1,':',z2); {вывод времени на экран} Write(g1,':',g2,' ',g3); Delay(1000); until keypressed; Объявляется переменная, из которой каждую

секунду вычитается 1. Так осуществляется обратный отсчет. С исходом времени программа автоматически переходит к выставлению оценки. Оконная система диалога. Поскольку прошлая моя работа была посвящена диалоговым системам, я учел тот опыт, но в этой программе сделал нововведение, приблизившее программу к современному «оконному» виду. Над оформлением окна пришлось посидеть не один час, так как обычное окно в виде квадрата на

экране совсем не привлекательно. Я изучил строение окон в среде MS-DOS и попытался воссоздать дизайн окна в своей программе. Если вы когда-либо видели схему окна в MS-DOS, то заметили, что окно обрамляется двойной рамкой, наверху которой находится название окна. Здесь мне помогло хитрое решение. Я заглянул в таблицу символов ASCII и нашел символ двойной рамки! Далее все просто: открывается окно, закрашивается, по краям с помощью циклов

рисуется рамка и выводится название окна. Но это еще не все. Внутри окна открывается другое окно того же цвета, чтобы было незаметно. Теперь при вводе или выводе данных рамка не будет двигаться вместе с текстом, разрываться и т. д. Мы получаем полноценное окно. Я сделал оформление окна в виде процедуры, необходимо лишь ввести координаты окна и его название. Ниже приведен код оформления окна: Procedure windows(x,y,x1,y1:integer; b:string); Var a,t:integer; Begin

Window (x+1,y+1,x1+1,y1+1); {рисование тени от окна} TextBackGround(black); clrscr; Window(x,y,x1,y1); {рисование окна} TextBackGround(blue); clrscr; TextColor(darkgray); {цвет текста} Write(' '); Write(chr(201)); {рисование уголка} For a:=1 to 4 do Write(chr(205)); {рисование полосы} Write(' '); TextColor(green); {цвет текста} Write(b); {вывод названия окна} Write(' '); TextColor(darkgray); {цвет текста} For a:=1 to (x1-x-9-length(b)) do Write(chr(205)); {рисование линии} Writeln(chr(187)); {рисование уголка} For a:=1 to (y1-y-1) do Begin {рисование линий по бокам} Write(' '); Write(chr(186)); For t:=1 to (x1-x-3) do