Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритм+жне+бадарламалау+негіздері.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2 Мб
Скачать
☆

3.6 Delphi - дің кескінді құруға тағайындалған кластары мен құрауыштары. Timer – таймер құрауышы

Delphi – де кескінді құру құралдарын анықтайтын бірнеше кластар анықталған. Олардың қатарына қаріп (TFont класы), қарындаш (TPen класы), қыл қалам (TBrush класы) және канва (TCanvas класы) жатады. Бұл кластар кез – келген суретті бейнелеуге, сонымен қатар мәтінді де бейнелеуге қажетті құралдарды береді. Олардың барлығы қандай да бір басқа құрауыштың құрамында қолданылады.

TFont, TPen және TBrush кластарының жалпы ата – тек – TGraphicsObject (Графикалық объект) класы бар, ол өз кезегінде TPersistent класының ұрпақ класы болып келеді, TCanvas класы тікелей TPersistent класының ұрпақ класы болып табылады.

TGraphicsObject класының графикалық объектілері.

TGraphicsObject – абстрактілі класс, ол кескінді де мәтінді де бейнелейтін құралдың ең алғашқысы болып табылады. Ол өзінің ұрпақ кластарында қолданылатын OnChange оқиғасын анықтайды.

property OnChange: TNotifyEvent;

type

TNotifyEvent = procedure (Sender: TObject) of object;

Сәйкес келетін сурет салу құралы бар графикалық құрауыштың сипаттамалары өзгергенде өрбитін оқиға. Бұл оқиға графикалық құрауыштың кескінін өзіне жаңадан енгізілген қасиеттерге байланысты қайта салуға дабыл береді. TGraphicsObject класының ұрпақ класы болып табылатын келесі құрауыштарда – қаріп, қарындаш және қыл қаламда бұл қасиеттер бар. Нақты сурет салу құралдары әртүрлі сипаттамалардан тұратындықтан, қарастырылып отырған кластың басқа жалпы сипаттамасы жоқ, ал нақты сурет салу ерекшеліктері олардың өздерінде бейнеленген.

Delрhi – де арнайы графикалық бейнелерді салуға тағайындалған құрауыштар бар:

Image - дайын графикалық файлдарды бейнелеу үшін қолданылатын ыңғайлы құралды көрсетеді.

Shape - пішінде қарапайым геометриялық фигураларды – квадрат, дөңгелек, эллипс және т.б. салу үшін қолданылады.

PaintBox - бағдарламаның орындалуы барысында өзінің канвасы Canvas – та қарапайым суреттерді құруға мүмкіндік береді.

Сонымен қатар біз осы тарауда нақты уақыт интервалын есептеуге тағайындалған Timer құрауышын қарастырамыз. Ол графикалық кескіндерді құруға тағайындалмаған және көмекші құрауыш болып табылады. Бізде ол графикалық құрауыштардан тұратын қосымшаны құрған кезде қолданылады.

TFont класы.

Класс TFont – графикалық құрауыштың мәтіні бейнеленетін қаріптің сипаттамасын береді. Осы кластық типті иемденетін қасиеттер қандай да бір мәтіннен тұратын кез – келген құрауышта болады. TFont класындағы қаріптің сипаттамалары келесі қасиеттердің көмегімен беріледі:

property Charset: TFontCharset nodefault – қаріп символдарының тобын анықтайды. Ол TfontCharset типтен тұрады:

type

TFontCharset = 0..255;

Кейбір тұрақтылар Charset қасиетінің мәндері ретінде қолданылуы мүмкін:

ANSI-коды үшін (кәдімгі қолданылатын) қасиеттің мәні нөлге тең

(ANSI_CHARSET тұрақтысы).

Орыс тіліндегі бағдарламалар үшін қасиеттің мәні 1-ге тең (DEFAULT_CHARSET константасы – үнсізідкпен беріледі. Қаріп тек аты Name және өлшемі Size арқылы беріледі. Егер сипатталып отырған қаріпке жүйеде қатынас жоқ болса, онда Windows оны басқа қаріппен ауыстырады) және 204 (RUSSIAN_CHARSET константасы –кириллица символдары).

255 мәні (OEM_CHARSET тұрақтысы – символдар тобы операциялық жүйенің кодтық кестесі арқылы анықталады) MS-DOS - тың мәтінін бейнелеуге қолданылады.

property Color: TColor – символдар түсін аықтайды.

property Height: Integer – қаріптің биіктігін пиксельмен анықтайды.

property Name: TFontName; – қаріптің атын береді. Қасиеттің типі – 32 символға дейінгі жол.

type

TFontName = type string;

property Size: Integer – қаріптің биіктігін пункт бойынша береді.

(1 пункт = 1/72 дюйм).

property Style: TFontStyles –TFontStyles типті қасиет.

type

