|
||||||||||||||||||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Вывод текстаОписываемые ниже стандартные процедуры и функции поддерживают вывод текстовых сообщений в графическом режиме. Это не одно и то же, что использование процедур 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 использовать такие номера шрифтов:
Шрифт 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. Абрамов С.А., Е.В.Зима. Начала информатики. 9. Гусева А.И.. Учимся программировать: PASCAL 7.0. 10. Йенсен К., Вирт Н.. Паскаль: руководство для пользователя. пер. с англ. – М.: Компьютер, 1993. 11. Кетков Ю.Л. и др. Персональный компьютер: Школьная энциклопедия. М.: Большая Российская энциклопедия, 1998. 12. Культин Н.Б.. Программирование в Turbo Pascal 7.0 и Delphi. СПб.: БХВ – Санкт-Петербург, 1999. 13. Рюттен Т. Франкен Г. Турбо-Паскаль 7.0. – 14. Фаронов В.В. Турбо Паскаль 7.0. Начальный курс. 15. Шауцукова Л.З. Информатика: Учеб. пособие для 10 – 11 кл. общеобразовательных учреждений / – М.:Просвещение, 2000. 16. Электронные вычислительные машины: В 8-ми кн.: 17. Вирт Н. Алгоритмы и структуры данных: пер. с англ. - М.: Мир, 1985. 18. Информатика. Задачник-практикум в 2т./Под ред. И.Г. Семакина, Е.К. Хеннера: Том 1. – М.: Лаборатория Базовых Знаний, 1999. 19. Немнюгин С.А. Turbo Pascal. СПб: Питер, 2000. 20. Пильщиков В.Н. Сборник упражнений по языку Паскаль. 21. Попов В.Б. Turbo Pascal для школьников. М.: Финансы и статистика, 1999. 22. Прайс Д. Программирование на языке Паскаль: Практическое руководство. Пер. с англ. – М.: Мир, 1987.
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.016 сек.) |