7.4 Түстерді басқару
SetColor процедурасы шығарылатын түзулер мен символ-
дардың ағымдағы түсін тағайындайды. Тақырыбы:
Procedure SetColor(Color: Word);
мұндағы Color – ағымдағы түс.
Graph модулінде, түстерді беру үшін дəл CRT модуліндегідей
тұрақтылар анықталған.
GetColor функциясы ағымдағы түс коды жазылған Word типті
мəнді қайтарады. Тақырыбы:
199
Function GetColor: Word ;
GetMaxColor функциясы SetColor процедурасында қолдануға
болатын ең жоғарғы түс коды жазылған Word типті мəнді
қайтарады. Тақырыбы:
Function GetMaxColor: Word;
SetBkColor процедурасы. Фон түсін орнатады. Тақырыбы:
Procedure SetBkColor(Color: Word)
мұндағы Color – фон түсі.
Фоны тек қара түсті бола алатын мəтіндік режимге қарағанда,
графикалық режимде фон кез келген түсте болуы мүмкін. Жаңа
фон түсін орнату, бірден графикалық экран түсін өзгертеді. Бұл
бір бейненің екі бөлігінің фон түсі екі түрлі болмайтындығын
білдіреді. CGA – адаптері үшін, жоғары мүмкіндікті режимде фон
түсін орнату, екпінді пикселдер түсін өзгертеді. Сіз фон түсін 0
( Black) өзгеше кез келген түске ауыстырғаннан кейін, 0 түсті қара
түс ретінде қолдана алмайсыз. Себебі, Graph модулі 0 түсті фон
түсі ретінде қабылдайды да, 0 түсті фон түсіне алмастырылады.
Сонымен, егер сіз фон түсін қарадан басқа түске ауыстырсаңыз,
бастапқы қара түсті қайтара алмайсыз!
Егер сіздің компьютеріңіз түсті экранмен жабдықталған
болса, онда келесі программа SetBkColor процедурасының жұ-
мысын көрнекі түрде көрсетеді. Программа бірінің ішіне бірі
салынған он тікбұрыштар салады да, фонның түсін ауыстырады.
Программадан шығу үшін кез келген пернеге басыңыз.
uses Graph, CRT;
const
NC:array [0..15]of String[12]=
('Black','Blue','Green','Cyan','Red','Magenta',
'Brown','LightGray','DarkGray','LightBlue',
'LightGreen1,'LightCyan1,'LightRed',
'LightMagenta','Yellow','White');
var
d,r,e,k,color,dx,dy: Integer;
begin
{Графиканы іске қосамыз}
d:=Detect; InitGraph(d,r,'');
200
e:=GraphResult;
if e <> grOK then
WriteLn(GraphErrorMsg(e))
else
begin
{Экран ортасына мəтін шығарамыз}
OutTextXY(200,GetMaxY div 2,'BACKGROUND
COLOR');
dx:=GetMaxX div 30; {Ұзындықтың өсімшесі}
dy:=GetMaxY div 25; {Биіктіктің өсімшесі}
for k:=0 to 9 do{ 10 тікбұрыш шығарамыз}
Rectangle(k*dx,k*dy,GetMaxX-k*dx,GetMaxY-
k*dy);
color:=black; {Фонның бастапқы түсі}
repeat {Фонды өзгерту циклі}
SetBkColor(color);
SetBkColor(color);
SetFillStyle(0,Color);
SetBkColor(color);
Bar(345,GetMaxY div 2,440,GetMaxY div
2+8);
SetBkColor(color);
OutTextXY(345,GetMaxY div 2,NC[color]);
SetBkColor(color);
delay(1000);
SetBkColor(co
lor);
inc(color);
if color > White then
color:=Black
until KeyPressed;
if ReadKey=#0 then
k:=ord(ReadKey);
CloseGraph
end
end.
GetBkColor функциясы ағымдағы фон түсі жазылған, Word
типті мəнді қайтарады. Тақырыбы:
Function GetBkColor: Word;
201
SetPalette процедурасы палитраның бір түсін жаңа түске
ауыстырады. Тақырыбы:
Procedure SetPalette (N: Word; Color: Shortlnt);
Мұндағы N – палитрадағы түс нөмірі; Color – жаңа
орнатылатын түс нөмірі.
Бұл процедура тек EGA немесе VGA адаптерлерімен жұмыс
жасай алады. Ол IBM 8514 немесе 256 – түсті VGA адаптерінде
қолданылмайды, бұл адаптерлер үшін ерекше SetRGBPatette
процедурасы бар. EGA/VGA адаптерлеріне палитраның түстерінің
бастапқы орналасуы олардың тұрақтылармен сипатталу ретіне
сəйкес келеді: 0 – қара, 1 – көк, 2 – жасыл жəне т.с.с. Процедура
іске қосылғаннан кейін бейненің, палитра түстерінің N индексті
түсімен салынған фрагменттері Color түсіне ие болады. Мысалы,
SetPalette (2, White) операторы орындалғаннан кейін, 2 индексті
түс (бастапқыда бұл – күлгін түс, Cyan) ақ түске ауыстырылады.
Нөмірі 0 түс, фон түсі болып саналады жəне ол да кез келген түс
сияқты өзгере алады.
Келесі программа экранға түрлі түсті түзулерді шығарып,
олардың түсін кездейсоқ түске ауыстырады
uses Graph, CRT;
var
d,r,e,N,k,color: Integer;
Palette: PaletteTyper;
begin
{Графиканы іске қосамыз}
d:=Detect; InitGraph(d,r,’’);
e:=GraphResult;
if e <> grOK then
WriteLn(GraphErrorMsg(e))
else
begin
{Қалың, біркелкі сызықтарды таңдаймыз}
SetLineStyle(SolidLn, 0, ThickWidth);
GetPalette(Palette); {Ағымдағы палитра}
for Color:=0 to Palette.Size-1 do
begin
SetColor(Color);
14–1618
202
Line(GetMaxX div 3,Color*10,2*GetMaxX
div 3,Color*10)
end;
{Палитраны өзгертіп, тұтынушы əрекетін
күтеміз}
while not KeyPressed do
for e:=0 to Palette.Size-1 do
SetPalette(e,Random(Palette.
Size));
if ReadKey=#0 then d := ord(ReadKey);
CloseGraph
end
end.
GetPalette процедурасы ағымдағы палитраның көлемі мен
түсін қайтарады. Тақырыбы:
Procedure GetPalette ( var Palettelnfo: PaletteType)
мұндағы Palettelnfo – палитраның көлемі мен түсін қайтаратын,
Palette Type типті айнымалы.
Graph модулінде келесі тұрақты анықталған.
const
MaxColors =15;
жəне оның типі де анықталған:
type
PaletteType = record
Size : Word; {Палитрадағы түстер саны}
Colors : array [0..MaxColors] of Shortlnt
{Палитраға кіретін түстер нөмірі }
end;
Келесі программа көмегімен экранға ағымдағы палитраның
барлық түстерінің нөмірін шығаруға болады.
uses Graph;
var
Palette: PaletteType;
d,r,e,k: Integer;
begin
{Графиканы іске қосамыз}
203
d:=Detect; InitGraph(d,r,’’);
e:=GraphResult;
if e <> grOk then
WriteLn(GraphErrorMsg(e))
else
begin
GetPalette(Palette); {Палитраны
аламыз}
CloseGraph; {Мəтіндік режимге
ораламыз}
with Palette do {Түстер нөмірін
шығарамыз}
for k:=0 to pred(Size) do
Write(Colors[k]:5);
end
end.
SetAllPalette процедурасы палитраның бірнеше түстерін бір
мезгілде өзгертеді. Процедура тақырыбы:
Procedure SetAllPalette (var Palette);
Palette параметрі процедура тақырыбында типтік емес па-
раметр ретінде сипатталған. Бұл параметрдің бірінші байтында
N палитра ұзындығы, қалған N байттар – (–1) мен MaxColors
аралығындағы жаңадан орнатылатын түстер нөмірі. (–1) коды
бастапқы палитраның сəйкес түсі өзгермейтіндігін білдіреді.
Келесі программада палитраның барлық түстері бір мезгілде
өзгереді.
uses Graph, CRT;
var
Palette: array [0..MaxColors] of Shortint;
d,r,e,k: Integer;
begin
{Графиканы іске қосамыз}
d:=Detect; InitGraph(d,r,'');
e:=GraphResult;
if e <> grOk then
WriteLn(GraphErrorMsg(e))
204
else
begin
{Қалың, біркелкі сызықтарды таңдаймыз}
SetLineStyle(SolidLn, 0, ThickWidth);
{Сызықтарды қол жеткізуге болатын барлық
түстермен шығарамыз}
for k:=1 to GetMaxColor do
begin
SetColor(k);
Line(GetMaxX div 3,k*10,2*GetMaxX div
3,k*10)
end;
Palette[0]:=MaxColors; {Палитра көлемі}
repeat {Палитраны ауыстыру цикл}
for k:=1 to MaxColors do
Palette[k]:=Random(succ(MaxCoLors));
SetAllPalette(Palette)
until KeyPressed;
if ReadKey=#0 then k:=ord(ReadKey);
CloseGraph
end
end.
GetPaletteSize функциясы палитра көлемі (қол жеткізуге бо-
латын түстердің максимальді саны) жаылған Integer типті мəнді
қайтарады. Тақырыбы:
Function GetPaletteSize: Integer;
GetDefaultPalette процедурасы үнсіз келісім бойынша орна-
ты латын палитра құрылымын қайтарады (автобаптау режимінде).
Тақырыбы:
Procedure GetDefaultPalette(var Palette: PaletteType);
мұндағы Palette –палитра көлемі мен түстері қайтарылатын Pal-
etteType типті айнымалы.
SjetFillStyle процедурасы толтыру стилін орнатады (тип жəне
түс) заполнения. Тақырыбы:
Procedure SetFillStyle (Fill,Color: Word);
мұндағы Fill – толтыру типі; Color – толтыру түсі.
205
Толтыру арқылы бейненің қандай да бір фрагментін өрнек-
термен қайталап салып отыруға болады. Толтыру типін көрсеті
үшін келесі алдын ала анықталған тұрақтылар қолданылады:
const
EmptyFill = 0; {Фон түсімен толтыру (өрнек жоқ)}
SolidFill = 1; {біркелкі толтыру}
LineFill = 2; { ------- толтыру}
LtSlashFill = 3; { /////// толтыру}
SlashFill = 4; {Қалыңдалған /// толтыру}
BkSlashFill = 5; { Қалыңдалған \\\ толтыру}
LtBkSlashFill = 6; { \\\\\\\ толтыру}
HatchFill = 7; { +++++++ толтыру}
XHatchFill = 8; { ххххххх толтыру}
InterleaveFill= 9; {Тікбұрышты клеткалармен толтыру}
WideDotFill = 10; {Сирек нүктелермен толтыру}
CloseDotFill = 11; { Жиі нүктелермен толтыру }
UserFill = 12; {Өрнек түрін тұтынушы анықтайды}
Келесі мысал программасы сіздерге стандартты толтыру
типтерін көрсетеді.
uses Graph, CRT;
var
d,r,e,k,j,x,y: Integer;
begin
{Графиканы іске қосамыз}
d:=Detect; InitGraph(d,r,'');
e:=GraphResult;
if e <> grOk then
WriteLn(GraphErrorMsg(e))
else
begin
x:=GetMaxX div 6;{Графиктің экрандағы
орны}
у:=GetMaxY div 5;
for j:=0 to 2 do{Екі қатар}
for k:=0 to 3 do{төрт квадраттан}
begin
Rectangle((k+1)*x,(j+1)*y,(k+2)*x,(j+2)*y);
SetFillStyle(k+j*4,j+1);
206
Bar((k+1)*x+1,(j+1)*y+1,(k+2)*x-
1,(j+2)*y-1);
end;
if ReadKey=#0 then k:=ord(ReadKey);
CloseGraph
end
end.
Егер Fill параметрінің мəні 12 ( UserFill) болса, онда өрнек
суретін программист SetFillPattern процедурасын шақыру ар-
қылы өзі анықтайды .
SetFillPattern процедурасы сурет үлгісін жəне штрихтау түсін
анықтайды. Тақырыбы:
Procedure SetFillPattern(Pattern: FillPatternType; Color: Word);
мұндағы Pattern – SetFillStyle процедурасында Fill = UserFill
үшін сурет үлгісін анықтайтын FillPatternType типті өрнек ; Color
– толтыру түсі.
Сурет үлгісі 8x8 пикселден тұратын матрица түрінде беріледі
жəне төмендегідей типтегі 8 байт жиым түрінде де берілуі мүмкін:
type
FillPatternType = array [1..8] of Byte;
Осы байттардың кез келген разрядтары пикселдің жануын
басқарады. Бірінші байт экранның бірінші жолының 8 пикселін,
екінші байт – екінші жолдың 8 пикселін жəне т.с.с.
7.9-суретте толтырудың екі үлгісінің мысалы келтірілген.
Суретте сызықшамен жанбайтын пиксел, ал тіктөртбұрышпен
жанатын пиксел белгіленген. Əр 8 пикселге сəйкес байттың
оналтылық коды келтіріледі.
Келесі программа осы үлгімен экранның екі тікбұрышты
ауданын толтырады.
uses Graph, CRT;
const
pattl: FillPattern-
Type=($49,$92,$49,$92,$49,$92,$49,$92);
patt2: FillPattern-
Type=($00,$18,$24,$42,$42,$24,$18,$00);
var
207
d,r,e: Integer;
begin
{Графиканы іске қосамыз}
d:=Detect; InitGraph(d,r,’’);
e:=GraphResult;
if e <> grOk then
WriteLn(GraphErrorMsg(e))
else
begin
if d=CGA then SetGraphMode (0);
{CGA адаптері үшін түстерді орнатамыз}
SetFillStyle(UserFill,White);
{Сол жақ жоғарғы квадрат}
SetFillPattern(Patt1,1);
Bar(0,0,GetMaxX div 2, GetMaxY div 2);
{Оң жақ төменгі квадрат}
SetFillPattern(Patt2,2);
Bar(GetMaxX div 2,GetMaxY div
2,GetMaxX,GetMaxY);
if ReadKey=#0 then d:=ord(ReadKey);
CloseGraph
end
end.
7.9-сурет. Толтыру үлгілері жəне олардың кодтары
Егер процедураны шақырғанда түс коды дұрыс көрсетілмесе,
онда процедура іске қосылмайды да, осыған дейін орнатылған
толтыру үлгісі сақталады. Алдыңғы мысалда, CGA –адаптерінің
жұмыс режи мін орнататын
208
if d=CGA then SetGraphMode (о);
алып тастасақ, осы адаптермен жабдықталған компьютер экра-
нына бірдей екі тікбұрыш салынады. Себебі,
SetFUlPattern (patt2,2);
операторында ағымдағы режим үшін мүмкін емес түс коды
жазылған, сондықтан оператор орындалмайды. Бұл айтылғандар
SetFillStyle процедурасына қатысты емес. Бұл процедураның
Fill параметрі 0 мен 11 диапазонындағы мəндерді қабылдайды:
программа CGA – адаптерінің жоғарғы режимінде де дұрыс
жұмыс істейтін болады, фон түсінен басқа палитра түстері ақ
түске ауыстырылады.
GetFillPattern процедурасы SetFillPattern процедурасы
орнат қан толтыру үлгісін қайтарады. Тақырыбы:
Procedure GetFillPattern(var Pattern: FillPatternType);
мұндағы Pattern – толтыру үлгісі қайтарылатын, FillPattem-
Type типті айнымалы.
Егер программа үлгіні SetFillPattern процедурасының кө-
мегімен орнатпаса, Pattern жиымы мəні 255 ($FF) байттармен
толтырылады.
GetFillSettinqs процедурасы ағымдағы толтыру стилін қай-
тарады. Тақырыбы:
Procedure GetFillSettinga(var Pattlnfo: FillSettingsType);
мұндағы Pattlnfo – ағымдағы толтыру стилі қайтарылатын,
FillSettingsType типті айнымалы.
Graph модулінде келесі тип анықталған:
type
FillSettingsType = record
Pattern: Word; {Үлгі}
Color : Word {Түс}
end;
Бұл жазбадағы Pattern жəне Color өрістерінің мəні, SetFillStyle
процедурасын шақырғандағы сəйкес параметрлердегідей.
SetRGBPalette процедурасы IBM 8514 VGA адаптерімен жұ-
мыс жасайтын түстер гаммасын тағайындайды. Тақырыбы:
Procedure SetRGBPalatte(ColNum,RedVal, GraenVal,BlueVal:
Integer);
мұндағы ColNum – түс нөмірі; RedVal, GreenVal, BlueVal –
209
сəйкесінше, қызыл, жасыл жəне көк түстердің қоюлығын анық-
тайтын Integer типті өрнек.
Келесі программада экран ортасына ақ түсті тікбұрыш салы-
нады да, ол SetRGBPalette процедурасының көмегімен кездей соқ
түстерге боялады . Программадан шығу үшін кез келген пернеге
басыңыз.
uses Graph,CRT;
var
Driver,Mode,Err,xl,yl: Integer;
begin
{Графиканы іске қосамыз}
Driver:=Detect;
InitGraph(Driver,Mode,’’);
Err:=GraphResult;
if ErroO then
WriteLn(GraphErrorMsg(Err))
else if Driver in [IBM8514, VGA] then
begin
{Экран ортасына тікбұрыш саламыз}
x1:=GetMaxX div 4;
y1:=GetMaxY div 4;
SetColor(lS);
Bar(x1,y1,3*x1,3*y1);
{Ақ түсті кездейсоқ түске ауыстырамыз}
while not KeyPressed do
SetRGBPalette(15,Random(256),Random(
256),Random(256));
CloseGraph
end
else
begin
CloseGraph;.
WriteLn(‘Адаптер түстерді
басқарудың’,’RGB-режим қолдамайды’);
end
end.
FloodFill процедурасы ағымдағы толтыру стилін (өрнек жəне
түс) қолданып, тұйық фигураның ішін бояйды. Тақырыбы:
Procedure FloodFill(X,Y: Integer; Border: Word);
210
мұндағы X, Y – тұйық фигураның ішіндегі кез келген нүкте
координатасы; Border – шекара сызығының түсі.
Егер фигура тұйық болмаса, онда бүкіл экран боялады.
Процедурадағы тұйық фигураның шекарасын қарау алгоритмі-
нің жетік емес екендігін есте сақтау керек. Егер қатарынан екі бос
жол шығарылатын болса, онда бояу тоқтатылады. Мұндай жағдай
көбіне LtSlashFill типін қолданып, кішігірім фигураны бояғанда
пайда болады. Турбо Паскаль тілінің фирмалық нұсқауларында
FloodFill процедурасының орнына, мүмкіндігінше, FillPoly про-
цедурасын қолдануға кеңес берілген.
Келесі программа кездейсоқ дөңгелектер ішін бояуды көр-
сетеді. Алдымен экранда терезе салынып, оның ішінде тікбұ-
рышты бояйды. Тікбұрыштың жартысы боялмай қалады, себебі
программа жұмысын тоқтатып, Enter пернесінің басылуын кү-
теді. Сонан кейін, экранға кездейсоқ дөңгелектер салынып, кез
келген перне басылғанша боялады. Егер LtSlashFill типінің ор-
нына SlashFill типі қолданылса, тікбұрыш толығымен боялады.
Егер программа өте ұзақ жұмыс істейтін болса, ол тұрып қалуы
мүмкін, бұл көрсетілген алгоритмнің жетік еместігін дəлелдейді.
uses Graph, CRT;
var
d,r,е,х,у,с: Integer;
begin
{Графиканы іске қосамыз}
d:=Detect; InitGraph(d,r,'');
e:=GraphResult;
if e <> grOk then WriteLn(GraphErrorMsg(e))
else
begin
{Терезе саламыз}
х:=GetMaxX div 4;
у:=GetMaxY div 4;
Rectangle(х,у,3*x,3*y);
SetViewPort(x+1,y+1, 3*x-1,3*y-
1,ClipOn);
{Кішкене тікбұрыштың боялуын
көрсетеміз }
211
SetPillStyle(LtSlashFill,GetMaxColor);
Rectangle(0,0,8,20);
FloodFill(1,1,GetMaxColor);
OutTextXY(10,25,'Press Enter...');
ReadLn; { Enter пернесінің басылуын
күтеміз}
{Кез келген перне басылғанша дөңгелектер са-
ламыз}
repeat
{Кездейсоқ бояу стилін анықтаймыз}
SetFillStyle(Random(12),Random(GetMaxCol
or+1));
{Дөңгелектің центрінің координатасы мен түсін
береміз}
х:=Random (GetMaxX div 2);
у:=Random (GetMaxY div 2);
с:=Random (succ(GetMaxColor));
SetColor(c);
{Дөңгелекті шығарып, бояймыз}
Circle(x, у,Random(GetMaxY div 5));
FloodFill (x,у,с);
until KeyPressed;
if ReadKey=#0 then
x:=ord(ReadKey);
CloseGraph;
end
end.
Bar процедурасы экранның тікбұрышты аймағын бояйды.
Тақырыбы:
Procedure Bar (X1,Y1,X2,Y2: Integer);
мұндағы X1…Y2 – боялатын ауданның сол жақ жоғарғы ( X1,
Y1) жəне оң жақ төменгі ( X2, Y2) бұрыштарының координатасы.
Процедура тікбұрышты SetFillStyle процедурасында тағайын-
дал ған ағымдағы өрнек үлгісімен жəне түспен бояйды (шекара-
сын сызбайды) .
Келесі программа əдемі түстер эффектін көрсетеді (кездей
соқ тікбұрыштарды бояу).
212
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
{Экран ортасында терезе саламыз}
d:=GetMaxX div 4;
r:=GetMaxY div 4; Rectangle(d,r,3*d,3*r);
SetViewPort(d+1,r+1,3*d-1,3*r-1,ClipOn);
{Кездейсоқ тікбұрыштарды салып, бояу циклы}
repeat
SetFillStyle(Random(12),Random(succ(GetMaxColor)));
Bar(Random(Ge tMaxX),Random(Ge tMaxY),
Random(Ge tMaxX),Random(Ge tMaxY));
until KeyPressed;
if ReadKey=#0 then d:=ord(ReadKey);
CloseGraph
end
end.
ВаrЗD процедурасы. Кеңістікте параллепипед салып, оның
ал дыңғы жағын бояйды. Тақырыбы:
Procedure Bar3D (XI,Y1,X2,Y2,Depth: Integer; Top: Boolean);
мұндағы X1...Y2 – параллепипедтің алдыңғы жағының сол жақ
жоғарғы (X1, Y1) жəне оң жақ төменгі (Х2, Y2) бұрыштарының
координатасы; Depth – кеңістіктегі бейненің пикселмен берілген
үшінші өлшемі («тереңдігі»); Tор – жоғарғы жағының бейнелену
тəсілі.
Егер Тор параметрінің мəні True болса, онда параллелепипед-
тің жоғарғы беті сызылады, кері жағдайда сызылмайды (бұл
жағдай бірінің үстіне бірі қойылған параллелепипедтер үшін
қолданылады). Бұл параметрдің мəні ретінде Graph модулінде
анықталған келесі тұрақтылардың бірін қолдануға болады:
213
const
TopOn = True;
TopOff = False;
Сызу кезінде ағымдағы түзу стилі ( SetLineStyle) жəне түс ( Set-
Color) қолданылады. Алдыңғы жақ ағымдағы толтыру стилімен
боялады ( SetFillStyle).
Процедура көбіне бағаналық диаграмма салғанда қолда ны-
лады. Параллелепипедтің боялмаған жақтарынан бейненің басқа
элементтері көрініп тұрады.
Келесі программа Bar3D процедурасын қолданудың түрлі
мүмкіндіктерін көрсетеді .
uses Graph,CRT;
var
d,r,e: Integer;
begin
{Графиканы іске қосамыз}
d:=Detect;
Ini-tGraph(d,r,'');
e:=GraphResult;
if e <> grOk then
WriteLn(GraphErrorMsg(e));
else
begin
{Жоғарғы жағы бар бағана:}
Bar3D (80, 100, 120, 180, 15, TopOn);
{Жоғарғы жағы жоқ бағана:}
Ваг3D (150, 150, 190, 180, 15,
TopOff);
{Бұл бағана келесі бағана үстінде тұр, ол
түссіз:}
Bar3D (230, 50, 250, 150, 15, TopOn);
Bar3D (220, 150, 260, 180, 15, TopOn);
{Бұл бағананың жоғарғы жағы жоқ, сондықтан ол
үстіне қойылған бағанаға кедергі жасамайды:}
Bar3D (300, 150, 340, 180, 15, TopOff);
SetLineStyle(3,0,1);
SetColor(Yellow);
|