TFontStyle = (fsBold, fsItalic,fsUnderline, fsStrikeOut);

TFontStyles = set of TFontStyle;

Ол қаріптің типін береді және мән ретінде келесі көптіктің шамаларын қабылдайды:

fsBold – жартылай қою,

fsItalic – курсив,

fsUnderline – асты сызылған,

fsStriceOut – ортасы сызылған.

Мысал 3.6.1 Көптікті қолдану. OnClick оқиғасының өңдеуіші Button1 құрауышы үшін Memo1 құрауышындағы қаріпті – жартылай қою курсивті қылып орнатады.

procedure TForm1.Button1Click(Sender: TObject);

var Styles: TFontStyles;

begin

Styles := [];

Styles := Styles + [fsBold, fsItalic];

Memo1.Font.Style := Styles;

end;

немесе

procedure TForm1.Button1Click(Sender: TObject);

begin

Memo1.Font.Style := [];

Memo1.Font.Style := Memo1.Font.Style+[fsBold, fsItalic]

end;

Delphi – дегі мәтіндер тек көлденеңінен жазылады.

TPen класы.

TPen класы – қарындаштың сипаттамаларын береді, оның көмегімен әртүрлі сызықты немесе жиектемелі бейнелер салынады.

Осы кластың негізгі қасиеттеріне келесілерді жатқызуға болады:

property Color: TColor – қарындаш арқылы салынатын сызықтың түсін анықтайды. Үнсіздікпен түсі қара.

property Mode: TPenMode –TpenMode типті қасиет:

type

TPenMode = (pmBlack, pmWhite, pmNop, pmNot, pmCopy, pmNotCopy, pmMergePenNot, pmMaskPenNot, pmMergeNotPen, pmMaskNotPen, pmMerge, pmNotMerge, pmMask, pmNotMask, pmXor, pmNotXor);

Ол қарындаш арқылы салынатын сызықтың стильін анықтайды. Келесі мәндерді қабылдай алады:

pmBlack - әрқашан қара сызық бейнеленеді;

pmWhite - әрқашан ақ сызық бейнеленеді;

pmNop - түссіз сызық;

pmNot - экранның түсіне терістік болып табылатын түс;

pmCopy - Color қасиетінің мәні арқылы анықталады;

pmNotCopy - Color қасиетінде берілетін түске терістік болып табылатын түс;

және т.б.

Үнсіздік бойынша сызықтың түсі Color қасиеті арқылы анықталады.

property Style: TPenStyle – TPenStyle типті қасиет:

type

TPenStyle = (psSolid, psDash, psDot, psDashDot, psDashDotDot, psClear, psInsideFrame);

Ол қарындаш арқылы салынатын сызықтың түсін анықтайды. Келесі мәндерді қабылдауы мүмкін:

psSolid - тегіс сызық (мәні үнсіздік бойынша);

psDashe - үзік сызықты сызық;

psDot - пунктирная линия;

psDashDot - үзік сызықты пунктирлі сызық;

psDashDotDot - екі пунктирлі үзік пунктирлі сызық;

psClear - невидимая линия;

psInsideFrame - тұйық жақтаудың ішіндегі сызық.

property Width: Integer – салынатын сызықтың қалыңдығын анықтайды. Үнсіздік бойынша қалыңдығы 1 пиксельге тең деп алынады.

TBrush класы.

TBrush класы – тұйық аймақты бояуға арналған қыл қаламның сипаттамасының анықтамасынан тұрады. Қыл қаламның негізгі қасиеттерін қарастырайық.

property Bitmap: TBitmap – Bitmap қасиеті 8х8 пиксельді өлшемнен тұратын, кескінді биттік бейнелейтін TBitmap типті объектіге нұсқайды. Егер Bitmap бос болмаса, онда толтыру шаблоны Style қасиетінде емес, оның өзімен анықталады. Қарсы жағдайда қасиет nil мәнінен тұруы керек.

Мысал 3.6.2 Келесі бағдарламалық код нүктелік суретті файлдан іске қосады және оның қыл қаламына Form1 құрауышының Canvas қасиетін орнатады.

var

Bitmap: TBitmap;

begin

Bitmap := TBitmap.Create;

try

Bitmap.LoadFromFile('MyBitmap.png');

Form1.Canvas.Brush.Bitmap := Bitmap;

Form1.Canvas.FillRect(Rect(0,0,100,100));

finally

Form1.Canvas.Brush.Bitmap := nil;

Bitmap.Free;

end;

end;

property Color: TColor – қыл қаламның түсін анықтайды. Үнсіздікпен берілетін түс ақ түс болып табылады.

property Style: TBrushStyle –TBrushStyle типті қасиет:

type

TBrushStyle = (bsSolid, bsClear, bsHorizontal, bsVertical, bsFDiagonal, bsBDiagonal, bsCross, bsDiagCross);

