АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Вывод текста

Читайте также:
  1. Aufgabe 2. Изучите образцы грамматического разбора простых предложений.Выберите из текста и разберите 3 простых предложения.
  2. IV . Выписать из текста слова – названия основных частей оборудования , описаного в этом тексте.
  3. Анализ результатов и выводы
  4. Аналоговый вывод
  5. В отличие от почек, которые выводят с мочой из организма преимущественно нейтральные соли, кожа способна выводить сами кислоты.
  6. Ввод текста
  7. Ввод, вывод вектора и матрицы
  8. Ввод/вывод аналоговых сигналов
  9. Вопрос 5. Какие выводы позволяет сделать сбалансированный бизнес-анализ на стадии имитации строительства предприятия?
  10. Вывод информации из базы данных
  11. Вывод общей формулы обратной матрицы

Описываемые ниже стандартные процедуры и функции поддерживают вывод текстовых сообщений в графическом режиме. Это не одно и то же, что использование процедур Write или WriteLn. Дело в том, что специально для графического режима разработаны процедуры, обеспечивающие вывод сообщений различными шрифтами в горизонтальном или вертикальном направлении, с изменением размеров и т.д. Однако в стандартных шрифтах, разработанных для этих целей фирмой Borland, отсутствует кириллица, что исключает вывод русскоязычных сообщений.

С другой стороны, процедуры Write и WriteLn после загрузки в память второй половины таблицы знакогенератора (а эта операция легко реализуется в адаптерах EGA и VGA) способны выводить сообщения с использованием национального алфавита, но не обладают мощными возможностями специальных процедур.

Ниже описываются стандартные средства модуля Graph для вывода текста.

Процедура OutText.

Выводит текстовую строку, начиная с текущего положения указателя. Заголовок:

Procedure OutText(Txt: String);

Здесь Txt - выводимая строка.

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

Процедура OutTextXY.

Выводит строку, начиная с заданного места. Заголовок:

Procedure OutTextXY (X,Y: Integer; Txt: String);

Здесь X, Y - координаты точки вывода; Txt - выводимая строка. Отличается от процедуры OutText только координатами вывода. Указатель не меняет своего положения.

Процедура SetTextStyle.

Устанавливает стиль текстового вывода на графический экран. Заголовок:

Procedure SetTextStyle(Font,Direct,Size: Word);

Здесь Font - код (номер) шрифта; Direct - код направления; Size - код размера шрифта.

Для указания кода шрифта можно использовать следующие предварительно определенные константы:

const

DefaultFont = 0;{Точечный шрифт 8x8}

TriplexFont = 1;{Утроенный шрифт TRIP.CHR}

SmallFont = 2;{Уменьшенный шрифт LITT.CHR}

SansSerifFont = 3;{Прямой шрифт SANS.CHR}

GothicFont = 4;{Готический шрифт GOTH.CHR}

Отметим, что эти константы определяют все шрифты для версий 4.0, 5.0, 5.5 и 6.0. В версии 7,0 набор шрифтов значительно расширен, однако для новых шрифтов не предусмотрены соответствующие мнемонические константы. В этой версии помимо перечисленных возможно при обращении к SetTextStyle использовать такие номера шрифтов:

Номер Файл Краткое описание
  scri.chr «Рукописный» шрифт
  simp.chr Одноштриховый шрифт типа Courier
  tscr.chr Красивый наклонный шрифт типа Times Italic
  Icom.chr Шрифт типа Times Roman
  euro. chr Шрифт типа Courier увеличенного размера
  bold.chr Крупный двухштриховый шрифт

