ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы.



 

Часть 16

Глава 14. Модуль WinCrt
Модуль WinCrt реализует аналогичный терминалу текстовый экран в окне. С помощью модуля WinCrt вы можете легко создавать программы, использующие стандартные процедуры Read. ReadLn, Write и WriteLn для выполнения операций ввода и вывода (так же, как в обыч
ной прикладной программе, работающей в текстовом режиме). Модуль WinCrt содержит все алгоритмы, управляющие эмуляцией текстового экрана в программной среде Windows. Если ваша программа использует модуль WinCrt, вам не потребуется писать "специфический дл
я Windows" исходный код.
                Использование модуля WinCrt

     Чтобы использовать модуль WinCrt, нужно просто указать в вашей программе оператор uses, как и при использовании любого другого модуля.
     uses WinCrt;

     По умолчанию стандартные текстовые файлы Input и Output, определенные в модуле System, не присваиваются, и все обращения к процедурам Read, Readln, Write или Writeln без указания файловой переменной приводят к ошибке ввода-вывода. Однако, когда прог
р
амма использует модуль WinCrt, код инициализации данного модуля присваивает Input и Output стандартные текстовые файлы, чтобы ссылаться на окно, эмулирующее текстовый экран. Это соответствует выполнению в начале программы следующих операторов:
     AssignWinCrt(Input); Reset(Input);
     AssignWinCrt(Output); Rewrite(Output);

     Когда в программе выполняются процедуры Readln, Read, Write или Writeln, в оперативной области Windows открывается окно CRT. По умолчанию заголовком окна CRT будет полное имя маршрута файла .EXE программы. Когда программа завершает работу (управлени
е
 достигает конечного зарезервированного слова end), заголовок окна CRT изменяется на "(Inactive nnnnn)", где nnnnn - заголовок окна в его активном состоянии.
     Заметим, что хотя программа и завершила работу, окно остается на экране, благодаря чему пользователь может проверить вывод программы. Аналогично другим прикладным программам Windows, программа не завершается полностью, пока пользователь не закроет о
к
но.
     Более полно управлять жизненным циклом окна CRT вам позволяют подпрограммы InitWinCrt и DoneWinCrt. При обращении к первой из них без ожидания первого вызова процедур Readln, Read, Write или Writeln немедленно создается окно CRT. Аналогично, обращен
и
е к DoneWinCrt немедленно уничтожает окно CRT, не ожидая, пока его закроет пользователь.
     Окно CRT представляет собой прокручиваемое "панорамное" окно на виртуальном текстовом экране. По умолчанию виртуальный экран имеет размеры 80 столбцов на 25 строк, но реальный размер окна CRT может быть меньше. Если этот размер меньне, пользователь 
д
ля перемещения области окна по текстовому экрану большего размера может использовать полосы прокрутки окна или клавиши управления курсором. Это особенно полезно для "обратной прокрутки" и проверки ранее написанного текста. По умолчанию панорамное окно от
с
леживает курсор текстового экрана. Другими словами, панорамное окно автоматически прокручивается, чтобы обеспечить постоянную видимость курсора. Установив переменную AutoTracking в значение False, вы можете запретить средство автоматической прокрутки.
     Размеры виртуального экрана определяются переменной ScreenSize. Присвоив этой переменной новые размерности перед тем, как ваша программа создает окно CRT, вы можете изменить размеры виртуального экрана. Когда окно создается, в динамически распределя
е
мой памяти выделяется буфер экрана. Размер этого буфера равен произведению ScreenSize.Y на ScreenSize.Y и не может превышать 65520 байт. Ответственность за присваивания значений этип переменным возлагается на вас (они не должны превышать указанную границ
у
). Если, например, вы присвоите ScreenSize.X значение 64, то наибольшим допустимым значением для ScreenSize.Y будет 1023.
     В любой момент в процессе выполнения программы, использующей модуль WinCrt, пользователь может прервать выполнение, выбрав в меню Control (Управление) окна CRT команду Close (Закрытие), дважды щелкнув кнопкой "мыши" в рамке меню Control или нажав кл