Ол қыл қаламның орнаментін анықтайды. Келесі мәндерді қабылдауы мүмкін:

bsSolid - тегіс бояу;

bsClear - бояудың жоқтығы;

bsHorizontal - горизонталь сызықтар;

bsVertical - вертикаль сызықтар;

bsFDiagonal - сол жақ диагональды сызықтар;

bsBDiagonal - оң жақ диагональды сызықтар;

bsCross - шақпақ;

bsDiagCross - қисық шақпақ.

TCanvas класы.

TCanvas класы – Canvas объектісін анықтайды, ол сурет салуға қолданылатын құрауыштың бетін көрсетеді және олардың көмегімен сурет салуға болатын құрал – саймандарды береді: қаріп (TFont класы), қарындаш (TPen класы) және қыл қалам (TBrush класы). TCanvas кластық типтің объектілері құрауыш болып табылмайды және әртүрлі басқару элементтерінің қасиеттері ретінде қолданылады, мысалы пішін. Canvas: TCanvas қасиеті бар кез – келген құрауышқа сурет салуға болады.

Канва жеке нүкте - пиксельдерден тұрады. Әрбір пиксель горизонталь және вертикаль координаталардан тұрады. Координаталар басы яғни (0,0) координатасы бар нүкте канваның сол жақ жоғарғы бұрышында орналасады. Горизонталь осьі солдан оңға қарай бағытталған, ал вертикаль жоғарыдан төмен қарай. Канваның өлшемі құрауыштың ерекшеліктері мен өлшеміне байланысты. Мысалы, Image құрауышы үшін канваның өлшемі Height және Width, ал пішін үшін ClientHeight және ClientWidth қасиеттері арқылы анықталады.

Канвада көрінбейтін меңзер бар, ол қарындаштың ағымды жағдайын анықтайды. Ереже бойынша графикалық суреттерді салу – сызық, шеңбер, тіктөртбұрыш және т.б. – осы меңзердің ағымды жағдайынан басталады. Сурет салу үрдісінде меңзердің жағдайы өзгереді. TCanvas класында меңзерді берілген жағдайына орналастыратын әдістер анықталған.

TCanvas класының негізгі қасиеттерін қарастырайық:

property Brush: TBrush – канваның қыл қаламын орнатады.

property Font: TFont – канваның қаріпін орнатады.

property Pen: TPen – канваның қарындашын орнатады.

property PenPos: TPoint – графикалық меңзердің ағымды орналасу жағдайын анықтайды.

Мысал 3.6.3 Келесі бағдарламалық код Label1 құрауышына пішінде көрінбейтін меңзер тұрған жағдайдан бастап мәтінді шығарады және жаңа мәтінді координатасы(50,50) нүктеден бастап шығарады.

begin

Label1.Caption := '('+IntToStr(Form1.Canvas.PenPos.X)+';'+

IntToStr(Form1.Canvas.PenPos.Y)+')';

Form1.Canvas.PenPos := Point(50,50);

end;

property Pixels[X, Y]: TColor – канваның барлық пиксельдерінің түсін береді; X және Y –пиксельдің координаталары.

Мысал 3.6.4 Пішінде координатасы (10,10) нүктеге пиксельмен қызыл түс береді.

begin

Form1.Canvas.Pixels[10,10] := clRed;

end;

Мысал 3.6.5 Пішінде координатасы (15,20) нүктеге пиксельмен қарындаштың ағымды түсін береді.

begin

Form1.Canvas.Pixels[15,20] := Canvas.Pen.Color;

end;

TCanvas класында барлық мүмкін геометриялық фигураларды салуға тағайындалған әртүрлі әдістер анықталған. Барлық геометриялық фигураларды шартты түрде жиектелген (яғни, ішкі аймағында бояуы жоқ) және боялған (ішкі аймағында бояуы бар) деп бөлуге болады. Жиектемелі фигураларды салғанда тек қарындаш Pen ғана қолданылады (сызықтың түсі, қалыңдығы және т.б.). Егер фигура боялған болса (мысалы, эллипс, көпбұрыш), онда оның ішкі облысы сипаттамалары орнатылған (түс, орнамент және т.б.) Brush қыл қаламымен боялады. Мәтіндер Font қаріпінде берілген сәйкес сипаттамалар арқылы (өлшем, сызбасы және т.б.) бейнеленеді. Бағдарламаның орындалуы барысында Pen, Brush және Font қасиеттерінің мәнін өзгертуге болады. Бірақ мынаны ескеру керек, өзгертулер сурет салу үрдісін қолданғанға дейін орындалуы қажет.

Қарапайым графикалық кескіндерді салуға тағайындалған негізгі әдістерді қарастырайық:

procedure Arc(X1, Y1, X2, Y2, X3, Y3, X4, Y4: Integer);