Шрифт DefaultFont входит в модуль Graph и доступен в любой момент. Это -единственный матричный шрифт, т.е. его символы создаются из матриц 8x8 пикселей. Все остальные шрифты - векторные: их элементы формируются как совокупность векторов (штрихов), характеризующихся направлением и размером. Векторные шрифты отличаются более богатыми изобразительными возможностями, но главная их особенность заключается в легкости изменения размеров без существенного ухудшения качества изображения. Каждый из этих шрифтов размещается в отдельном дисковом файле. Если собираетесь использовать какой-либо векторный шрифт, соответствующий файл должен находиться в вашем каталоге, в противном случае вызов этого шрифта игнорируется и подключается стандартный.

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

Для задания направления выдачи текста можно использовать константы:

const

HorizDir = 0;{Слева направо}

VertDir = 1;{Снизу вверх}

Как видно, стандартные процедуры OutText и OutTextXY способны выводить сообщения лишь в двух возможных направлениях - слева направо или снизу вверх. Зная структуру векторных шрифтов, нетрудно построить собственные процедуры вывода, способные выводить сообщения в любом направлении.

Каждый шрифт способен десятикратно изменять свои размеры. Размер выводимых символов кодируется параметром Size, который может иметь значение в диапазоне от 1 до 10 (точечный шрифт - в диапазоне от 1 до 32). Если значение параметра равно 0. устанавливается размер 1, если больше 10 - размер 10. Минимальный размер шрифта. при котором еще отчетливо различаются все его детали, равен 4 (для точечного шрифта - 1).

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

Uses Graph, CRT;

const

FontNames: array [1..10] of String[4] =

('TRIP', 'LITT'' SANS ', ' GOTH ', 'SCRI ', ' SIMP ','TSCR ', ' LOOM ', ' EURO',' BOLD ');

Tabl = 50;

Tab2 = 150;

Tab3 =220;

var

d, r, Err,{Переменные для инициации графики}

Y,dY,{Ордината вывода и ее приращение}

Size,{Размер символов}

MaxFont,{Максимальный номер шрифта}

k: Integer;{Номер шрифта}

NT, SizeT, SynibT: String;{Строки вывода}

c: Char;

{-------------------}

Procedure OutTextWithTab (S1, S2, S3, S4: String);

{Выводит строки S1..S4 с учетом позиций табуляции Таb1..ТаbЗ}

begin

MoveTo((Tab1-TextWidth(Sl)) div2,Y);

OutText (S1);

MoveTo(Tabl+(Tab2-Tabl-TextWidth(S2)) div2,Y);

OutText (S2);

MoveTo(Tab2+(Tab3-Tab2-TextWidth(S3)) div 2,Y);

OutText(S3);

if S4='Symbols' then {Заголовок колонки Symbols}

MoveTo((Tab3+GetMaxX-TextWidth(S4)) div 2,Y)

else {Остальные строки}

MoveTo(Tab3+3,Y);

OutText(S4)

end;

{------------}

begin

{Инициируем графику}

InitGraph(d,r, ' ');

Err:= GraphResult; if ErrogrOk then

WriteLn(GraphErrorMsg(Err))

else

begin

{Определяем количество шрифтов:}

