Программалау тілдері оқулық Қазақстан Республикасы Білім жəне ғылым министрлігі бекіткен Алматы, 2011



Pdf көрінісі
бет13/24
Дата03.12.2019
өлшемі1,6 Mb.
#52901
түріПрограмма
1   ...   9   10   11   12   13   14   15   16   ...   24
Байланысты:
Программалау учебник


165
   HercMonoHi = 0; {720 x 348}
   { АТТ400 адаптері: }
   АТТ400СО = 0; { CGACO режимінің аналогі}
   АТТ400С1 = 1; { CGAC 1 режимінің аналогі }
   АТТ400С2 = 2; { CGAC 2 режимінің аналогі }
   АТТ400СЗ = 3; { CGAC 3 режимінің аналогі }
   ATT 400 Med = 4; { CGAHi режимінің аналогі }
   АТТ400Н1 = 5; {640 x 400, 2 түс}
   { VGA адаптері: }
   VGALo = 0; {640 x 200}
   VGAMed = 1; {640 x 350}
   VGAHi = 2; {640 x 480}
   PC 3270 H 1 = 0; (HercMonoHi аналогі }
   { 1ВМ8514 адаптері }
   IBM 8514 LO = 0; {640x480, 256 түс}
   IBM 8514 H 1 = 1; {1024x768, 256 түс} 
Мысалы, драйвер CCA.BGI С дискісінің ТР\ВGI каталогында 
жəне 320x200 2 палитра жұмыс режимін орнату керек. Онда 
процедураны іске қосу төмендегідей түрде болады:
Uses Graph;
var
   Driver, Mode : Integer;
begin
   Driver := CGA; {Драйвер }
   Mode := CGAC2; {Жұмыс режимі }
   InitGraph(Driver, Mode, ‘C:\TP\BGI’);
...... 
Егер компьютер адаптері белгісіз жəне программа кез келген 
адаптермен жұмыс жасауға бейімделген болса, онда процедураны 
драйвер типін автоматты анықтау түрінде іске қосу керек:
Driver := Detect;
InitGraph (Driver, Mode, ‘C:\TP\BGI’); 
Процедура осы тəсілмен іске қосылса, экран графикалық 
режимге қосылады, ал процедурадан шығар кезде Driver жəне 
Mode айныма 
лылары, драйвердің типін жəне жұмыс режимін 
анықтайтын, бүтін санды мəндерге ие болады. Бірнеше режимде 
жұмыс істей алатын мүмкіндігі бар адаптерлер үшін ең жоғарғы 

166
режим алынады. Мəселен, CGA адаптері үшін Driver= Detect мəні 
Detect айнымалысына 1 (ССА) мəнін қайтарады жəне Mode мəні 
– 4 (CGAHi), ал VGA адаптері үшін Driver = 9 (VGA) жəне Mode 
= 2 (VGAHi) болуы тиіс.
GraphResult функциясы графикалық процедуралардың соңғы 
іске қосылуының нəтижесі жазылған Integer типтегі мəнді қай-
тарады. Егер қате болмаса, функция мəні – нөл, кері жағдайда – 
төмендегідей мəні бар теріс сан болады:
const
   grOk =0; {Қате жоқ }
   grInitGraph =-1; {Графикалық режим іске қосылған жоқ }
   grNotDetected =-2; {Драйвер типі анықталмаған }
   grFileNotFind =-3; {Графикалық драйвер табылмады }
   grInvalidDriver =-4;{Драйвер типі дұрыс емес}
   grNoLoadMem =-5; { Жадыда драйверді орналастыруға орын 
жоқ }
   grNoScanMem =-6; { Жадыда аумақтарды қарауға орын жоқ }
   grNoFloodMem =-7; { Жадыда аумақтарды бояуға орын жоқ }
   grFontNotFound =-8; {Қаріп жазылған файл табылмады }
   grNoFontMem =-9; { Жадыда қаріпті орналастуға орын жоқ }
   grlnvalidMode =-10; {Графикалық режим дұрыс емес }
   grError =-11; {Жалпы қате }
   grIOError =-12;{Енгізу-шығару қатесі}
   grInvalidFont =-13;{Қаріп форматы дұрыс емес}
   grInvalidFontNum =-14; {Қаріп нөмірі дұрыс емес} 