Сол жақ жоғарғы бұрышының координатасы (X1, Y1) және оң жақ төменгі бұрышының координатасы (X2, Y2) тіктөртбұрыштың ішіне сызылған эллипстің доғасын сызады. Доға эллипстің центрі және (X3, Y3) нүктесі арқылы өтетін түзумен қиылысқан нүктеден басталады да, эллипстің центрі және (X4, Y4) нүктесі арқылы өтетін түзудің эллипспен қиылысу нүктесінен аяқталады.

procedure Chord(X1, Y1, X2, Y2, X3, Y3, X4, Y4: Integer);

Эллипстің сегментін сызады, ол эллипстің доғасынан тұрады, ол тура Arc доғасы сияқты тұрғызылған және басын аяғымен қосатын хордадан тұрады.

procedure Ellipse(X1, Y1, X2, Y2: Integer); overload;

Сол жақ жоғарғы бұрышының координатасы (X1, Y1) және оң жақ төменгі бұрышының координатасы (X2, Y2) тіктөртбұрыштың ішіне сызылған эллипсті сызады.

procedure FillRect(const Rect: TRect);

Rect тіктөртбұрышын Brush қыл қаламымен бояйды.

procedure FloodFill(X, Y: Integer; Color: TColor; FillStyle: TFillStyle);

type

TFillStyle = (fsSurface, fsBorder);

Brush қыл қаламымен канваның бетін (X, Y) координатасы бар нүктеден бастап бояйды. Егер FillStyle параметрі fsBorder мәнінен тұрса, онда шекараның бет жағы Color қасиетінде берілген түске боялады немесе FillStyle параметрі fsSurface мәнінен тұрса, онда шекараның бет жағының бөлігі Color қасиетінде берілген түске боялады.

procedure LineTo(X, Y: Integer);

PenPos қасиетінде анықталған графикалық меңзердің ағымды орынынан бастап координатасы (X, Y) болатын нүктеге дейін Pen қарындашы арқылы сызық сызады.

procedure MoveTo(X, Y: Integer);

Графикалық меңзерді (X, Y) координатасы бар нүктеге дейін жылжытады.

Мысал 3.6.6 Form құрауышы үшін OnMouseDown оқиға өңдеуіші пішіннің сол жақ жоғарғы бұрышынан бастап тышқанмен шерткен нүктеге дейін қызыл түсті сызық сызады.

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

Form1.Canvas.Pen.Color:=clRed;

Form1.Canvas.MoveTo(0,0);

Form1.Canvas.LineTo(x,y);

end;

procedure Pie(X1, Y1, X2, Y2, X3, Y3, X4, Y4: Longint);

Эллипстің секторын сызады. Эллипстің доғасы Arc әдісіндегі сияқты беріледі.

procedure Rectangle(X1, Y1, X2, Y2: Integer); overload;

Сол жақ жоғарғы бұрышының координатасы (X1, Y1) және оң жақ төменгі бұрышының координатасы (X2, Y2) тіктөртбұрышты сызады.

procedure RoundRect(X1, Y1, X2, Y2, X3, Y3: Integer);

Сол жақ жоғарғы бұрышының координатасы (X1, Y1) және оң жақ төменгі бұрышының координатасы (X2, Y2) тіктөртбұрыш сызады. Тіктөртбұрыштың бұрыштары X3 және Y3 осьтері бар эллипстің бөліктерімен дөңгелектенген.

procedure TextOut(X, Y: Integer; const Text: String);

Канваның бетіне Text мәтінін (X, Y) координатасы тіктөртбұрыштың сол жақ жоғарғы бұрышының (X, Y) болатындай етіп канваның бетіне шығарады. Мәтіннің параметрлері Font қаріпінің сипаттамалары арқылы беріледі, фонның түсі - Brush қыл қаламның ағымды түсімен орнатылады.

procedure Refresh;

Канваның кескінін қайта салу керек болған жағдайда шақырылады (қаріптің құрал – саймандарын орнатады, қалам және қыл қаламды стандартты қасиеттер тобымен орнатады (үнсіздік арқылы беріледі)).

function TextHeight(const Text: String): Integer;

Font қаріпінде анықталған, Text мәтінінің биіктігін пиксельмен қайтарды.

function TextWidth(const Text: String): Integer;

Font қаріпінде анықталған, Text мәтінінің ұзындығын пиксельмен қайтарды.

TCanvas класында OnChange және OnChanging оқиғалары анықталған:

property OnChange: TNotifyEvent;

Канвада өзгеріс болар алдында өрбитін оқиға. Яғни канваның түрін өзгертетін, TCanvas әдісін шақырғанда және қасиеттері өзгергенде өрбитін оқиға.

property OnChanging: TNotifyEvent;

Канвада өзгеріс болғаннан кейін бірден өрбитін оқиға.