Canvas парағында сурет салу
Қарындаш қасиеттері
TPen объектісі карындаш қасиеттері үшін жауап береді. Оның келесідей қасиеттері бар:
Handle – мұнда API функциялар үшін ғана арналған қарындаш сипаттамалары бар.
Mode – Көрсету режимі, түзудің қалай сызылатынын көрсетеді.
Style – қарындаш стилі. Келесідей стильдері бар:
psSolid – тұтас сызық;
psDash – үзік сызық;
psDot – нүстелерден тұратын сызық;
psDashDot – қысқа сызықтар мен нүктелердің кезектесуі;
psDashDotDot - қысқа сызықтар мен екі нүктелердің кезектесуі;
psClear – көрінбейтін сызық;
psInsideFrame – форманың ішіндегі сызық. Тұтас сызыққа ұқсайды.
Width – қарындаш ені.

Тәжірибелік жұмыс
Жаңа жоба құрып, оның OnPaint қасиетіне келесі кодты жазыңыз:
procedure TForm1.FormPaint(Sender: TObject);
begin
//Тұтас сызық сызамыз (psSolid)
Canvas.Pen.Style:=psSolid;
Canvas.MoveTo(10,20);
Canvas.LineTo(200,20);
// psDash сызығын саламыз
Canvas.Pen.Style:=psDash;
Canvas.MoveTo(10,40);
Canvas.LineTo(200,40);
// psDot сызығын саламыз
Canvas.Pen.Style:=psDot;
Canvas.MoveTo(10,60);
Canvas.LineTo(200,60);
// psDashDot сызығын саламыз
Canvas.Pen.Style:=psDashDot;
Canvas.MoveTo(10,80);
Canvas.LineTo(200,80);
// psDashDotDot сызығын саламыз
Canvas.Pen.Style:=psDashDotDot;
Canvas.MoveTo(10,100);
Canvas.LineTo(200,100);
// psClear сызығын саламыз
Canvas.Pen.Style:=psClear;
Canvas.MoveTo(10,120);
Canvas.LineTo(200,120);
// psInsideFrame сызығын саламыз
Canvas.Pen.Style:=psInsideFrame;
Canvas.MoveTo(10,140);
Canvas.LineTo(200,140);
end;
Оның нәтижесін көреміз:

Бұл мысалда алдымен, біз сызылатын сызықтың стилін таңдап алдық: Canvas.Pen.Style:=psSolid.
Содан кейін қарындашты сызық басталатын нүктеге апарамыз: Canvas.MoveTo(Х, Y)
Енді сызықты сызу үшін LineTo(X, Y) әдісін қолданамыз. Оның парамерлері ретінде оның соңғы координаттарын аламыз.
Бірінші сызықты сызып болғаннан кейін, 20 пикселге төмен түсеміз де, екінші сызықты сызуды бастаймыз.
Енді біздің бағдарламамызға қарындаштың түсін өзгерту мүмкіндігін қосамыз. Бұл үшін формаға «Түсті өзгерту» батырмасын және Dialogs қосымшасынан ColorDialog компонентін тастаңыз. ColorDialog компоненті түсті таңдаудың стандартты диалогын көрсету үшін арналған.
Ол формада пиктограммасы бар квадтар түрінде көрінеді, ал жобаны жүктегенде көрінбейді.