{$IFDEF VER70'}

MaxFont:= 10;.

{$ELSE}

MaxFont:= 4;

{$ENDIF}

SetTextStyle(l,0,4);

Y:= 0;

OutTextWi thTab('N','Name',Size','Symbols');

{Определяем высоту Y линии заголовка}

Y:= 4*TextHeight('Z') div3;

Line(0,Y,GetMaxX,Y);

{Определяем начало Y таблицы и высоту dY каждой строки}

Y:= 3*TextHeight('Z') div 2;

dY:= (GetMaxY-Y) div (MaxFont);

{Готовим строку символов}

SymbT:= '';

for с:= 'a' to 'z' do

SymbT:= SymbT+c;

{Цикл вывода строк таблицы}

for k:= 1 to MaxFont do

begin

Size:= 0;

{Увеличиваем размер до тех пор, пока высота строки не станет приблизительно равна dY}

repeat

inc(Size);

SetTextStyle(k,0,Size+1);

until (TextHeight('Z')>=dY) or (Size=10)

or (Textwidth(FontNames[k])>(Tab2-Tab1));

{Готовим номер NT и размер SizeT шрифта}

Str(k,NT);

Str(Size,SizeT);

{Выводим строку таблицы}

SetTextStyle(k,HorizDir,Size);

OutTextWithTab(NT,FontNames[k],SizeT,SymbT);

inc(Y,dY)

end;

{Рисуем линии рамки}

Rectangle(0,0,GetMaxX,GetMaxY);

Line(Tab1,0,Tabl,GetMaxY);

Line(Tab2,0,Tab2,GetMaxY);

Line(Tab3,0,ТаЬЗ,GetMaxY);

{Ждем инициативы пользователя}

ReadLn;

CloseGraph

end

end.

Процедура SetUserCharSize.

Изменяет размер выводимых символов в соответствии с заданными пропорциями. Заголовок:

Procedure SetUserCharSize(XI,X2,Yl,Y2: Word);

Здесь X1...Y2 - выражения типа Word, определяющие пропорции по горизонтали и вертикали.

Процедура применяется только по отношению к векторным шрифтам. Пропорции задают масштабный коэффициент, показывающий во сколько раз увеличится ширина и высота выводимых символов по отношению к стандартно заданным значениям. Коэффициент по горизонтали находится как отношение X1 к Х2, по вертикали - как отношение Y1 к Y2. Чтобы, например, удвоить ширину символов, необходимо задать X1=2 и Х2=1. Стандартный размер символов устанавливается процедурой SetTextStyle, которая отменяет предшествующее ей обращение к SetUserCharSize.

В следующем примере демонстрируется изменение пропорций уменьшенного шрифта.

Uses Graph, CRT;

var

d, r, e: Integer;

begin

{Инициируем графику}

d:= Detect;.InitGraph (d, r, '');

e:= GraphResult;

if e <> grOk then

WriteLn(GraphErrorMsg(e))

else

begin

MoveTo (0, GetMaxY div 2); SetTextStyle (SmallFont, HorizDir, 5);

SetTextJustify (LeftText, BottomText);

{Выводим сообщение стандартной высотой 5}

OutText ('Normal Width,');

{Удваиваем ширину шрифта}

SetUserCharSize (2, 1, 1, 1);

OutText (' Double Width, ');

{Удваиваем высоту, возвращаем стандартную ширину}

SetUserCharSize (I, 1, 2, 1);

OutText ('Double Height,');

SetUserCharSize (2, 1, 2, 1);

OutText (' Double Width and Height');

if ReadKey=#0 then d:= ord(ReadKey);

CloseGraph

end

end.

Функция TextWidth.

Возвращает длину в пикселях выводимой текстовой строки. Заголовок:

Function TextWidth (Txjt: String): Word;

Учитываются текущий стиль вывода и коэффициенты изменения размеров символов, заданные соответственно процедурами SetTextStyle и SetUserCharSize.

Функция TextHeight.

Возвращает высоту шрифта в пикселях. Заголовок:

Function TextHeight(Txt: String): Word;

Процедура GetTextSettings.

Возвращает текущий стиль и выравнивание текста. Заголовок:

Procedure GetTextSettins(var Textlnfo: TextSettingsType);

Здесь Textlnfo - переменная типа TextSettingsType, который в модуле Graph определен следующим образом:

type

TextSettingsType = record

Font: Word; {Номер шрифта}

Direction: Word; {Направление}

CharSize: Word; {Код размера}

Horiz: Word; {Горизонтальное выравнивание}

Vert: Word; {Вертикальное выравнивание}

end;

Функция InstallUserFont.

Позволяет программе использовать нестандартный векторный шрифт. Заголовок функции:

Function InstallUserFont(FileName: String): Integer;

Здесь FileName - имя файла, содержащего векторный шрифт.

Как уже говорилось, в стандартную поставку Турбо Паскаля версий 4.0 - 6.0 включены три векторных шрифта, для версии 7.0 - 10. Функция InstallUserFont позволяет расширить этот набор. Функция возвращает идентификационный номер нестандартного шрифта, который может использоваться при обращении к процедуре SetTextStyle.

Функция InstallUserDriver.

Включает нестандартный графический драйвер в систему BGI-драйверов. Заголовок функции:

Function InstallUserDriver(FileName: String; AutoDetectPtr: Pointer): Integer;

Здесь FileName - имя файла, содержащего программу драйвера; AutoDetectPtr - адрес точки входа в специальную процедуру автоопределения типа дисплея, которая в числе прочих процедур должна входить в состав драйвера.

Эта функция расширяет и без того достаточно обширный набор стандартных графических драйверов и предназначена в основном для разработчиков аппаратных средств.

Литература:

1. Зуев Е.А. Язык программирования Turbo Pascal 6.0, 7.0. М.: Радио и связь, 1993. – 380 с.

2. Зуев Е.А. Система программирования Turbo Pascal. М.: Радио и связь, 1992. - 288 с.

3. Информатика: Учебник. /Под ред. Н.В. Макаровой. – М: Финансы и статистика, 2001. – 768 с.

4. Информатика. Базовый курс/ Под ред. С.В. Симонович – СПб: Издательство «Питер», 2000. - 640 с.

5. Сидоров М. Е., Трушин О. В. Школа работы на IBM PC. Часть 2. Уфа, 1996. - 165 с.

6. Фараонов. Иллюстрированный самоучитель по Турбо Паскалю.

7. Голубь Н.Г., Кириленко Е.Г. Основы программирования и алгоритмические языки. Методические рекомендации по выполнению контрольных и лабораторных работ, часть 2. Харьков ХАИ. 1998, 49 с.

8. Абрамов С.А., Е.В.Зима. Начала информатики.
М.: “Наука”, 1989.

9. Гусева А.И.. Учимся программировать: PASCAL 7.0.
Задачи и методы их решения - М: “Диалог-МИФИ”, 1999.

10. Йенсен К., Вирт Н.. Паскаль: руководство для пользователя. пер. с англ. – М.: Компьютер, 1993.

11. Кетков Ю.Л. и др. Персональный компьютер: Школьная энциклопедия. М.: Большая Российская энциклопедия, 1998.

12. Культин Н.Б.. Программирование в Turbo Pascal 7.0 и Delphi. СПб.: БХВ – Санкт-Петербург, 1999.

13. Рюттен Т. Франкен Г. Турбо-Паскаль 7.0. –
К.: Торгово-издательское бюро BHV, 1997.

14. Фаронов В.В. Турбо Паскаль 7.0. Начальный курс.
М.: “Нолидж”, 1999.

15. Шауцукова Л.З. Информатика: Учеб. пособие для 10 – 11 кл. общеобразовательных учреждений / – М.:Просвещение, 2000.

16. Электронные вычислительные машины: В 8-ми кн.:
Учеб. пособие для вузов /Под ред. А.Я. Савельева. Кн. 5.
Языки программирования (Паскаль, ПЛ/М).
М.: “Высшая школа”, 1987.

17. Вирт Н. Алгоритмы и структуры данных: пер. с англ. - М.: Мир, 1985.

18. Информатика. Задачник-практикум в 2т./Под ред. И.Г. Семакина, Е.К. Хеннера: Том 1. – М.: Лаборатория Базовых Знаний, 1999.

19. Немнюгин С.А. Turbo Pascal. СПб: Питер, 2000.

20. Пильщиков В.Н. Сборник упражнений по языку Паскаль.
М.: “Наука”, 1989.

21. Попов В.Б. Turbo Pascal для школьников. М.: Финансы и статистика, 1999.

22. Прайс Д. Программирование на языке Паскаль: Практическое руководство. Пер. с англ. – М.: Мир, 1987.

 

 


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.016 сек.)