Uses Graph,F_GrText;
Var
D,R:Integer;
F:File;
Font:Pointer;
Begin
{График режимни инициализациялаймиз}
D:=Detect;
InitGraph(D,R,‘‘);
{Файлни очамиз}
Assign(F,‘8x16.fnt‘);
Reset(f,1);
{Динамик хотирани олиб қўямиз}
GetMem(Font,FileSize(F));
{Файлни хотирага ўқиб оламиз}
190
BlockRead(F,Font^,FileSize(F));
Close(F);
{Шрифтни рўйхатга оламиз}
SetFont(font,8,16);
{Киритиш/чиқаришнинг ностандарт драйверларини қўямиз}
GraphWriteOn;
…
Процедуранинг бажарилиши давомида матнли киритиш-чиқариш учун
экранни рухсат этиш имконияти қайта ҳисобланиши амалга оширилади. Бу
мақсад учун ички ўзгарувчи MaxChar (график экранда матнли қаторнинг
максимал узунлиги) ва MaxLine (матнли қаторларнинг максимал сони)
ҳисобланади. Ҳисоблашлар учун GetMaxX ва GetMaxY стандарт
функциялари қайтарадиган экраннинг график рухсат этиш имконияти
ишлатилади, шунинг учун процедурага мурожаатдан олдин адаптер
(мослагичнинг) график иш режими ўрнатилган бўлиши керак. Процедура
бажарилгандан сўнг олдин ўрнатилган матнли ойна ман этилади (агар у
Window процедураси ѐрдамида ўрнатилган бўлса) курсор эса экраннинг
юқори чап бурчагига ўтказилади. Рамзлар ва тагрангнинг жорий ранглари
ўзгармайди.
Таъкидлаш лозимки, рамзларнинг горизонтал кенглигини берувчи Х
параметр фақат MaxChar ни аниқлаш учун ишлатилади. Экранга доимий
чиқаришда ихтиѐрий рамзнинг кенглиги 8 пикселга тенг ҳисобланади (яъни
рамзларнинг нуқтали образи 8xH бит ҳажмли матрица орқали ҳисобланади).
Бундан ташқари, агар сиз Х ни 8 га тенг эмас деб ўрнатсайиз бу матнли ойна
чегараларига ва рамзларнинг киритилишига таъсир этади.
SetWindow процедураси ойнани ўрнатади, тозалайди ва рамка чизади.
Procedure
SetWindow(x1,y1,x2,y2,Border:Byte;
Header:String;Clip,Build,Play:Boolean);
Бу ерда x1…y2 – ойнанинг матнли координаталари; Border – рамка тури
(F_GrText модули XXXXBorder константаларига мос); Header – ойна
сарлавҳаси; Clip –қирқиш белгиси; Build параметри ойнани «яланг очиш» ни
бошқариш параметри; Play товуш кузатувини беради.
Ойнанинг юқори қисмида (Y1 қаторида) Header сарлавҳа чиқарилади;
агар сарлавҳа узунлиги x2-x1-2 дан ошса унинг ортиқча рамзлари олиб
ташланади; агар Header=‘‘ бўлса сарлавҳа чиқарилмайди. Clip=True бўлганда
янги тузилган ойна чегаралари рамкани ҳисобга олмасдан x1…y2 тўртбурчак
ички қисмига мос келади (яъни x1=x1+1,y1=y1+1, x2=x2+1, y2=y2+1), чунки
ойнада матннинг чиқарилиши уни бузиб юбормаслиги сабаб. Агар Build=True
бўлса, ҳудудларини аста-секин тўлдириб ойна «яланг очиш». Бунда агар
Play=True бўлса, ойнанинг очилиш жараѐни товуш сигнали билан кузатилади.
Scrolling процедураси. Берилган қатор сони бўйича юқори ѐки пастга
ойнани силжитади.
Procedure Scrolling(N:integer);
Бу ерда N-ойна силжиши керак бўлган қаторлар сони (бунда N<0 да
ойна пастга силжийди)
191
Агар N нинг абсолют қиймати ойна баландлигидан ошса ѐки N=0
бўлса, ойна тўлик тозаланади. Силжишдан сўнг курсор ўрни ўзгармайди.
TextBackGround процедураси. Рамзлар учун тагранг ўрнатилади.
Procedure TextBackground (Color:Byte);
Color параметри сифатида Graph модулида аниқланган ранглар
константаси мос ишлатилиши мумкин. Шуни айтиш керакки, фон рангини 0
раками билан ўрнатилиши рамзлар мавжуд кўриниш устига қўйилишини
билдиради, яъни тагранг пикселлари ўзгармайди. Бошқа ихтиѐрий рангни
ўрнатилиши тагранг пикселларини керакли ранг билан бўялишига олиб
келади, яъни чиқариш мавжуд график кўринишни йўқотади. Тагранги учун
қорамтир ҳамда очиқ турдаги ранглар ишлатилиши мумкин.
SetColor процедураси. Рамзлар рангини ўрнатади
Procedure SetColor(Color:Byte);
TextCooX функцияси. Берилган график координатада энг яқин матнли
горизонтал координатани қайтаради.
Function TextCooX(X:Integer):Byte;
Агар берилган график координата ойна горизонтал чегарасидан чиқиб
кетса, функция 0 қиймат қайтаради.
TextCooY функцияси. Берилган график координатада энг яқин матнли
вертикал координатани қайтаради.
Function TextCooY(Y:Integer):Byte;
Агар берилган график координата ойна вертикал чегарасидан чиқиб
кетса, функция 0 қайтаради.
WhereX функцияси. Горизонтал ҳолат бўйича матнли курсорни жорий
ҳолатини қайтаради.
Function WhereX:Byte;
Қайтариладиган координата ойнанинг чегарасига нисбатан аниқланади.
(агар ойна ўрнатилмаган бўлса, экран)
WhereY функцияси. Горизонтал ҳолат бўйича матнли курсорнинг
жорий ҳолатини қайтаради.
Function WhereY:Byte;
WhereY функцияси. Горизонтал ҳолат бўйича матнли курсорнинг
жорий ҳолатини қайтаради.
Window процедураси матнли ойнани ўрнатади.
Procedure Window(x1,y1,x2,y2:Byte);
Бу ерда x1,y1 – матнли координатанинг юқори чап бурчаги, x2,y2 эса
ойнанинг қуйи ўнг бурчаги. Координаталар ойнанинг чегараларига нисбатан
аниқланади.
Автоматик сижитишда курсор ойнанинг қуйи чегарасидан чиқиб
кетгандан ташқари барча ҳолатларда экранда ўрнатилган ойна матнли
режимдаги каби ўзини тутади.
Агар навбатдаги рамз ойнанинг ўнг қуйи бурчагига чиқарилиши керак
бўлса, силжитиш ўрнига чиқариш босиб кетилади.
192
RegisterCHRFile функцияси. Векторли шрифтни рўйхатдан ўтказади ва
OutString процедурасида кейинги ишлатишлар учун идентификацион
номерини қайтаради.
Function RegisterCHRFile(FileName: String):Integer;
Бу ерда FileName- рўйхатдан ўтадиган векторли шрифтнинг CHR
форматли файлининг номи.
Шрифтни рўйхатдан ўтказиш файлни сарлавҳасини текшириш ва
хотирага суришишлар жадвалини ва кенгликлар жадвалини юклашдан
иборат. Рўйхатдан ўтказиш омадли якунига етганда фукция мусбат сон-
шрифтнинг идентификацион номерини қайтаради, қайсики у OutString
процедурасига мурожаат этганда унинг параметрларидан бири сифатида
ишлатилади. Нормал бўлмаган ҳолатлар аниқланаганда функция манфий
қиймат қайтаради. Бу қийматлар қуйидагини билдиради:
-1-файлга мурожаатда хатолик (файлни очиб бўлмайди ѐки ундан
маълумотларни ўқишда хатолик юз беради)
-2-файл таркиби BGI-шрифт форматига мос эмас (файл сарлавҳасида
хатолик ѐки шрифт параметрларига файл узунлиги жавоб бермайди)
-3-шрифт ҳақида маълумотни жойлаштириш учун хотира мавжуд эмас
(бир шрифтни рўйхатдан ўтказиш учун 2 Кб дан ортиқрок динамик хотира
керак бўлади)
RegisterCHRFont функцияси. Векторли шрифтни рўйхатдан ўтказади ва
Outstring
процедурасида
кейинчалик
ишлатиш
мақсадида
уни
идентификацион номерини қайтаради.
Function RegisterCHRFont (Font:Pointer):Integer;
Бу ерда Font-олдин CHR-File ўқиб олинган тезкор хотира майдонини
манзили.
Бу функция RegisterCHRFont функциясига ўхшайди. Фақат бир
фарқи, унга мурожаат этилишидан олдин шрифт файлини шахсий
компьютернинг тезкор хотирасига ўқиб олиш керак. Бу функцияни
RegisterCHRFile функцияси ўрнига ишлатилиши бизга иккита ютуқни олиб
келади. Биринчидан, OutString процедураси билан чиқариш тезрок бўлади,
чунки векторли буйруқларни ўқиш учун дискка мурожаат бўлмайди.
Иккинчидан, сизнинг дастурингиз Graph модулида қўлланилгани каби ички
шрифтлар сингари компиляция бўлиши мумкин.Мисол, Trip.chr файлини
binobj trip.chrtrip.obj trip буйруғи билан ўтказишдан сўнг қуйидаги дастурни
ишлатиш мумкин:
0> Do'stlaringiz bilan baham: |