Батырманың OnClick оқиғасына келесі кодты жазамыз:
if ColorDialog1.Execute then
Canvas.Pen.Color:=ColorDialog1.Color;
FormPaint(nil);
Бірінші жолда біз түсті таңдау терезесін кескіндейміз (ColorDialog1.Execute). Егер қолданушы түсті таңдаса, яғни «Отмена» батырмасына баспаса, онда терезе true мәнін қайтарады, сондықтан біз, терезені көрсету нәтижесі true-ге тең бе екенін тексереміз, солай болса, онда түсті өзгертеміз:
if ColorDialog1.Execute then
Холст түсін өзгертеміз.
ColorDialog1 компонентінің таңдалған түстін нәтижесі Color қасиетіне жазылады. Осы біз қарындаш түсіне Canvas.Pen.Color меншіктейміз.
Бұдан соң тек суретті қайта салу ғана қалды. Ол үшін форманың OnPaint оқиға өңдеушісін шақыру керек. Бізде өңдеуші FormPaint деп аталады, біз соны шақырдық.
Бағдарламаны жүктеп, нәтижесін көруге болады.
Енді түзу қалыңдығын өзгерту мүмкіндігін жасайық. Ол үшін Win32 қосымшасынан
UpDown компонентін тастайық.
Осы компоненттің OnClick оқиғасына келесі кодты жазамыз:
procedure TForm1.UpDown1Click(Sender: TObject; Button: TUDBtnType);
begin
Canvas.Pen.Width:=UpDown1.Position;
Repaint;
end;
UpDown компоненті екі батырмадан тұрады – жоғарғысы ішкі санағышты арттырады, төменгісі азайтады. Санағыштың ағымдағы мәнін Position қасиетінен оқуға болады. Осы мәнді қарындаштың еніне меншіктейміз.
Бұдан соң Repaint әдісін шақырамыз. Бұл әдіс терезенің ішіндегіні қайта салу керек деген оқиғаны генерациялайды. Бұл дегеніміз, автоматты түрде OnPaint оқиғасы шақырылады.
Қылқалам қасиеттері
Кисть қасиеттері үшін Tcanvas объектісінің Brush қасиеті жауап береді. Ол да объектілік тип болып табылады, яғни өз қасиеттері мен әдістері бар.
TBrush объектісінің кисть параметрлеріне жауап беретін бірнеше қасиеттері бар:
Bitmap – бояу фоны ретінде қолданылатын сурет. Суреттің форматы 8х8 пиксель болуы тиіс.
Келесі кодты жазыңыз:
var
Bitmap: TBitmap;
begin
Bitmap := TBitmap.Create; //Сурет құрылады
try
Bitmap.LoadFromFile('MyBitmap.bmp'); //Сурет жүктеледі
Form1.Canvas.Brush.Bitmap := Bitmap; //Фон ретінде меншіктеледі
Form1.Canvas.Rectangle(0,0,100,100); // Квадрат салынады
finally
Form1.Canvas.Brush.Bitmap := nil; // Фон нөлденеді
Bitmap.Free; // Сурет жойылады.
end;
end;
Color – кистьтің түсі
Handle – кистьке сілтеме
Style – фон стилі. Мұнда келесідей мәндер болуы мүмкін: bsSolid, bsClear,
bsHorizontal, bsVertical, bsFDiagonal, bsBDiagonal, bsCross, bsDiagCross.

Тәжірибелік жұмыс
Жаңа жоба құрып, форманың OnPaint оқиғасына келесі кодты жазыңыз:
procedure TForm1.FormPaint(Sender: TObject);
begin
Canvas.Brush.Style:=bsSolid;
Canvas.Rectangle(10,10,50,50);
Canvas.Brush.Style:=bsBDiagonal;
Canvas.Rectangle(10,110,50,150);
Canvas.Brush.Style:=bsFDiagonal;
Canvas.Rectangle(10,160,50,200);
Canvas.Brush.Style:=bsCross;
Canvas.Rectangle(110,10,150,50);
Canvas.Brush.Style:=bsDiagCross;
Canvas.Rectangle(110,60,150,100);
Canvas.Brush.Style:=bsHorizontal;
Canvas.Rectangle(110,110,150,150);
Canvas.Brush.Style:=bsVertical;
Canvas.Rectangle(110,160,150,200);
Canvas.Brush.Style:=bsClear;
Canvas.Rectangle(10,60,50,100);
end;
мұнда Rectangle(x, y, r, b),
х – төртбұрыштың сол жағы;
y – төртбұрыштың жоғарңы жағы;
r – төртбұрыштың оң жағы;
b – төртбұрыштың төменгі жағы.

Осылайша, біз әр түрлі стильдегі сегіз төртбұрышты салдық. Бірақ, бағдарламаны жүктеген кезде біз ешқандай айырмашылықты байқамаймыз, себебі, олардың фоны форманың фонымен бірдей болып тұр да, сондықтан көрінбейді.
Айырмашылықты көру үшін кисть фонының түсін өзгерту керек. Формаға «Түсті өзгерту» деген батырма мен ColorDialog тастап, оған келесі кодты жазамыз:
if ColorDialog1.Execute then
Canvas.Brush.Color:=ColorDialog1.Color;
FormPaint(nil);
Мұнда біз түсті өзгерту терезесін жүктейміз, және егер түс таңдалса, оны кистьтің түсіне меншіктейміз:
Canvas.Brush.Color:=ColorDialog1.Color