а
виши Alt+F4. Аналогично, в любой момент для прерывания прикладной программы пользователь может нажать Ctrl+C или Ctrl+Break, при этом окно переводится в неактивное состояние. Установив переменную CheckBreak в значение False, вы можете запретить эту возмо
ж
ность.
                       Специальные символы

     При записи в выходной файл (Output) или в файл, который назначен для окна CRT, специальное значение имеют следующие управляющие символы:
 ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
 Символ        Название     Описание
 ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
      #7       Звонок       Вызывает звуковой сигнал, издаваемый с
                            помощью внутреннего динамика.

      #8   Обратный пробел  Возврат на одну позицию. Вызывает
                            перемещение курсора влево на одну
                            позицию. Если курсор уже находится у
                            левого края текущего окна, то
                            никаких действий не производится.

      #10   Перевод строки  Перемещает курсор на одну строку вниз.
                            Если курсор уже находится на нижней
                            строке окна, то окно пролистывается
                            вверх на одну строку.

      #13  Возврат каретки  Возвращает курсор с левому краю
                            текущего окна.
 ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

                           Ввод строк

     При чтении из входного файла (Input) или из текстового файла, который назначен для окна CRT, текст вводится по одной строке. Строка запоминается во внутреннем буфере текстового файла и когда переменные считываются, то в качестве источника использует
с
я этот буфер. Каждый раз когда буфер становится пустым, вводится новая строка. При вводе строк в окне CRT можно использовать следующие клавиши редактирования: Вacksрасе - удаляет последний введенный символ, Esс - удаляет всю вводимую строку, Enter - прек
р
ащает ввод строки и записывает метку конца строки (возврат каретки/перевод строки) в буфере. Кроме того, можно использовать клавиши Сtrl-Z, которые генерируют символ конца файла только в том случае, если переменная CheckEof установлена в значение Truе (п
о
 умолчанию ей присвоено значение Falsе). Нажатие Ctrl-Z также завершает строку ввода и генерирует маркер конца строки.
     Для проверки состояния клавиатуры и ввода отдельных символов под управлением программы используйте функции KeyРressed и Rеаdkey.
                        Переменные

     В модуле WinCrt описывается несколько типов констант и одна переменная. Типизованные константы имеют начальные значения. Вы можете рассматривать их, как переменные, поскольку начальные значения вы можете изменять во своему усмотрению.
 ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
 Переменная            Тип
 ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
   WindowOrg          TPoint
   WindowSize         TPoint
   ScreenSize         TPoint
   Cursor             TPoint
   Origin             TPoint
   InactiveTitle      PChar
   AutoTracking       Boolean
   CheakBreak         Boolean
   CheckEof           Boolean
   WindowTitle        Boolean
 ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

                   Переменная WindowOrg

     Определяет начальное положение окна CRT.

     const WindowOrg: TPoint = (X: cwUseDefault; Y: cw_UseDefault);

     Используемое по умолчанию расположение позволяет Windows выбитрать подходящее расположение окна CRT. Вы можете изменить начальное значение, присвоив перед созданием окна CRT новые значения координатам X и Y.
                   Переменная WindowSize

     Определяет начальный размер окна CRT.

     const WindowSize: TPoint = (X: cwUseDefault; Y: cw_UseDefault);

     Используемый по умолчанию размер позволяет Windows выбирать подходящий размер окна CRT. Вы можете изменить начальный размер, присвоив перед созданием окна CRT новые значения координатам X и Y.
                   Переменная ScreenSize

     Определяет ширину и высоту (в символах) виртуального экрана окна CRT.
     const ScreenSize: TPoint = (X: 80; Y: 25);

     По умолчанию экран имеет размер 80 столбцов на 25 строк. Присвоив другие значения координатам X и Y ScreenSize перед созданием окна CRT, вы можете изменить используемый по умолчанию размер экрана CRT. Значение, получаемое при произведении ScreenSize
.
X на ScreenSize.Y, не должно превышать 65520.
                     Переменная Cursor

     Содержит текущую позицию курсора на виртуальном экране.
     const Cursor: TPoint = (X: 0; Y: 0);

     Верхний левый угол соответствует координате (0,0). Cursor - это переменная, доступная только по чтению. Присваивать ей значения нельзя.
                     Переменная Origin

     Содержит координаты виртуального экрана для символа, выводимого в верхнем левом углу окна CRT.
     const Origin: TPoint = (X: 80; Y: 25);

     Origin - это переменная, доступная только по чтению. Присваивать ей значения нельзя.
                 Переменная InactiveTitle

     Указывает на завершающуюся нулем строку, используемую для создания заголовка неактивного окна CRT.
     const InactiveTitle: PChar = '(Inactive %s)';

     Эта строка используется, как параметр, управляющий форматом при вызове функции Windows WVSPrintF. Спецификатор %s указывает в случае его присутсвия, куда нужно включить существующий заголовок окна.
                  Переменная AutoTracking

     Разрешает или запрещает автоматическую прокрутку окна для отслеживания видимого курсора.
     const AutoTracking: Boolean = True;

     Когда эта переменная имеет значения True, окно CRT автоматически прокручивается для обеспечения видимости курсора после каждого вызова Write или Writeln. Если AutoTracking имеет значение False, то окно CRT не будет автоматически прокручиваться, и за
