13 - Маъруза. Graph модули.
Режа.
Кириш.
Драйверлар, шрифтлар, видеорежимлар
Нукта , чи.зик, контур, ёй ва айланалар тасвири
Ранг, политра ва стилни бошкари
3.28Кириш
График тасвирларни экранда ифодалаш учун Turbo Pascal да GRAPH модули кулланилади. Унда 79 та процедура ва функциялар мавжуд.
GRAPH модули USES сузи оркали дастурга уланади:
USES Graph;
3.29Драйверлар
Графика драйверлари, стандарт драйверлар, фойдаланувчи драйверлари
Графика драйверлари куйидаги (. табл. 13.1) да келтирилган.
Табл. 13.1. Графика дайверлари
Драйвер
|
Адаптер
|
CGA.BGI
|
IBM CGA, MCGA
|
EGAVGA.BGI
|
IBM EGA, VGA
|
HERC.BGI
|
Hercules (mono)
|
ATT.BGI
|
AT&T 6300 (400 строк)
|
PC3270.BGI
|
IBM 3270 PC
|
IBM8514.BGI
|
IBM 8514
| 3.30Шрифтлар
Стандарт шрифтлар, фойдаланувчининг шрифтлари,
Матнларни графика режимларида чикариш стандарт ёки фойдаланивчининг шрифтлари оркали амалга оширилиши мумкин.
Табл. 13.2. Стандарт шифтлар
Шрифт
|
Файл
|
TriplexFont
|
TRIP.CHR
|
SmallFont
|
LITT.CHR
|
SansSerifFont
|
SANS.CHR
|
GothicFont
|
GOTH.CHR
|
Стандарт руйхат табл. 13.2 да келтирилган шрифтларни уз ичига олади .
3.31Видеорежимлар
Видеорежим, драйвер типи,
Драйвер типлари ва режимлари белгили константалар типада еки сонлар билан берилиши мумкин. Видеорежимлари аникловчи константлар табл. 13.3 да берилган.
Табл. 13.3. Видеорежимлар
Драйвер
|
Режим
|
Разрешение
|
Файл
|
CGA (1)
|
CGAC0, CGAHi
|
320x200 (640x200)
|
CGA.BGI
|
EGA (3)
|
EGALo, EGAHi
|
640x200 (640x350)
|
EGAVGA.BGI
|
VGA (9)
|
VGALo, VGAHi
|
640x200 (640x350)
|
EGAVGA.BGI
|
HERC (8)
|
HERCMONOHI
|
720x348
|
HERC.BGI
|
3.32Видеорежимни инициализациялаш
InitGraph, GetDriverName, GetGraphMode, GetModeRange, DetectGraph,
GetMaxMode, SetGraphMode, RestoreCRTMode, видеостраница, активная видеостраница, видимая видеостраница, SetActivePage SetVisualPage, GraphResult, GraphErrorMsg
Биринчи навбатда график режимлардан бирортасини урнатувчи InitGraph процедураси чакирилади:Ёзилиши
InitGraph(VAR DriverVar, ModeVar: integer; PathToDriver: string);
DriverVar и ModeVar узгариувчилари драйвер ва режимларнинг 13.3 таб. да келтирилган кийматларини беради.
Масалан: DriverVar := VGA; ModeVar := VGALo;
Дисплей типини билмаган фойдаланувчилар учун Detect стандарт константаси мавжуд. Агарда бу киймат DriverVar параметри билан узлаштирилган булса:
DriverVar := Detect;
у холда InitGraph автоматик равишда керакли драйверни инициаллаб, дисплей учун керакли режимни урнатади.
Учинчи парметр PathToDriver - GRAPH модулига маршрут урнатади.
USES Crt, Graph;
VAR
DriverVar, ModeVar: integer;
BEGIN
DriverVar := Detect;
InitGraph(DriverVar, ModeVar, '');
Графика режимни CloseGraph процедураси ердамида епилади.
Матн режимидан графика режимига утиш алгоритми куйидаги фрагментда кусатилган:
USES
Crt, Graph;
VAR
DriverVar, ModeVar: integer;
BEGIN
ClrScr;
Writeln('Текстли режим');
...
DriverVar:= Detect;
InitGraph(DriverVar,ModeVar,'');
OutTextXY(300,250,'Графика режими')
...
RestoreCRTMode;
Writeln(' 1-Матн режими');
...
SetGraphMode(ModeVar);
OutTextXY(300,250,' 1-Графика режими')
... CloseGraph
END.
Видио буфернинг хотираси бир нечта булимларга булинади . Уларни видеобетлар дейилади. Бетлар тартиб номери 0 дан бошланади..
Табл. 13.4. Видобетлар режими
Драйвер
|
Номер
|
Режим
|
Номер
|
Разрешение
|
Ранг
|
Бетлар
|
EGA
|
3
|
EGALO
|
0
|
640x200
|
16
|
4
|
|
|
EGAHI
|
1
|
640x350
|
16
|
2
|
VGA
|
9
|
VGALO
|
0
|
640x200
|
16
|
4
|
|
|
VGAMED
|
1
|
640x350
|
16
|
4
|
HERC
|
7
|
HERC-
|
0
|
720x348
|
2
|
2
|
|
|
MONOHI
|
|
|
|
|
Хар бир алохида моментда экранда бир бет тасвирланиши мумкин ва у куринувчи деб аталади. Берилган моментда тасвир акс эттирилган бет актив бет дейилади.
Видеобетлар билан ишлаш учун иккита процедура кулланилади: SetActivePage ва SetVisualPage .
Процедура SetActivePage(Page: word) процедураси актив бетни урнатади. Масалан:
SetActivePage(1);
Бетни ташкиллаб булгандан сунг, уни SetVisualPage(Page : word) процедураси ёрамида экранда курсатиш мумкин.
бу ерда Page - куринадиган бет тартиб раками
Масалан:
SetActivePage(0); {0 бетни экранда курсатиш }
OutText(' 0 - бет'); { экранда катор пайдо булади }
SetActivePage(1); {1- актив бет }
OutText('Страница 1'); { ! - бетда тасвирни шакллананиши, }
{ Лекин экранда катор йук ! }
Readln;
SetVisualPage(1); {1 - бетни курсатиш, экранда катор}
Графика дастурларида хам бошка дастурлардаги каби хатоликлар булиши мумкин.
Бундай хатоликларни аниклаш чун куйидаги иккита функциядан фойдаланилади: GraphResult и GraphErrorMsg.
GraphResult: Integer - бу функция, агарда хатолик булса ,0 кийматни акс холда-15..-1 диапозондаги сонларни кайтаради.
Мисол:
USES Graph;
VAR
ErrorNumber: integer;
BEGIN
ErrorNumber:= GraphResult;
Экранда тасвирни куриш учун координаталар ситемасидан фойдаланилади. Хисоб экран координатаси (0,0) булган юкори чап бурчакдан бошланади..
Тасвирни куриш учун , хеч булмаганда тавир чикариш бош нуктасини курсатиб утиш зарур. Матнли режимда бу вазифани курсор бажаради.Графика режимида кусор булмайди, лекин куринмас жорий курсатгич бор CP (Current Pointer), бу худди уша курсор, лекин у куринмайди.
Матнли режимларда курсорни GoToXY процедураси ёрдамида жойлаштириш силжитиш мумкин, графика режимларида эса Ср ни жойлаштирш учун бир нечта процедура ва функциялар мавжуд. Биринчи навбатда бу MoveTo и MoveRel.
MoveTo (X,Y: Integer)
Бу процедура жорий курсатгични Х,Y координатали нуктага жойлаштиради (силжитади). Масалан, MoveTo(200,100) процедураси СР ни 200,100 координатали нуктага жойлаштиради .
MoveRel (dX, dY: Integer)
Процедураси CP ни горизонтал буйича dX нуктага, вертикал буйича dY нуктага урнатади. MoveRel(5,10) процедураси эса Ср ни 200,100 координатали нуктадан 205,110 координатали нуктага жойлаштиради.
Жорий курсатгични назорат килиб бориш учун GetX ва GetY лардан фойдаланилади.
Масалан:
VAR
Xpos, Ypos: integer;
...
Xpos := GetX;
Ypos := GetY;
...
GetMaxX: integer и GetMaxY: integer,
X- ва Y-координаталарини режим учун мос булган максимал кийматларини кайтаради. Масалан:
X := 6000/10;
Y := 2000/2;
IF ((X > GetMaxX) OR (Y > GetMaxY)) THEN BEGIN
Write('!- диапазонни бузилганлиги!');
MarginHadling {хатларни тузатиш учун фойдаланувчи процедураси}
END;
MoveTo(I,J);
Матнли режилардаги каби графика экранини хам битта катта дарча ёки бир -нечта кичик дарчалар деб караш мумкин. Эслатиб утамиз, дарча бу экраннинг тугри бурчакли области булиб, тула экран фукцияларини бажаради. Дарча урнатилгандан сунг ,экран йук деб фараз килиниб, хамма киритиш чикариш операциялари шу дарчада бажарилади.
Экрандаги хамма тасвирларни учириш учун параметрларга эга булмаган ClearDevice рпоцедураси кулланилади.
SetViewPort(x1,y1,x2,y2: integer; Clip: boolean) процедураси эса , дарчаларни ташкил килади;
бу ерда x1, y1 - чап тепа бурчак координаталари, x2, y2 - унг паст бурчак координаталари. Clip параметри тасвир дарча чегарасига сигмаган пайтда ,тасвир кесилиб коладими (Clip:= True) ёки йукми (Clip:= False) лигини аниклайди.
Дарчани тозалаш учун ClearViewPort процедураси кулланилади.
Жорий дарча атрибутлари куйидаги процедура ёрдамида урнатилади:
GetViewSettings(VAR Vp : ViewPortType).
Vp узгарувчи ViewPortType нинг стандарт типига киради:
TYPE
ViewPortType = RECORD
x1, y1, x2, y2 : integer;
Clip : boolean
END;
Шуни ёдда саклаш керакки, матнли дарчалардан фарклирок, график дарча фонни урнатиш SetBkColor ва тозалаш ClearViewPort командалари урнатилгандан сунг фонни экраннинг умумий фони билан биргаликда узгартиради. Шунинг учун график дарчани (аникроги "буяшни") SetFillStyle ва etFillPattern. процедураси ёрдамида урнатилади. Тугри бурчакни Bar процедураси ёрдамида курилади
SetViewPort(100,50,500,200,True);
SetFillStyle(1,3); { фон типини танлаш}
Bar(100,50,500,200); { берилган фнли туги бурчак}
Do'stlaringiz bilan baham: |