GraphResult функциясы іске қосылған соң, қате белгісі алынып 
тасталады, қайта іске қосылғанда функция мəні нөлге тең болады.
GraphErrorMsg функциясы көрсетілген қате коды бойынша 
соған сəйкес мəтіндік мəлімет жазылған String типті мəнді береді. 
Функция тақырыбының жазылуы:
Function GraphErrorMsg(Code: Integer):String
мұндағы Code – GraphResult функциясына қайтарылатын қате 
коды.
Мысалы, драйвер типін автоматты түрде анықтап, ең жоғарғы 
мүмкіндікті режимді іске қосуға арналған операторлар тізбегінің 
түрі:
var

167
   Driver, Mode, Error : Integer;
begin    Driver := Detect ; {Драйверді автоматты анықтау }
   InitGraph(Driver, Mode, ‘’); {графиканы іске қосу }
   Error := GraphResult; {Нəтиже алу }
   if Error <> grOk then { Қатені тексеру}
         begin {Іске қосу процедурасындағы қате}
              WriteLn (GraphErrorMsg(Error) ); {Мəлімет шығарамыз }
               ......
         end
         else {Қате жоқ}
   ...... 
InitCraph процедурасын іске қосқанда, қате көбіне графика-
лық адаптер драйвері жазылған файлдың қайда орналасқанды-
ғын дұрыс көрсетпегендіктен болады (мысалы, CGA.BCI файлы 
CGA адаптері үшін). Драйверді баптау ісі InitGraph процедура-
сын шақырғанда, драйвер атында жазылған қажет файлды іздеу 
маршрутын көрсетуден басталады. Мысалы, егер драйвер D 
дискісінің PASCAL каталогының DRIVERS ішкі каталогында 
орналасқан болса, шақыру мынадай түрде жазылу керек:
InitGraph(Driver, Mode, ‘d:\Pascal\Drivers’); 
Ескерту. Бұдан кейінгі мысалдардың барлығында InitGraph 
процедурасының Driver параметрі бос жол түрінде шақырылады. 
Мұндай шақыру формасы тек қажет графикалық файл ағым-
дағы каталогта орналасқанда ғана дұрыс болып саналады. Мы-
салдардың қайталануын жеңілдету үшін өз компьютеріңіздің 
адап теріне сəйкес файлды ағымдағы каталогқа көшіріп қоюыңыз 
қажет. 
CloseGraph  процедурасы адаптердің графикалық режимдегі 
жұмысын аяқтап, мəтіндік режим жұмысын қалпына келтіреді. 
Процедура тақырыбы:
Procedure CloseGraph;
RestoreCRTMode  процедурасы қысқа мерзімге мəтіндік ре-
жимге ауысуды іске асырады. Оның CloseGraph процедурасынан 
ерекшелігі – графикалық режимнің орнатылған параметрлерін 
алып тастап, графикалық драйверді орналастыруға бөлінген 
жады көлемін босатпайды. Процедура тақырыбы:
Procedure RestoreCRTMode; 
GetGraphMode функциясы графикалық адаптер жұмысы ре-

168
жимі нің коды жазылған integer типті мəнді қайтарады. Функция 
тақырыбы:
Function GetGraphMode: Integer; 
SetGraphMode  процедурасы адаптердің жаңа графикалық 
жұмыс режимін тағайындайды. Процедура тақырыбы:
Procedure SetGraphMode(Mode: Integer); 
Мұндағы Mode – орнатылатын режим коды.
Келесі программа графикалық режимнен мəтіндік жұмыс 
режиміне жəне керісінше ауысуды жүзеге асырады:
Uses Graph;
var
   Driver, Mode, Error: Integer;