п
исываемый в окно текст может оказаться невидимым для пользователя.
                    Переменная ChесkEOF

     Переменная ChеckEOF разрешает или запрещает символ конца файла:
     const CheckEOF: Boolean = False;

     Если переменная ChеckEOF имеет значение Truе, то когда чтение производится из файла, назначенного окну CRT, при нажатии клавиш Ctrl+Z генерируется символ конца файла. Когда переменная ChеckEOF имеет значение False при нажатии клавиш Ctrl+Z никаких д
е
йствий не выполняется.
                   Переменная ChеckВrеak

     Переменная CheckВrеak разрешает или запрещает проверки ситуации Сtrl+Вreak.
     const CheckBreak: Boolean = True;

     Когда переменная ChеckВrеak принимает значение Truе, нажатие пользователем клавиш Alt+F4, выбор пользователем команды Close в меню Control окна CRT или двойное нажатие кнопки "мыши" в управляющей рамке меню Control этого окна приведет к принудительн
о
му завершению работы прикладной программы при следующей операции вывода на экран дисплея, которую выполнит эта программа. Аналогично, нажатие клавиш Ctrl+Вrеak или Ctrl+C в любое время приостанавливает выполнение программы и переводит окно в неактивное с
о
стояние. Установив переменную ChеckВreak в значение Falsе, эти возможности можно запретить.
                  Переменная WindowTitle

     Определяет заголовок окна CRT.

     var WindowTitle: array[0..79] of Char;

     По умолчанию используется значение, равное полному имени маршрута файла .EXE программы. Записав в WindowTitle перед созданием окна CRT новое значение, вы можете изменить заголовок. Например:
     StrCopy(WindowTitle, 'Hello, Word');

                       Процедуры и функции

     В следующих таблицах перечисляются процедуры и функции, которые можно найти в модуле WinCrt.
 ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
 Процедура             Описание
 ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
 AssignCrt             Назначает текстовый файл для окна CRT.

 ClrEоl                Очищает все символы, начиная от позиции
                       курсора до конца строки, без перемещения
                       курсора.

 ClrScr                Очищает экран и помещает курсор в верхнем
                       левом углу.

 CursorTo              Перемещает курсор в точку на виртуальном
                       экране с заданными координатами.

 DoneWinCrt            Уничтожает окна CRT.

 GоtоХY                Выполняет позиционирование курсора. Х - это
                       горизонтальная позиция, Y - вертикальная
                       позиция виртуального экрана.

 InitWinCrt            Инициализирует окно CRT.

 ScrollTo              Прокручивает окно CRT, чтобы видна была
                       точка с заданными координатами.

 TrackCursor           Прокручивает окно CRT, чтобы курсор был
                       видимым.

 WriteBuf              Выводит в окно CRT блок символов.

 WriteChar             Выводит в окно CRT отдельный символ.
 ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

 ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
 Функция               Описание
 ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
 KeyРrеssеd            Возвращает значение Truе, если клавиша на
                       клавиатуре нажата и Falsе - в противном
                       случае.

 ReadBuf               Считывает из окна CRT строку.

 RеаdKеу               Считывает символ с клавиатуры.

 WherеХ                Возвращает координату Х для текущей позиции
                       курсора, относящуюся к текущему окну. Х
                       представляет собой горизонтальную
                       позицию.

 WhereY                Возвращает координату Y для текущей позиции
                       курсора, относящуюся к текущему окну. Y
                       представляет собой вертикальную позицию.
 ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Далее процедуры и функции описываются более подробно.

                   Процедура InitWinCrt

     Данная подпрограмма создает окно CRT, если оно еще не создано.
     procedure InitWinCrt;

     Операции Read, Readln, Write, Writeln с файлом, которому присвоено CRT, автоматически вызывают процедуру InitWinCrt для обеспечения существования окна CRT. Для определения характеристик окна CRT процедура InitWinCrt использует константы WindowOrg, W
