Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Процедуры и функции работы с экраном и курсоромСодержание книги
Поиск на нашем сайте
ClrEol – процедура удаляет все символы от курсора (включительно) до конца строки, заполняя этот участок строки цветом фона. ClrScr – процедура очищает текущее окно, заполняя его цветом фона и помещает курсор в его верхний левый угол с координатами (1, 1). DelLine – процедура удаляет строку, в которой находится курсор. GoToXY(X, Y: byte) – процедура перемещает курсор к элементу экрана с заданными координатами X и Y. Если хотя бы одна координата недопустима, процедура не выполняется. InsLine – процедура вставляет пустую строку на экране в месте расположения курсора и заполняет ее цветом фона. WhereX (Function WhereX: byte) – возвращает значение горизонтальной кооординаты. WhereY(Function WhereY: byte) – возвращает значение вертикальной кооординаты. Управление курсором В текстовом режиме на экране, как правило, присутствует курсор – мерцающий служебный элемент, назначением которого является указание позиции на экране, начиная с которой будет производиться вывод или ввод информации. Положение курсора на экране можно проверять и изменять, используя подпрограммы CRT. Чтобы установить курсор в некоторой конкретной позиции, используется процедура GoToXY, два параметра которой определяют позицию знакоместа на экране, в которую будет перемещен курсор. Первый параметр задает номер позиции по горизонтали (номер колонки), второй параметр – номер по вертикали (номер строки). Строки и колонки нумеруются от единицы. Например, вызов процедуры GoToXY(1,1) переместит курсор в крайнюю левую верхнюю позицию экрана, а вызов процедуры GoToXY(80,25) – в нижнюю правую. Заметим, что второй вызов даст такой эффект только в том случае, когда текущий текстовый режим равен BW80, CO80, Mono. В общем случае необходимо учитывать симло строк и столбцов для конкретного режима. Если, например, действует режим CO80+Font8x8 для адаптера VGA (50 строк по 80 символов), то приведенный выше вызов процедуры переместит курсор примерно в середину правой крайней колонки. Чтобы определить текущее положение курсора, можно использовать две функции без параметров - WhereX и WhereY, которые как видно из их названий, возвращают, соответственно, горизонтальную и вертикальную координаты курсора. Задание. Наберите, протестируйте и рассмотрите небольшую иллюстративную программу, приведенную ниже. Program Count; Uses Crt; Var i: word; Begin GotoXY(1,WhereY); write(' '); for i:= 1 to 1000 do begin GotoXY(1,WhereY); write(i); Delay(100); end; End. Прием, используемый в этой программе, можно применять для нужд трассировки. Например, при обработке очень больших файлов, которая может продолжаться довольно долгое время, имеет смысл выводить "успокаивающую" информацию, наглядно показывающую пользователю, что компьютер не "завис" (некоторые системы выдают процент сделанной работы или что-либо подобное). Текстовый режим. Модуль CRT. Работа с окнами. Управление звуком Модуль CRT позволяет работать не только со всем экраном, но и выделять в нем прямоугольные окна. Любое окно задаётся своим верхним левым и правым нижним углами. Эти углы, так же как и положение любого объекта на экране, задаются двумя координатами: Х и Y. В качестве координаты Х выступает номер позиции в строке (нумерация начинается с 1 и идет слева направо), а в качестве координаты Y - номер строки (нумерация начинается с 1 и идет сверху вниз). При работе в окне координаты отсчитываются от левого верхнего угла окна. При запуске программы выделенное окно совпадает по размеру со всем экраном. Если режим работы адаптера 25 строк по 80 позиций, то координаты такого окна (1, 1) и (80, 25). Window(X1, Y1, X2, Y2: byte) – определяет текстовое окно на экране. Смысл выполнения процедуры заключается в том, что все последующие действия по выводу информации действуют в пределах данного окна. Кроме того, системные процедуры, работающие с курсором - GotoXY, WhereX, WhereY, также интерпретируют свои параметры относительно левого верхнего угла последнего установленного окна. Далее, процедура ClrScr, заполняет пробелами не весь экран, а текущее окно. Значения параметров процедуры Window выбираются очевидным образом; например, вызов Window(35,11,45,13); определяет окно высотой в две строки и длиной в десять символов примерно посередине экрана. После выполнения процедуры Window курсор устанавливается в позицию окна с координатами (1,1). Кроме этого, эффект данной процедуры на экране никак не проявляется. Результат ее работы бывает виден только при выполнении каких-либо процедур вывода или управления курсором. Хорошей иллюстрацией механизма окон является следующая простая программа, которая в цикле производит создание очередного окна, случайным образом задавая его размеры м местоположение, а затем выводит в него серию случайных символов. Задание. Наберите и протестируйте предложенную программу. Дополните ее своими операторами и комментарием. В целях большей наглядности употребите процедуру Delay и увеличьте длительность цикла вывода символов. Program Windows; Uses Crt; Procedure RandomWindow; Var X1, Y1, X2, Y2: byte; Begin X1:= Random(40)+1; Y1:= Random(12)+1; X2:= X1+Random(40); Y2:= Y2+Random(12); TextColor(Random(15)); Window(X1, Y1, X2, Y2); ClrScr; End; Procedure WorkWindow; Var i: integer; Begin for i:= 0 to Random(1000)+500 do write(Chr(Random(224)+32)); End; Procedure Finish; Var i: integer; Begin Window(1, 1, 80, 25); ClrScr; if ReadKey = #0 then ReadKey; End; Begin ClrScr; Randomize; repeat RandomWindow; WorkWindow until KeyPressed; Finish; End. Модуль CRT содержит две интерфейсные переменные типа word, которые хранят в упакованном виде координаты двух углов текущего активного окна: Var WindMin: word; {координаты левого верхнего угла окна} WindMax: word; {координаты правого нижнего угла окна} Посредством стандартных функций Hi и Lo можно извлечь из этих переменных горизонтальные и вертикальные координаты углов. Наличие этих переменных избавляет от необходимости хранить информацию об активном окне в самой программе. Наблюдая работу программы Windows, можно заметить, что, когда в процессе вывода производится заполнение последней позиции окна, его содержимое сдвигается на одну строку вверх (при этом верхняя строка пропадает) и, тем самым, нижняя строка освобождается для последующего вывода. Этот механизм является естественным обобщением знакомых правил работы процедур write и writeln на случай вывода в окна. В модуле Crt имеются две дополнительные процедуры, позволяющие несколько расширить и усилить возможности прокручивания("скроллинга") содержимого окон – DelLine и InsLine. Процедура DelLine удаляет строку окна, на которой находится курсор, и перемещает все строки ниже этой строки на одну строку вверх. При этом нижняя строка очищается и тем самым допускает ввод очередной порции информации. На основе этой процедуры удобно задавать прокрутку текстов в окне в направлении снизу вверх. Задание. Наберите и протестируйте предложенную программу. Дополните ее своими операторами и комментарием. Program ScrollUp; Uses Crt; Var i: word; Begin Window(5,10,65,14); ClrScr; writeln('Cтрока 1'); writeln('Cтрока 2'); writeln('Cтрока 3'); writeln('Cтрока 4'); writeln('Cтрока 5'); for i:= 6 to 26 do begin GotoXY(1,1); DelLine; GotoXY(1,5); write('Строка ',i); Delay(300); end; Delay(500); Window(1, 1, 80, 25); ClrScr; End. Процедура InsLine вставляет пустую строку в позиции курсора. При этом все строки окна, расположенные ниже новой строки, сдвигаются вниз (нижняя строка пропадает).Легко видеть, что эта процедура позволяет организовать прокрутку содержимого окна (или части окна) в направлении сверху вниз. Задание. Наберите и протестируйте предложенную программу. Дополните ее своими операторами и комментарием. Program ScrollDown; Uses Crt; Var i: word; Begin Window(5,10,65,19); ClrScr; writeln('Данные строки окна'); writeln('остаются неизменными.'); writeln('В пяти нижних строках'); writeln('организована прокрутка'); writeln('в направлении сверху вниз'); for i:= 1 to 40 do begin GotoXY(1,6); InsLine; write('Строка ',i); Delay(300); end; Delay(500); Window(1, 1, 80, 25); ClrScr; End. Процедуры управления звуком Sound(Hz: word) – процедура включает источник звука с частотой Hz герц. NoSound – процедура выключает источник звука. Процедуры для работы со звуком позволяют получить доступ ко встроенному динамику компьютера. Процедура Sound включает динамик, который начинает генерировать звук с заданной в герцах частотой тона. Это никак не отражается на работе программы, которая не будет остановлена и может продолжать нормально работать одновременно с подачей звуковых сигналов до тех пор, пока не встретится вызов процедуры NoSound, которая отключает динамик. Процедуры работы со звуком надо использовать аккуратно. Если после процедуры Sound не вызвать процедуру NoSound, то звук будет производится после завершения программы, и, чтобы его отключить, придется либо перезагружать компьютер, либо заново перекомпилировать и запустить программу, предварительно добавив в нее вызов процедуры NoSound. Процедура NoSound может следовать после нескольких процедур Sound, которые изменяют частоту тона. Очень часто процедуры Sound и NoSound используются совместно с процедурой Delay(ms: word), которая останавливает выполнение программы на указанное в параметре время. Процедура Delay использует для отсчета времени встроенную микросхему таймера, которая вычисляет десятые и сотые доли секунды недостаточно точно, поэтому не следует применять эту процедуру для точного вычисления времени. Рассмотрите пример использования звуковых процедур. Программа генерирует последовательность звуков, представляющих обычную гамму. Program Gamma; Uses Crt; Const Nota: Array [0..7] of word = (262, 294, 330, 349, 392, 440, 494, 524); Var i: byte; Begin GotoXY(35,5); write('Гамма'); repeat for i:= 0 to 7 do begin Sound(Nota[i]); Delay(500); NoSound; end; until KeyPressed; End.
|
||||
Последнее изменение этой страницы: 2016-08-12; просмотров: 235; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.17.181.181 (0.007 с.) |