Дипломные работы, курсовые проекты на заказ, контрольные работы на заказ

 
Ассемблер архитектура МП Ассемблерные подпрограммы Звуковые возможности управления клавиатурой Библиотека Turbo Vision графические подпрограммы Процедура InitGraph Обработчик событий Режим редактирования Видимый объект Поток События

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

Вывод текста

По сравнению с рис. 15.4 мы добились немногого, ведь пока еще не решена главная проблема - вывод нужного текста. Разумеется, в Вашем распоряжении всегда имеется процедура WRITELN, однако вывод текста «в лоб» с помощью этой процедуры практически никогда не используется в Turbo Vision, так как в этом случае выведенный текст не будет связан с окнами.

В объекте TScroller для вывода текста предусмотрен абстрактный метод Draw. Абстрактным он называется потому, что не выполняет никакой полезной работы. Однако именно к этому методу обращается обработчик событий объекта TScroller всякий раз, когда понадобится обновить на экране вид окна. Чтобы объект выполнял все заложенные в него функции, нам необходимо перекрыть этот метод новым. Мы уже знаем, что для этого нужно объявить новый объект:

type

PInterior =ATInterior; TInterior = object (TScroller)

Constructor Init(var Bounds: TRect;HS,VS: PScrollBar);

Procedure Draw; virtual;

Procedure ReadFile; 

end;

Мы перекрыли абстрактный метод Draw, стандартный конструктор Init и инкапсулировали в объект новый метод ReadFile. Новый конструктор предназначен для инициации экземпляра объекта TScroller. Кроме того, с помощью метода ReadFile он должен прочитать все записи файла данных и подготовить соответствующий массив строк - это сократит время на обновление текста процедурой Draw.

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

const

MaxLine = 300; {Максимальная длина массива} 

LLine = LName+LPhone+LAddr; {Длина строки} 

var

NLines: Word; {Истинная длина массива строк} 

Lines: array [1..MaxLine] of String [LLine]; {Массив строк}

Теперь нетрудно подготовить процедуру ReadFile:

Procedure TInterior.ReadFile;

{Читает содержимое файла данных в массив Lines}

var

k: Integer; s: String;

Data: DataType; 

begin

seek(DataFile, 0) ;

NLines := FileSize(DataFile);

if NLines > MaxLine then

NLines := MaxLine; 

for k ':= 1 to NLines do 

begin

Read(DataFile, data); 

with data do 

begin

s := Name;

while Length(s) < LName do

s := s+' '; 

s := s+Phone; 

while Length(s) < LName+LPhone do

s := s+' '; 

s := s+Addr 

end;

Lines[k] := s 

end; 

end; {ReadFile}

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

Теперь займемся процедурой Draw:

Procedure TInterior.Draw; 

{Выводит данные в окно просмотра}

var

n, {Текущая строка экрана} 

k: Integer; {Текущая строка массива}

В: TDrawBuffer; Color: Byte; 

begin

Color := GetColor(l); {Использовать цвет основного текста} 

for n := 0 to pred(Size.Y) do 

{Size.Y - количество строк окна} 

begin

k := Delta.Y+n+1; {Delta.Y - номер первой выводимой строки} 

MoveChar(B,' ',Color,Size.X);

MoveStr(B, Copy(Lines[k],Delta.X+l,Size.X),Color); 

WriteLine(0,N,Size.X,l,B) 

end 

end; {TInterior.Draw}

Работа процедуры основана на использовании текущих размеров и положения текстового окна относительно текста. Эти параметры хранятся в полях Size и Delta объекта TScroller и обновляются всякий раз, когда пользователь манипулирует полосами управления или изменяет размеры окна. Для вывода текста используются три процедуры: MoveChar, MoveStr, WriteLine. Каждая из них оперирует переменной В типа TDrawBuffer, представляющей собой последовательности кодов выводимых символов и их атрибутов. Процедура MoveChar заполняет переменную В указанным символом (' ') и атрибутом (Color). Процедура MoveStr копирует строку в переменную В, а с помощью WriteLine осуществляется вывод буфера В на экран.

Для вывода изображений (текста) перекрывайте и используйте метод Draw объекта-владельца нужной части экрана. Это обеспечит автоматическое изменение изображения и его прорисовку при изменении границ или положения поля вывода.

Модуль CRT включает процедуры и функции, обеспечивающие управление текстовым режимом работы экрана. С помощью входящих в модуль подпрограмм можно перемещать курсор в произвольную позицию экрана, менять цвет выводимых символов и окружающего их фона, создавать окна. Кроме того, в модуль включены также процедуры «слепого» чтения клавиатуры и управления звуком.
Встроенный ассемблер, графика в Турбо Паскале Система программирования Турбо Паскаль Примеры программирования наJava