i
ndowSize и ScreenSize, а также переменную WindowTitle.
                   Процедура DoneWinCrt

     Уничтожает окно CRT, если оно еще не отменено.

     procedure DoneWinCrt;

     Вызов данной процедуры перед завершением программы предотвращает переход окна CRT в неактивное состояние. Таким образом, пользователю не нужно будет закрывать окно вручную.
                    Процедура WriteBuf

     Записывает в окно CRT блок символов.

     procedure WriteBuf(Buffer: PChar; Count: Word);

     Buffer указывает на первый символ блока, а Count содержит число записываемых символов. Если AutoTracking имеет значение True, то окно CRT при необходимости прокручивается, обеспечивая видимость курсора после вывода блока символов.
                    Процедура WriteChar

     Записывает в окно CRT один символ.

     procedure WriteChar(Ch: Char);

                    Функция KeyPressed

     Считывает символ с клавиатуры.

     function KeyPressed: Char;

     Эхоотображение символа на экране не выполняется.

     Замечание: Функция KeyPressed поддерживает только стандартные коды клавиш ASCII. Расширенные коды, генерируемые функциональными клавишапи и клавишами перемещения курсора данной функцией не поддерживаются.
                      Функция ReadBuf

     Вводит строку из окна CRT.

     function ReadBuf(Buffer: PChar; Count: Word): Word;

     Buffer указывает на буфер строки, в котором имеется место для Count символов. Может вводиться до Count - 2 символов, а когда пользователь нажимает клавишу Enter, к концу строки автоматически добавляется маркер конце строки (#13 и #14). Если переменн
а
я CheckEof имеет значение True, то пользователь может также завершить строку, нажав Ctrl+Z. В этом случае строка будет содержать маркер конца файла (#26), который присоединяется к концу строки. Возвращаемое значение равно числу считанных символов, включа
я
 маркер конца строки или конца файла,
                     Процедура GotoXY

     Процедура GotoXY перемещает курсор в точку с заданными координатами виртуального экрана.
     procedure GotoXY(X, Y: Integer);

     Верхний левый угол соответствует точке с координатами (1,1). Переменная Cursor устанавливается в значение (X-1,Y-1), так как в ней хранится позиция курсора относительно точки (0,0), а не (1,1).
     Замечание: Процедуры GotoXY, WhereX, WhereY предусмотрены в основном для совместимости с модулем Crt, обеспечиваемым Турбо Паскалем для DOS. Координаты этих подпрограмм считаются от 1 и не совпадают с переменными модуля WinCrt. Поэтому мы рекомендуе
м
 вам использовать вместо них подпрограмму CursorTo и переменную Cursor.
                      Функция WhereX

     Возвращает координату X текущей позиции курсора.

     function WhereX: Integer;

     Возвращаемое значение считается от 1 и соответствует Cursor.X + 1.
                      Функция WhereY

     Возвращает координату Y текущей позиции курсора.

     function WhereY: Integer;

     Возвращаемое значение считается от 1 и соответствует Cursor.Y + 1.
                      Процедура CrlScr

     Очищает экран и возвращает курсор в верхний левый угол.

     procedure ClrScr;

                     Процедура ClrEol

     Стирает все символы от позиции курсора до конца строки. Курсор не перемещается.
                    Процедура CursorTo

     Перемещает курсор в точку с заданными координатами экрана.
     procedure CursorTo(X, Y: Integer);

     Верхний левый угол экрана соответствует точке с координатами (0,0). Переменная Cursor устанавливается в значение (X,Y).
                    Процедура ScrollTo

     Выполняет прокрутку окна CRT, чтобы в левом верхнем углу экрана находилать точка с координатами (X,Y).
     procedure ScrollTo(X, Y: Integer);

     Точка (0,0) соответствует верхнему левому углу виртуального экрана. Переменная Origin устанавливается в значение (X,Y).
                   Процедура TrackCursor

     Прокручивает окно CRT, если необходимо обеспечить видимость курсора.
     procedure TrackCursor;

                    Процедура AssignCrt

     Связывает с окном CRT текстовый файл.

     procedure AssignCrt(var F: Text);

     Последующие операции Write и Writeln для этого файла приведут к выводу в окно CRT, а операции Read и Readln - к считыванию из окна CRT.



Яндекс цитирования