Вывод информационных строк
В процессе выполнения графических программ на экран могут выводиться информационные строки, которые делятся на две основные категории.
К первой категории относятся напоминания о назначении различных значков, находящихся на экране, не требующие конкретной реакции оператора. Например, одно из подобных сообщений, выдаваемых Windows 9X, выглядит так:
"Начните работу с нажатия этой кнопки".
Обычно такие строки через некоторое время удаляются с экрана.
К другой категории относятся подсказки, требующие от оператора выполнения конкретных действий, например ввода числовых величин, спецификаций файлов и т. п. Такие строки остаются на экране до тех пор, пока оператор не выполнит требуемое действие.
В данном разделе мы рассмотрим общую схему вывода информационных строк, а в следующих – программирование ввода текста в ответ на подсказку оператору. При изложении материала нас будет интересовать вывод отдельных строк, а не больших объемов текста, именно поэтому в заголовке раздела использовано выражение "информационная строка". При работе с текстами большего объема применяются совершенно другие приемы.
Расположение и адрес строки
Прежде чем выводить символ, надо решить, в каком месте экрана он будет располагаться, и определить, какому участку видеопамяти соответствует это место. Способы указания координат точек и вычисления их адресов при работе в графических видеорежимах описаны в соответствующем разделе. Здесь мы рассмотрим конкретные примеры.
Где бы ни располагалась информационная строка для работы, надо знать адрес ее начала в видеопамяти и соответствующее ему окно. При построении изображения символа знакогенератор выводит точки на экран в том порядке, в котором их коды хранятся в таблице, а именно слева направо и сверху вниз. Поэтому для вывода текста надо знать адрес верхнего левого угла первого символа информационной строки. Для его хранения в разделе данных программы надо описать две следующие переменные:
Inflino dw 0; для хранения адреса начала информационной строки Inflinw dw 0; для хранения окна, к которому относится этот адрес
Если информационная строка расположена в начале рабочей области экрана, то надо просто очистить указанные переменные при их описании.
Если расположение строки связано с расположением курсора на экране, например, курсор указывает на значок, назначение которого надо пояснить, то в описанные переменные просто копируется текущий, или несколько измененный, адрес изображения курсора. Текущие координаты курсора и адрес его изображения на экране нужны во многих случаях, поэтому обычно они хранятся в переменных, зарезервированных в разделе данных задачи.
Подсказки о необходимости ввода данных удобно располагать в последних строках рабочей области экрана. Количество и размер строк на экране зависят от установленного видеорежима, поэтому номера и адреса последних строк рабочей области экрана вычисляются при выполнении задачи.
Если верхнюю линию изображения текста поместить в строку с номером (versize – hsymb), то его нижняя линия совпадет с нижней границей рабочей области экрана.
Замечание
Напомним, что переменные Horsize и versize содержат соответственно размер строк и их количество на экране, а переменная hsymb – высоту символа (см. Пример 5.18), ее значение зависит от используемой таблицы.
Предположим, что левый край информационной строки расположен в нулевом столбце рабочей области экрана. В таком случае нам нужен адрес видеопамяти, соответствующий точке, расположенной.в рабочей области экрана на пересечении нулевого столбца и строки с номером (versize – hsymb). Его можно вычислить, например, как приведено в примере 5.20.
Пример 5.20. Вычисление адреса начала информационной строки.
mov ax, versize; ax = количество строк на экране sub ax, hsymb; уменьшаем его на высоту символа mul horsize; разность умножаем на размер строки mov Inflino, ax; сохраняем адрес в Inflino mov ax, dx; копируем содержимое dx в ах mul GrUnit; вьиисляем номер окна mov Inf linw; и сохраняем его в Inflinw
Если выводимый текст смещен относительно левого края информационной строки, то вычисленное в примере 5.20 значение переменной Inflino надо увеличить на соответствующее число столбцов.