begin
   {Графикалық режимді іске қосамыз}
   Driver := Detect;
   InitGraph(Driver, Mode, '');
   Error:= GraphResult; {Нəтижені есте 
сақтаймыз}
   if Error<>grOk then {Қатені тексереміз}
      WriteLn (GraphErrorMsg(Error)) {Қате 
бар}
   else
      begin {Қате жоқ}
         WriteLn('Бұл графикалық режим');
         WriteLn('»Enter»пернесін 
басыңыз...':20);
         ReadLn;
         {Мəтіндік режимге ауысамыз}
         RestoreCRTMode;
         WriteLn ('Бұл мəтіндік режим,...');
         ReadLn;
         {Графикалық режимге қайтып ораламыз}
         SetGraphMode (GetGraphMode);
         WriteLn('Бұл тағы да графикалық ре-
жим...');
         ReadLn;
         CloseGraph
      end
end. 

169
Бұл мысалда мəліметтерді шығару үшін графикалық режим-
де де, мəтіндік режимде де стандартты WriteLn процедурасы 
қолданылады. Егер сіздің компьютеріңіз қазақ (орыс) алфавитін 
қолдамайтын СGА адаптерімен жабдықталған болса, онда 
графикалық режимде оларды шығару мүмкін емес. Сондықтан 
мəліметтердің барлығын латын əріптерімен жазу керек.
DetectGraph процедурасы драйвер типі мен жұмыс режимін 
қайтарады. Процедура тақырыбы:
Procedure DetectGraph(var Driver,Mode: Integer); 
Мұндағы Driver –драйвер типі; Mode – жұмыс режимі.
CetGraphMode функциясынан ерекшелігі – бұл процедура 
Mode айнымалысына қолданылып отырған адаптер графикалық 
режимінің ең үлкен мəнін қайтарады. 
GetDriverName функциясы жүктелген драйвер аты жазылған 
String типті мəнді қайтарады. Функция тақырыбы:
Function GetDriverName: String; 
GetMaxMode  функциясы адаптердің жұмыс режимдерінің 
саны жазылған Integer типті мəнді қайтарады. Функция тақырыбы:
Function GetMaxMode: Integer; 
GetModeName  функциясы нөмірі бойынша адаптердің жұ-
мыс режимі жəне экран мүмкіндіктері жазылған String типті мəн-
ді қайта рады. Функция тақырыбы:
Function GetModName(ModNumber: Integer): String; 
мұндағы ModNumber – режим нөмірі.
Келесі программа графикалық режим іске қосылғаннан кейін, 
экранға жүктелген драйвер аты жəне оның жұмыс режимдері 
жайлы мəліметтер шығарады. 
Uses Graph;
var
   a,b: Integer;
begin
   a := Detect;
   InitGraph (a, b, ‘’);
   WriteLn (GetDriverName);
   for a := 0 to GetMaxMode do
      WriteLn(GetModeName(a):10);
   ReadLn;

170
   CloseGraph
end. 
GetModeRange  процедурасы. Берілген графикалық адап тер -
дің жұмыс режимдерінің диапазонын қайтарады. Процедура та-
қырыбы:
Procedure GetModeRange(Drv: Integer; var Min, Max: Integer);
мұндағы Drv – адаптер типі; Min – ең төменгі режим нөмірі 
қайта рылатын, Integer типті айнымалы; Мах – ең жоғарғы режим 
нөмірі қайтарылатын integer типті айнымалы.
Егер Drv параметрінің мəні дұрыс көрсетілмесе, онда проце-
дура екі айнымалыға да –1 мəнін қайтарады. Процедураны 
шақырар алдында экранның графикалық жұмыс режимін ор-
натпаса да болады. Келесі программа экранға барлық адаптер-
лердің атын жəне жұмыс режимдерінің нөмірін шғарады. 
Uses Graph;
var
   D,L,H: Integer;
const
   N:array [1..11] of String [8]=
      (‘CGA’, ‘MCGA’, ‘EGA’,
      ‘EGA64’, ‘EGAMono’, ‘IBM8514’,
      ‘HercMono’, ‘ATT400’, ‘VGA’,
      ‘PC 3270’, ‘Қате’);
begin
   WriteLn(‘Адаптер Мин. Макс.');
   for D:=1 to 11 do
      begin
         GetModeRange(D, L, H);
         WriteLn(N[D], L:7, H:10)
      end
end.
  7.3 Сызықтармен, нүктелермен жəне фигуралармен 
жұмыс істеу
Көптеген графикалық процедуралар мен функциялар экран 
курсо 
ры 
ның ағымдағы позициясын қолданады. Графикалық 
режимнің экран курсо 
ры 
ның мəтіндік редактор курсорынан 

171
ерекшелігі, ол экранда көрінбейді. Экран көрсеткішінің пози-
циясы кез келген экрандағы координата тəрізді сол жақ жоғарғы 
бұрышқа байланысты беріледі. Сол жақ жоғарғы бұрыштың ко-
ординатасы – 0,0. Сонымен, экранның көлденең координатасы 
солдан оңға, ал тік координатасы – жоғарыдан төмен қарай өседі.
GetMaxX  жəне GetMaxY функциялары экранның ағымда-
ғы режимнің көлденең жəне тік максимальды координаталары 
жазылған Word типті мəнді қайтарады. Мысалы:
Uses Graph;
var
   a,b: Integer;
begin
   a:= Detect;
   InitGraph(a, b,’’);
   WnteLn(GetMaxX, GetMaxY:5);
   ReadLn;
   CloseGraph
end. 
GetX  жəне GetY функциялары экран курсорының ағымдағы 
көлденең жəне тік координаталары жазылған integer типті мəнді 
қайтарады. Координаталар терезенің сол жақ жоғарғы бұрышына 
байланысты анықталады. Егер мəлімет шығарылатын терезе 
орнатыл маса, онда координаталар экранның сол жақ жоғарғы 
бұрышынан бастап есептеледі.
SetViewPort процедурасы графикалық экранда төртбұрышты 
тере зе орнатады. Процедура тақырыбы:
Procedure SetViewPort(XI,Y1,X2,Y2: Integer; ClipOn: Boolean); 
мұндағы X1... Y2 – терезенің сол жақ жоғарғы (X1, Y1) жəне 
оң жақ төменгі (X2, Y2) бұрыштарының координаталары; ClipOn 
– экрандағы бейненің кішіреймейтін элементінің “қиылатын” 
бөлігін анықтайтын Boolean типті өрнек.
Терезе координатасы əр уақытта экранның сол жақ жоғарғы 
бұрышына байланысты анықталады. Егер ClipOn параметрінің 
мəні True болса, бейненің терезе шекарасына симайтын эле-
менттері қиып тасталынады, кері жағдайда терезе шекарасы 
ескерілмейді. Бұл параметрді басқару үшін, модульде арнайы 
тұрақтыларды қолдануға болады:

172
const
       ClipOn = True ; {Қиып тастауды қосу}
       ClipOff = False ; { Қиып тастауды қоспау } 
Келесі мысал СlipОn параметрінің қызметін көрсетеді. Про-
грамма СlipОn параметрінің мəні əртүрлі, екі тікбұрышты тере-
зе жəне олар дың ішіне бірнеше дөңгелек салады. Көрнекі болуы 
үшін терезелер жақтауларға алынады (7.1-сурет).
Uses Graph,CRT;
var
   x,y,e: Integer;
   x11, y11, x12, y12, {1-ші терезе координа-
тасы}
   x21, x22, {2-ші терезенің сол жақ жоғарғы 
бұрышы}
   R, {Бастапқы радиус} k: Integer;
begin
   DirectVideo:=False; {CRT модулінде 
бейнежадыға тікелей қол жеткізуді алып тастай-
мыз}
   {Графикалық режимді іске қосамыз}
   х:= Detect;
   InitGraph(x, у, ' ');
   {Нəтижені тексереміз}
   е:= GraphResult;
   if e <> grOk then
      WnteLn (GraphErrorMsg (e)) {Қате}
   else
      begin {Қате жоқ}
{Экран мүмкіндіктеріне байланысты координата-
ларды есептейміз}
         x11:= GetMaxX div 60;
         х12:= GetMaxX div 3;
         y11:= GetMaxY div 4;
         y12:= 2*y11;
         R:= (x12-x11) div 4;
         x21:= x12*2;
         x22:= x21+x12-x11;
{Тезезе саламыз}

173
         WriteLn('ClipOn:':10,'ClipOff:':40);
         Rectangle(x11, y11, x12, y12);
         Rectangle(x21, y11, x22, y12);
{1-терезені белгілеп, оның ішіне төрт дөңгелек 
саламыз}
         SetViewPort{x11, y11, x12, y12, 
ClipOn);
         for k := 1 to 4 do
            Circle(0,y11,R*k) ;
{2-терезені белгілеп, оның ішіне дөңгелек са-
ламыз}
         SetViewPort(x21, y11, x22, y12, 
ClipOff);
         for k := 1 to 4 do
            Circle(0,y11,R*k);
{кез келген перненің басылуын күтеміз}
         if ReadKey=#0 then k := ord(ReadKey);
         CloseGraph
      end
end. 
GetViewSettings  процедурасы ағымдағы графикалық тере-
зенің координатасы мен қиып тастау белгісін қайтарады. Проце-
дура тақырыбы:
Procedure GetViewSettings(var ViewInfo: ViewPortType);
мұндағы Viewlnfo – ViewPortType типті айнымалы. Бұл тип 
Graph модулінде төмендегідей анықталған:
type
   ViewPortType = record
      xl,yl,x2,y2: Integer; {Терезе координа-
тасы}
      Clip: Boolean {Қиып тастау белгісі}
   end; 
MoveTo процедурасы курсордың жаңа орнын тағайындайды. 
Процедура тақырыбы:
Procedure MoveTo(X,Y: Integer); 
мұндағы X, Y – курсордың, сəйкесінше, жаңа көлденең жəне тік 
коор ди наталары.

174
MoveRel  процедурасы курсордың жаңа орнын салыстырма-
лы координаталар арқылы тағайындайды. Процедура тақырыбы:
Procedure MoveRel(DX, DY: Integer); 
мұндағы DX, DY – курсордың, сəйкесінше, жаңа көлденең жəне 
тік координаталарының өсімшесі.
Өсімше курсордың процедураны шақыруға дейін тұрған 
орнына байланысты беріледі.
ClearDevice  процедурасы графикалық экранды тазалайды. 
Про це дура шақырылғаннан кейін курсор экранның сол жақ бұ-
рышына орналасады, ал экранның өзі SetBkColor проце 
дура-
сында анықталған фон түсіне боялады. Процедура тақырыбы:
Procedure ClearDevice; 
ClearViewPort процедурасы графикалық терезені тазалайды, 
ал егер осы уақытқа дейін терезе анықталмаса, онда экранды 
тазалайды. Терезе тазаланғанда, ол ағымдағы палитраның 0 
нөміріне боялады. Курсор сол жақ жоғарғы бұрышқа орналасады. 
Процедура тақырыбы:
Procedure ClearViewPort; 
Келесі мысалда экранда терезе салынады да, ол кездейсоқ 
дөңгелектермен толтырылады (7.2-сурет). Кез келген пернені 
7.1-сурет. Терезедегі бейнелердің қиындылары

175
басқан кезде терезе тазаланады. Программадан шығу үшін Enter 
пернесін басыңыз.
Uses CRT,Graph;
var
   x1,y1,x2,y2,Err: Integer;
begin
   {Графикалық режимді іске қосамыз}
   xl := Detect;
   InitGraph(xl,x2,'');
   Err:= GraphResult;
   if ErrOgrOk then
      WriteLn (GraphErrorMsg(Err))
   else
      begin
{Экран мүмкіндігіне байланысты терезе коорди-
натасын анықтаймыз}
         x1:= GetMaxX div 4;
         y1:= GetMaxY div 4;
         x2:= 3*x1;
         y2:= 3*y1;
{Терезе саламыз}
         Rectangle(x1,y1,x2,y2);
         SetViewPort(xl+l,yl+l,x2-l,y2-
1,ClipOn);
{Терезені кездейсоқ дөңгелектермен толтырамыз}
         repeat
      Circle (Random (GetMaxX)), Random 
(GetMaxX),
            Random (GetMaxX div 5));
         until KeyPressed;
{Терезені тазалап, Enter пернесінің басылуын 
күтеміз}
         ClearViewPort;
         OutTextXY (0,0, 'Press Enter …' )
         ReadLn
         CloseGraph
      end
end. 

176
GetAspectRatio  процедурасы экран жақтауларының қаты-
насын бағалауға мүмкіндік беретін екі санды қайтарады. Про-
цедура тақырыбы:
Procedure GetAspectRatio(var X,Y: Word); 
мұндағы X, Y – Word типті айнымалылар. Бұл айнымалыларға 
қайтарылатын мəндер, графикалық экран жақтауларының қаты-
насын пикселмен есептеуге мүмкіндік береді. Осы айныма лылар 
арқылы табылған коэффициентті дөңгелек, квадрат, т.с.с. дұрыс 
геометриялық фигураларды салуда қолдануға болады. Мысалы, 
егер тік жақтауы L пикселге тең квадрат салу керек болса, 
мынадай операторларды қолдану қажет:
GetAspectRatio (Xasp, Yasp);
Rectangle(x1, y1, x1+L*round (Yasp/Xasp), y1+L); 
Ал егер L квадраттың көлденең ұзындығын анықтайтын 
болса, онда мынадай операторды қолданамыз:
Rectangle(x1,y1,x1+L,y1+L*round(Xasp/Yasp)); 
SetAspectRatio  процедурасы графикалық экран жақтау лары-
ның масштабтық қатынас коэффициентін анықтайды. Процедура 
тақырыбы:
Procedure SetAspectRatio(X,Y: Word); 
мұндағы X, Y – жақтаулардың тағайындалатын қатынасы.
 7.2-сурет. Кездейсоқ шеңберлер жиыны

177
Келесі программа, экран жақтауларының қатынасы əртүрлі 20 
дөңгелек салады (7.3-сурет).
7.3-сурет. Экран жақтауларының қатынасы əртүрлі дөңгелектер
Uses Graph,CRT;
const
   R=.50;
   dx=1000;
var
   d,m,e,k: Integer;
   Xasp,Yasp: Word;
begin 
   d:=Detect;
   InitGraph(d, m,.’’);
   e:=GraphResult;
if e <> grOk then
      WriteLn(GraphErrorMsg(e))
   else
      begin
         GetAspectRatio(Xasp, Yasp);
         for k:=0 to 20 do
            begin
               SetAspectRatio(Xasp+k*dx,Yasp);
12–1618

178
         Circle(GetMaxX div 2,GetMaxY div 2,R)
            end;
         if ReadKey=#0 then k:= ord(ReadKey);
         CloseGraph
      end
end. 
SetActivePage  процедурасы бейнежадының көрсетілген па-
рағын екпінді етеді. Процедура тақырыбы:
Procedure SetActivePage(PageNum: Word); 
Мұндағы PageNum – парақ нөмірі.
Процедура көппарақты жұмысты қолдайтын адаптерлер мен 
(EGA, VGA жəне т.с.с.) жұмыс істейді. Нақты түрде, процедура 
графикалық шығарылымды бейнежадының басқа ауданына 
жібереді, алайда мəтінді Write/WriteLn операторларының көме-
гімен тек осы мезетте көрініп тұрған парақта шығаруға болады 
(екпінді терезе көрінбеуі мүмкін). Парақтар нөмірі нөлден бас-
талады.
SetVisualPage процедурасы нөмірі берілген парақты көрінетін 
етеді. Процедура тақырыбы:
Procedure SetVisualPage(PageNum: Word); 
мұндағы PageNum – парақ нөмірі.
Процедура көппарақты жұмысты қолдайтын адаптерлермен 
(EGA, VGA жəне т.с.с.) жұмыс істейді. Парақтар нөмірі нөлден 
басталады.
Келесі программа алдымен көрінетін парақта квадрат салады, 
көрінбейтін парақта дөңгелек салады. Enter пернесін басқаннан 
кейін көрінетін парақ ауысады.
Uses Graph;
var
   d,m,e: Integer;
   s: String;
begin
   d:= Detect;InitGraph(d, m, ‘’);
   e:= GraphResult;
if e <> grOk then
   WriteLn (GraphErrorMsg(e))

179
else {Қате жоқ. Драйвердің бейнежадымен 
көппарақты жұмыс істейтіндігін тексереміз:}
   if d in [HercMono,EGA,EGA64,MCGA,VGA] then
      begin{Көппарақты режимді қолданамыз}
         if d<>HercMono then
            SetGraphMode(m-1);
         {Көрінетін парақты толтырамыз}
      Rectangle(10,10,GetMaxX div 2,GetMaxY 
div 2);
         OutTextXY(0,0,’Page 0. Press En-
ter...’);
         {Көрінбейтін парақты толтырамыз}
         SetActivePage (1);
         Circle(GetMaxX div 2, GetMaxY div 2, 
100);
  OutTextXY(0,GetMaxY-10,’Page 1. Press En-
ter...’);
         {Парақтарды көрсетемі}
         ReadLn;
         SetVisualPage(1);
         ReadLn;
         SetVisualPage (0);
         ReadLn;
         CloseGraph
      end
   else
      begin {Драйвер көппарақты режимде жұмыс 
істемейді}
         s:= GetDriverName;CloseGraph;
         WriteLn(‘Адаптер ',s,' тек 1 парақты 
режимді қолдайды’);
      end
end. 
If d <> HercMono then SetGraphMode (m-1); операторына 
көңіл аударыңыз. Бұл оператодың көмегімен EGA, MCGA, VGA 
адаптерлерінде көппарақты режимді кепілді түрде орнатуға 

180
болады. Жоғарыда айтылғандай, графикалық режим Driver = 
Detect арқылы іске қосылғаннан кейін, адаптердің ең жоғары 
нөмірлі жұмыс режимі орнатылады. Аталған адаптерлер тек 
бір графикалық парақпен жұмыс жасай алады. Ал екі парақпен 
жұмыс істеуді қамтамасыз ету үшін, режим нөмірін кішірейту 
керек.
Сызықтар жəне нүктелер
PutPixel  процедурасы көрсетілген координаталарда берілген 
түс пен нүкте салады. Процедура тақырыбы:
Procedure PutPixel( Х / У : Integer/ Color: Word)/ 
мұндағы X, Y – нүкте координаталары; Color – нүкте түсі.
Координаталар терезенің немесе экранның сол жақ жоғарғы 
бұрышқа байланысты беріледі.
Келесі программа экранға “жұлдызды аспанды” шығарады 
жəне оны өшіреді. Программадан шығу үшін кез келген пернені 
басыңыз.
Uses CRT, Graph;
type
   Pixeltype = record 
   x,у:Integer;end; 
const
   N=5000;{ “Жұлдыз” саны}
var 
   d,r,e,k: Integer; 
   x1,y1,x2,y2: Integer;
   a: array [1..N] of 
Pixeltype;{Координаталар} 
begin 
   {Графиканы іске қосамыз}
   d:= Detect;InitGraph(d, r,’’); 
   e:= GraphResult;
   if e<>grOk then 
      WriteLn(GraphErrorMsg(e))
   else
      begin 
         {Экран ортасында терезе саламыз}


Достарыңызбен бөлісу:
1   ...   9   10   11   12   13   14   15   16   ...   24




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет