Иллюстрированный самоучитель по SVGA

Вывод информационных строк

В процессе выполнения графических программ на экран могут выводиться информационные строки, которые делятся на две основные категории.

К первой категории относятся напоминания о назначении различных значков, находящихся на экране, не требующие конкретной реакции оператора. Например, одно из подобных сообщений, выдаваемых Windows 9X, выглядит так:

"Начните работу с нажатия этой кнопки".

Обычно такие строки через некоторое время удаляются с экрана.

К другой категории относятся подсказки, требующие от оператора выполнения конкретных действий, например ввода числовых величин, спецификаций файлов и т. п. Такие строки остаются на экране до тех пор, пока оператор не выполнит требуемое действие.

В данном разделе мы рассмотрим общую схему вывода информационных строк, а в следующих – программирование ввода текста в ответ на подсказку оператору. При изложении материала нас будет интересовать вывод отдельных строк, а не больших объемов текста, именно поэтому в заголовке раздела использовано выражение "информационная строка". При работе с текстами большего объема применяются совершенно другие приемы.

Расположение и адрес строки

Прежде чем выводить символ, надо решить, в каком месте экрана он будет располагаться, и определить, какому участку видеопамяти соответствует это место. Способы указания координат точек и вычисления их адресов при работе в графических видеорежимах описаны в соответствующем разделе. Здесь мы рассмотрим конкретные примеры.

Где бы ни располагалась информационная строка для работы, надо знать адрес ее начала в видеопамяти и соответствующее ему окно. При построении изображения символа знакогенератор выводит точки на экран в том порядке, в котором их коды хранятся в таблице, а именно слева направо и сверху вниз. Поэтому для вывода текста надо знать адрес верхнего левого угла первого символа информационной строки. Для его хранения в разделе данных программы надо описать две следующие переменные:

Inflino dw 0; для хранения адреса начала информационной строки

Inflinw dw 0; для хранения окна, к которому относится этот адрес

Если информационная строка расположена в начале рабочей области экрана, то надо просто очистить указанные переменные при их описании.

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

Подсказки о необходимости ввода данных удобно располагать в последних строках рабочей области экрана. Количество и размер строк на экране зависят от установленного видеорежима, поэтому номера и адреса последних строк рабочей области экрана вычисляются при выполнении задачи.

Если верхнюю линию изображения текста поместить в строку с номером (versize – hsymb), то его нижняя линия совпадет с нижней границей рабочей области экрана.

Замечание
Напомним, что переменные Horsize и versize содержат соответственно размер строк и их количество на экране, а переменная hsymb – высоту символа (см. Пример 5.18), ее значение зависит от используемой таблицы
.

Предположим, что левый край информационной строки расположен в нулевом столбце рабочей области экрана. В таком случае нам нужен адрес видеопамяти, соответствующий точке, расположенной.в рабочей области экрана на пересечении нулевого столбца и строки с номером (versizehsymb). Его можно вычислить, например, как приведено в примере 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 надо увеличить на соответствующее число столбцов.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.