Зертханалық жұмыс №1 «Delphi интерфейсінің элементтері»


Зертханалық жұмыс №7 "Қарапайым Windows-қосымшасын құру"



бет3/3
Дата14.11.2019
өлшемі2,2 Mb.
#51751
1   2   3
Байланысты:
дельфи зертханалық жұмыс
Сатып алу-сату шарты, Сатып алу-сату шарты

Зертханалық жұмыс №7 "Қарапайым Windows-қосымшасын құру"


  1. «Моя первая программа» атты тақырыбы бар пішіннің терезесін экранда бейнелейтін бағдарлама құрыңыздар. Қосымшаны іске қосыңыз.

  2. Бағдарлама өзгертулер енгізіңіздер. Тамғаны пайдалана отырып, терезенің тура ортасына «Hello world!» мәтінін шығарыңыздар. Қаріптің түсін, өлшемін өзгертіңіздер. Қосымшаны іске қосыңыздар.

  3. сәйкес келетін командалық батырманы басқанда «Hello world!» сөзінің үстіне «Я программирую на Delphi» сөзі шығатындай етіп бағдарламаны өзгертіңіздер. Мәтінді шығару үшін Edit құрауышын қолданыңыздар.

Property Visible:Booleanбастапқыда құрауыш көрінетін бола ма? соны анықтайды.

  1. Құрауыштар ағымды көмекші кеңес тұратындай етіп бағдарламаны толықтырыңыздар.

Property Hint: String – элементтер туралы қысқаша анықтама ақпараттан тұрады. Property ShowHint: Boolean – егер мәні True болса, онда меңзер элементтің үстінде тұрғанда Hint қасиетінде берілген қысқаша анықтамадан тұрады.

  1. Екі айнымалы жарияланғаннан кейін оларға қандай да бір мәндер меншіктелетіндей бағдарлама құрыңыздар. Осы мәндерді көбейтіңіздер және алынған нәтижені экранда бейнелеңіздер. Бүтін санды мәнді жолға айналдыратын функцияны қолданыңыздар.

  2. Негізгі пішіннің терезесіне Memo, Edit, Label құрауыштарын және “OK” және “Close” екі батырмасын орналастырыңыздар. Edit енгізу жолындағы мәтін “OK” батырмасына басқанда өзгеріссіз Label тамғасына және Memo көпжолды редактіріне көшетіндей бағдарлама құрыңыздар.

[имя строки ввода].SetFocus операторының көмегімен терезенің экранда пайда болған кезінде (пішіннің оқиғасын қолданыңыздар) және “OK” батырмасына басқанда енгізу жолы үшін енгізу фокусын орнатыңыздар.

Пішіннің оқиғалары:

Пішін құрылғанда және оның Visible қасиетінің мәні True болғанда, келесі оқиғалар тіркелген ретімен орындалады:

1. OnCreate – пішінді бастапқы құрғанда орындалады.

2. OnShow – пішін көрінер алдында орындалады.

3. OnActivate – пішін белсенді болғанда өрбиді.

4. OnPaintпішін экранда салынар алдында өрбиді (пішін белсенді болғанда немесе көрінетін болғанда).



OnDestroy оқиғасы – OnCreate қарама - қарсы, пішінді жойғанда орындалады.

  1. №5 – ші тапсырманың бағдарламасын - айнымалылардың мәндері енгізу жолдары арқылы енгізілетіндей етіп өзгертіңіз. Пішінге келесі әрекетке көмекші кеңес беретіндей тамғаны орналастырыңыз.
    Ұсыныс: Пішінге 4 құрауышты орналастырыңыз – Button(OK, OK, Close, Результат), 1 – Edit (айнымалылардың мәндерін енгізу үшін), 2 тамға Label - көмек кеңесті және нәтижені шығару үшін. Visible қасиетін және SetFocus әдісін қолданыңыздар.

3.2 Пернетақта арқылы берілген хабарламаны өңдеу


TWinControl класында пернетақтамен жұмыс істегенде пайда болатын оқиғалар анықталған. Оларға келесі оқиғалар кіреді:

property OnKeyDown:TKeyEvent;

Оқиға пернетақтаның пернесі басылғанда өрбиді. Оқиғаны өңдеу типі TKeyEvent:



type

TKeyEvent = procedure(Sender: TObject; var Key: Word;


Shift: TShiftState) of object;

мұндағы Sender – активті басқару элементіне сілтеме жасайтын параметр; Key – басылған перненің коды;



type

TShiftState = set of (ssShift, ssAlt, ssCtrl, ssLeft, ssRight,


ssMiddle, ssDouble);

Shift – пернетақтаның Alt, Ctrl, Shift пернелерінің және тышқанның пернелерінің күйін қадағалайды (көптіктің типі, оның элементтері: ssShiftShift батырмасы басылды, ssAltAlt батырмасы басылды, ssCtrlCtrl батырмасы басылды , ssLeft – тышқанның сол жақ батырмасы, ssRight – тышқанның оң жақ батырмасы, ssMiddle – тышқанның ортаңғы батырмасы, ssDouble – тышқанның батырмасымен екі рет шерту).



Мысал 3.2.1 OnKeyDown оқиғасының өңдеуіші Alt+Ctrl+Z пернелерінің қосындысына басқанда Form1 құрауышының пішіннің фонының түсіне clAqua (көгілдір) мәнін береді.

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);

begin

IF (Shift=[ssAlt,ssCtrl]) AND (Key=ORD(’Z’)) THEN Form1.Color:=clAqua;

end;

Пернелердің кодын VCL Reference анықтама жүйесінің Virtual Key Codes, Key Codes бөлімдерінен көруге болады.

property OnKeyPress:TKeyPressEvent;

Символдық перне басылғанда өрбитін оқиға. Оқиғаны өңдеу типі TKeyPressEvent:



type

TKeyPressEvent = procedure(Sender: TObject;


var Key: Char) of object;

Key параметрі – басылған перненің ANSI-кодын (символ) анықтайды.



property OnKeyUp:TKeyEvent;

Оқиға пернетақтадағы басылған пернені босатқанда өрбиді. Оқиғаны өңдеу типі TKeyEvent (жоғарыдағы OnKeyDown оқиғасын қараңыздар).



Мысал 3.2.2 OnKeyPress оқиғасының өңдеуіші Form1 құрауышы үшін «R» символдық пернесі басылғанда пішіннің фонының түсін қызылға өзгертеді, ал осы пернені босатқанда OnKeyUp оқиғасының өңдеуіші пішіннің фонының түсіне алғашқы мәнін орнатады (clBtnFace).

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);

begin

If Key='R' then Form1.Color:=clRed;

end;

{пернеге басқанда пернетақтаның регистрі және тілдік бөлінуі есепке алынады}

procedure TForm1.FormKeyUp(Sender: TObject;
var Key: Word; Shift: TShiftState);

begin

If Key=ORD('R') then Form1.Color:=clBtnFace;

end;

Осымен қатар TwinControl класында терезелік элемент активті болғанда немесе активті болмаған жағдайда өрбитін оқиғалар анықталған:



property OnEnter:TNotifyEvent;

Терезелік элемент енгізу фокусын алғанда өрбитін оқиға. Оқиғаны өңдеу типі TNotifyEvent.



type

TNotifyEvent = procedure(Sender: TObject) of object;

мұндағы Sender оқиға көзі - объектісіне нұсқаудан тұрады.

property OnExit:TNotifyEvent;

Терезелік элемент енгізу фокусын жоғалтқанда өрбиді.



TControl класында басқару элементі тышқан, перне және таймер арқылы қалыптастырылған оқиғаларды қалай қабылдайтынын анықтайтын қасиет бар:

property Enabled: Boolean;

Егер қасиетің мәні TRUE болса, онда – қабылдайды,


FALSE – қабылдамайды.

TScreen класында 2 оқиға анықталған:

property OnActiveControlChange: TNotifyEvent;

Оқиға пішіндегі активті басқару элементі өзгергенде өрбиді.



property OnActiveFormChange: TNotifyEvent;

Оқиға бағдарламада активті элемент өзгергенде өрбиді.


3.3 Тышқан арқылы берілген хабарламаны өңдеу


TControl класында тышқанды басқарғанда өрбитін оқиғалар анықталған.

property OnClick:TNotifyEvent;

Басқару элементін тышқан арқылы таңдағанда өрбитін оқиға (тышқанның көрсеткіші басқару элементінің үстінде орналасқанда тышқанның сол жақ пернесі басылады және босатылады).



property OnDblClick:TNotifyEvent;

Басқару элементіне тышқанның сол жақ пернесімен екі рет шерткенде өрбитін оқиға.



property OnMouseDown:TMouseEvent;

Тышқанның көрсеткіші басқару элементінің үстінде тұрғанда, тышқанның пернесі басылғанда өрбитін оқиға. Оқиғаны өңдеу типі TMouseEvent:



type

TMouseEvent = procedure(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X,Y:Integer) of object;

мұндағы Sender – оқиға болған құрауышқа нұсқайтын параметр;



type

TMouseButton = (mbLeft, mbRight, mbMiddle);

Button параметірінің мәні тышқанның қай батырмасы басылғанын анықтайды (mbLeft – сол жақ, mbRidht – оң жақ , mbMiddle - ортаңғы); Shift – пернетақтаның Alt, Ctrl және Shift пернелерінің және тышқанның пернесінің күйін қадағалайды (жоғарыдағы OnKeyDown оқиғасын қараңыздар); X,Y – Sender құрауышының клиенттік аймағындағы тышқанның көрсеткішінің жергілікті координаталары (пиксельмен беріледі).

property OnMouseMove:TMouseMoveEvent;

Тышқанның көрсеткіші басқару элементінің үстінде орналасқан кезде, оны жылжытқанда өрбитін оқиға. Оқиғаны өңдеу типі TMouseMoveEvent:



type

TMouseMoveEvent = procedure(Sender: TObject; Shift: TShiftState; X,Y:Integer) of object;

Параметлері OnMouseDown оқиғасындағы сияқты мағынаны береді.

property OnMouseUp:TMouseEvent;

Тышқанның көрсеткіші басқару элементінің үстінде орналасқан кезде, тышқанның пернесін босатқанда өрбитін оқиға. Оқиғаны өңдеу типі TMouseEvent (жоғарыдағы OnMouseDown оқиғасын қараңыздар).



Мысал 3.3.1 Бұл мысал пішінде төрт панелі бар StatusBar1 (Win32 парағы) қалып – күй жолының болуын талап етеді. . Панельді қосу үшін қалып – күй жолының Panels қасиетінің мәндер өрісінің үш батырмасына шерту арқылы Editing StatusBar1.Panels терезесін шақырыңыздар. Редактірлеу терезесінің басқару панельінің Add New батырмасына төрт рет шертіңіздер. (Мысалды орындамас бұрын әрбір панельдің Width қасиетіне 150 мәнін орнатыңыздар). Қолданушы тышқанның батырмасына басқанда, тышқанды жылжытқанда және тышқанның батырмасын босатқанда пішінде тіктөртбұрыш тартылады. Тышқанның батырмасы босатылғанда тіктөртбұрыш пішіннің канвасында пайда болады. Оның сол жақ жоғарғы және оң жақ төменгі бұрыштары тышқанды басқан және босатқан уақыттағы тышқанның көрсеткішінің орналасуымен анықталады. Қолданушы тышқанды жылжытқанда тіктөртбұрыштың сол жақ жоғарғы (Left, Тор) және оң жақ төменгі (Right, Bottom) бұрыштарының координаталары қалып –күй жолында бейнеленеді. Горизонталь осьі солдан оңға қарай жүреді. Вертикаль ось – жоғарыдан төмен қарай бағытталады. Осьтер тек қана оң мәндерден тұрады.

var

StartX, StartY: Integer; {Пішіннің модульінің интерфейс бөлімінде жариялайды}



{Бұл кодты пішіннің OnMouseDown оқиғасының өңдеуіші ретінде қолданыңыздар: }

procedure TForm1.FormMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X,Y: Integer);

begin

StartX := X;

StartY := Y;

end;

{ Бұл кодты пішіннің OnMouseUp оқиғасының өңдеуіші ретінде қолданыңыздар: }

procedure TForm1.FormMouseUp(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X,Y: Integer);

begin

Form1.Canvas.Rectangle(StartX, StartY, X, Y);

StatusBar1.Panels[0].Text := '';

StatusBar1.Panels[1].Text := '';

StatusBar1.Panels[2].Text := '';

StatusBar1.Panels[3].Text := '';



end;

{ Бұл кодты пішіннің OnMouseMove оқиғасының өңдеуіші ретінде қолданыңыздар: }

procedure TForm1.FormMouseMove(Sender: TObject;
Shift: TShiftState; X,Y: Integer);

begin

if ssLeft in Shift then { батырманың басылғанын тексеріңіздер }

begin

if Y > StartY then

begin

StatusBar1.Panels[0].Text := 'Top: ' + IntToStr(StartY);

StatusBar1.Panels[2].Text := 'Bottom: ' + IntToStr(Y);

end

else

begin

StatusBar1.Panels[0].Text := 'Top: ' + IntToStr(Y);

StatusBar1.Panels[2].Text := 'Bottom: ' + IntToStr(StartY);

end;

if X > StartX then

begin

StatusBar1.Panels[1].Text := 'Left: ' + IntToStr(StartX);

StatusBar1.Panels[3].Text := 'Right: ' + IntToStr(X);

end

else

begin

StatusBar1.Panels[1].Text := 'Left: ' + IntToStr(X);



StatusBar1.Panels[3].Text := 'Right: ' + IntToStr(StartX);

end;

end;

end;

















































































4-дәріс.Графикалық мүмкіндіктер

4.1. Қозғалысты программалау.

Қозғалысты еліктету немесе анимация эффектін көрсету негізгі үш қадамдың орындалуымен қамтылады:

  • Объектіні экран бетіне шығару (кейде шағын үзіліс орнатылғаны жөн);

  • Объектіні экраннан алып тастау;


  • Объектіні басқа жерге шығару.
Диаграмма және график салу

Диаграмма мен график сандық берілгендерді ұғынуды жеңілдетуге бейімделген және Delphi ортасы олармен жұмыс атқаратын компоненттерімен қамтылған. Диаграммаларды екі топқа бөлуге болады:

  • Индикаторлар;

  • Күрделі диаграммалар және графиктер.



4.2. Индикаторларды пайдалану

Индикатор жалпы диаграмманың қарапайым түріне жатады және ол арқылы кейбір ұзақ уақыт орындалатын іс-әрекет (мысалы, дискетті форматтау, файлды көшіру, т.с.с.) процестердің көрінісін мәтіндік және графикалық түрде бейнелеуге арналған.


Delphi ортасы жұмыстың орындалуын көрсететін ProgressBar және Gauge компоненттерін ұсынады.

ProgressBar ортаның Win32 парағында орналасқан, бұл компонент белдеу түрінде болып, кейбір ұзақ уақыт орындалатын іс-әрекеттің көрінісін экран бетіне шығарады.

Delphi ортасының Win32 парағы



ProgressBar компонентінің индикация өрістері мен реңінің түсін өзгертетін қасиеттері жоқ, сондықтан бұл параметрлер контейнер параметрлерімен анықталады. Әдетте графикалық белдеу көк түспен боялады.

ProgressBar компонентінің келесі қасиеттерін негізгі деп санайды:

  • Min және Max - индикатордың алғашқы және соңғы мәндерінің

аралығын анықтайды. Келісімше Min=0%, Max=100% деп саналады.

  • Position - орындалған іс-әрекеттің салыстырмалы көлемін Min және Max мәндеріне сәйкес анықтайды. Мысалы, Min=0, Max=80 деп көрсетілсе, онда Position-ның 20 деген мәніне сәйкес орындалған жұмыстың көлемі 25% деп саналады.

  • Step - индикатордың көлемі өскендегі позицияның қандай мәнге өсіп отыратынын анықтайды.

Индикатордың позициясын программада көрсетуге болады, мысалы:

ProgressBar1. Position:=35;

ProgressBar-ның элементінің позициясын StepIt (өсімшесі Step) және StepBy (Delta:Integer) (өсімшесі Delta) процедуралары арқылы өзгертуге болады. Мысалы, ProgressBar1.StepBy (13).

Бұл оператор бойынша ProgressBar1-дің индикаторы 13-ке өсіп отырады.



ProgressBar1 компонентінің Caption немесе Text қасиеттері жоқ болғандықтан, жұмыс атқару индикаторын жазумен қамту үшін, Label компонентін қолдануға болады.

Samples парағында орналасқан Gauge элементі қарапайым диаграммаларды шығаруда қолданылады. Gauge компоненті арқылы белгілі бір параметрдің мәнін пайызға сәйкестеп, лайықтап шығарады.

Kind қасиеті шығарылатын диаграмманың түрін анықтайды және оның мәні келесідей бола алады :

  • GkHorizontalBar - көлденең төртбұрыш;

  • gkVerticalBar - тік төртбұрыш;

  • gkPie - сектор;

  • gkNeedle - спидометр;

  • gkText - тек қана мәтін.


Диаграмма түрлері

BorderStyle - жиектерінің түрі bsSingle деп анықталса, онда жиегі жіңішке сызықпен салынады. Егер bsNone деп анықталса - жиегі болмайды. ForeColor - индикатордың түсін, BackColor диаграмманың индикатордан бос аймағының түсін, Progress - параметр мәнін пайызға сәйкестеп анықтайды.

MinValue және MaxValue - параметрдің ең кіші және ең үлкен мәндерін анықтайды (әдетте ол мәндер - 0% және 100% ).

Мысалы, бейнетаспаны ойнау Animate компоненті арқылы іске асырылады. Бұл компонент тек тығыздалмаған графикалық бейне бөлігін ойнауға бейімделген. Осы әрекеттің орындалуын графикалық түрде ProgressBar компоненті арқылы көрсетуге болады.



График және диаграмма

Chart компоненті әртүрлі күрделі диаграммаларды салуда қолданылады. Бұл компоненттің құрамындағы көптеген қасиеттері өздері объект ретінде анықталған және олардың ішкі қасиеттері болады.







Additional парағының Chart компоненті

Тәжiрибеде Chart компонентінің параметрлерін анықтау әрекеттері Editing Chart редакторының терезесінде анықталады. Ол терезені шақыру үшін формадағы TСhart терезесiн екі рет сырт еткізіңіз немесе тышқанның оң жақ батырмасын басқандағы Edit Chart опциясын таңдаңыз. Ашылған редактордың терезесіндегі Series параметрінде Add батырмасын басу арқылы диаграмманың немесе графиктің түрін анықтауға болады.

Берілгендердің шығар көзі Series=> Data Source парағында анықталады. Егер берілгендердің жиыны қосымшаның орындалу барысында қалыптастандырылса, онда No data деп көрсету керек.

DBChart және QRChart компоненттерінің шығар көзін Table - кесте деп анықтауға болады.

Диаграмма құрылғандағы пайдаланылатын берілгендердің мәндерін басқару үшін Add, Delete, Clear әдістері қолданылады.



Add (Const AValue :Double; Const ALabel:String; Acolor:Tcolor): LongInt функциясы Avalue параметрімен анықталған мәнді диаграммаға қосады. Диаграмма шығарылғанда, Alabel - мәндің атын, ал Aсolor - оның түсін анықтайды.

Delete (ValueIndex:LongInt) процедурасы ValueIndex нөмірімен анықталған мәнді жояды. Жалпы барлық мәндерді жою үшін Clear процедурасы қолданылады.

Delphi ортасы схемаларды, сызбаларды, түрлі иллюстрацияларды экранға шығаратын программаларды неғұрлым қарапайым жолмен құруға мүмкіндік береді.

Графикалық элементтер объекттің үстінгі жағында шығарылады (формалар немесе Image компоненті), бұған Canvas қасиеттері сәйкес келеді. Объектінің бетіне графиктік элементтерді (түзу сызық, шеңбер және т.б.) шығару үшін осы объектінің Canvas қасиетін қолдану әдісін пайдаланамыз.

Мысалы, form1.Canvas.Restangle (10, 10, 100, 100);



Бет (Холст)

Қарапайым графиктерді шығару әдісінде сурет салуға болатын абстрактты бет (холст) ретінде Canvas қасиеттері қарастырылады. Бұл бет (холст) жеке нүктелерден – пиксельдерден тұрады, олардың әрқайсысы көлденең (х) және тік (у) координаталар арқылы анықталады.


Қарандаш және қылқалам

Қарапайым графиктерді бет (холст) бетіне салуды қамтамасыз ететін әдістер үшін, қарандаш және қылқалам қолданылады: қарандашты түзулер мен контурларды сызуға қолданады, ал қылқаламды аймақтарды шекаралық контурмен бояуға қолданады.

Графиктерді бетке (холстқа) шығаратын арнайы қарандаш және қылқаламға Pen (қарандаш) Brush (қылқалам) қасиеттері сәйкес келеді, бұлар TPen және TBrush типтерін көрсетеді. Осы объектілердің қасиеттерінің мәні шығарылатын графикалық элементтердің түрін анықтайды.

TPen объектісінің мынадай қасиеттері бар:

Color – түзудің түсі (контуры);



Width – түзудің қалындығы (пиксель бойынша);

Style – түзудің түрі.

Pen.Color қасиетіннің мәні ретінде мынадай атаулы тұрақтыларды қолдануға болады (TColor): clBlack, clOlive, clGray, clBlue, clMaroon, clNavy, clSilver, clAqua, clGreen, clPurple, clRed, clWhite.

Pen.Style қасиеті мынадай мәндерді қабылдайды:

psSolid – біркелкі түзу;

psDash – пункттирлік түзу, ұзын штрихтар;

psDot – пункттирлік түзу, қысқа штрихтар;

psClear – түзу көрінбейді.

Егер Pen.Width қасиетінің мәні бірден үлкен болса, онда пункттирлік түзулер біркелкі түзулер болып шығады.

Қылқалам (Canvas. Brush) тұйық аймақтарды сызатын және сол облыстарды бояуды қамтамасыз ететін әдіс ретінде қолданылады. Қылқалам объект сияқты екі қасиетке ие:

Color – тұйық облысты бояйтын түс;

Style – аймақты толықтыру стилі (типі).

Brush.Color қасиетінің мәні ретінде жоғарыда айтылып өткен TСolor типті атаулы тұрақтылардықолдануға болады.

Brush.Style қасиеті мындай мәндерді қабылдайды :

bsSolid – біркелкі бояу;

bsClear – облыс болмайды;

bsHorizontal – көлденен штрих;

bsVertical – тік штрих;

bsFDiagonal – ілгері қарай көлбеген диагоналдық штрих.

Мәтінді шығару


Графикалық объекттің бетіне мәтін шығару үшін TextOut әдісі қолданылады. Осы әдістің шақыру нұсқауы жалпы жағдайда мынадай түрде болады:

Объект.Canvas. TextOut(x, y, Текст);

Мұндағы х, у – шығатын мәтіннің координат нүктелері; Текст – айнымалы немесе символдық типті тұрақты (шығарылатын мәтін).



TextOut әдісімен шығарылатын мәтін облысының оң жақ шекара координаттарын, PenPos қасиетін пайдыланып алуға болады, мысалы:

TextOut(PenPos.x, PenPos.y, (‘руб.’);
    1. Қарапайым графиктерді сызу әдістері


LineTo әдісі түзуді қарандаштың ағымдағы орнынан координатасы көрсетілген нүктеге дейін сызады.

Объект.Canvas.LineTo(х, у);



MoveTo әдісі қарандашты белгіленген нүктеге апарады:

Объект.Canvas.MoveTo(х, у);

Ellipse әдісі эллипс сызады (жеке жағдайда, шеңбер – параметр мәндеріне тәуелді болады):

Объект.Canvas.Ellipse(x1, y1, x2, y2);

Мұндағы х1, у1, х2, у2 – ішіне эллипс сызылатын тіктөртбұрыш координаттары.



Arc әдісі доға сызады:

Объект.Canvas.Arc(x1, y1, x2, y2, х3, у3, х4, у4);

Мұндағы х1, у1, х2, у2 – эллипс параметрлері, эллипс бөлігі яғни сызылатын доға болады.



Rectangle әдісі тіктөртбұрыш сызады:

Объект.Canvas.Rectangle (x1, y1, x2, y2);

Мұндағы х1, у1 және х2, у2 – сол жақ үстінгі және оң жақ астынғы тіктөртбұрыш бұрыштарының координаттары.



FillRect әдісі Brush.Color қасиеті арқылы берілген түсімен тіктөртбұрышты бояйды. Бұл әдістің бір ғана параметрі бар, бұл структуранының TRect типі. Мысалы:

var

R :Rect(20, 20, 150, 150);

with Canvas do

begin

Brush.Color:=clRed;

FillRect(R);



end;

end;

Canvas объектінің қасиеттері

Айтып кеткендей, программа орындайтын графиктерді бетке шығару үшін Canvas қасиеті келеді. Canvas объектісінің Pixels қасиетін пайдалана отырып, графикалық беттің кез келген нүктесін қажетті түске бояуға болады. Мысалы, нұсқауы



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

форм бетіндегі нүктені қызыл түске бояйды.



Мысал1. Форма бетіне олимпиядалық жалау суретін салайық. Объектіні Image компонентінің үстіне шығарамыз. Формаға Image, button1 компоненттерін орналастырамыз. Button1 компонентінің Caption қасиетіне «сурет салу» мәнін енгіземіз. Button1 компонентінің Onclick оқиғасын құрамыз. Коды:

procedure TForm1.Button1Click(Sender: TObject);

begin

with Image1.canvas do



begin

pen.Width:=1;Pen.Color:=clblack;

brush.Color:=clcream;Rectangle(30,30,150,115);

pen.Width:=2;brush.Style:=bsclear;

Pen.Color:=clblue;ellipse(40,40,80,80);

Pen.Color:=clblack;ellipse(70,40,110,80);

Pen.Color:=clred;ellipse(100,40,140,80);

Pen.Color:=clyellow;ellipse(55,65,95,105);

Pen.Color:=clgreen;ellipse(85,65,125,105);

end;


end;

    1. Функциялардың графиктері мен диаграммаларын сызу

Sin (K* pi/10 ) функциясы берілген, K=0…20. Функцияның графигін салайық (4 - сурет).

Функцияның графигін сызу үшін



Chart1.SeriesList[0]. AddXY(k,

( sin(k*pi/10)),' ', clGreen) оперторын қолдануға болады.

unit Graf_sin_s;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

TeEngine, Series, ExtCtrls, TeeProcs, Chart;

type

TForm1 = class(TForm)

Chart1: TChart;

Series2: TLineSeries;

procedure FormActivate(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormActivate(Sender: TObject);

var k: integer;

begin

for k:=0 to 20 do

Chart1.SeriesList[0]. AddXY(k,(sin(k*pi/10)),' ', clGreen);end; end.

Синус функциясының графигі



5-дәріс. Мультимедиалық мүмкіндіктер

TMediaPlayer - компоненті әртүлі мультимедиялық құрылғылардан: компакт дискілері, дыбыстық карталары және т.б. тұрады. TmediaPlayer компонентінің бірнеше батырмалары бар, олар өздеріне тиісті қызметтерін атқарады.

Windows жүйесінің бүкіл қосымшаларында өзінің дербес менюі болады. Меню қолданушылық интерфейсінің тараған түрінің бірі, ол функциональды қасиеттері бойынша біріктірілген пункттер тізімі болып келеді, олардың әрқайсысы команда немесе іштей менюді көрсетеді. Қосымшада бір басты меню және бірнеше контекстік меню болады. Негізгі меню бүкіл қосымшаны басқаруға, контекстік менюдің әрқайсысы жеке интерфейстік элементі басқаруға арналған.

5.1. Animate компоненті

Animate компоненті Win32 парағында орналасқан, ол кадрлары AVI-файлында орналасқандар үшін анимацияны шығаруға мүмкіндік береді.



Animate компонентінің белгісі

Animate компоненті формаға әдеттегідей қосылады. Компонентті формаға орналастырғаннан кейін оның қасиеттерін қою керек:

Animate компонентінің қасиеттері






Қасиет

Қызметі







Name

Компоненттің аты.







FileName

Компоненттің көмегі арқылы бейнеленетін анимация орналасқан AVI-файлының аты.







StartFrame

Анимацияның бейнеленуі басталатын кадрдың нөмірі







stopFrame

Анимацияның бейнеленуі аяқталатын кадрдың нөмірі







Activate

Анимация кадрларының бейнелену процессінің активтену белгісі







Color

Анимация іске қосылатын компоненттің фонының түсі







Repetitions

Анимацияның қайталану саны
















Чтобы увидеть, что находиться в AVI-файлда не нәрсе бар екендігін көру үшін Windows-тан қажетті буманы ашып AVI-файлын көрсетіп жанама менюден Свойства командасын таңдап алу керек:



Сводка парағында AVI-файлы

туралы ақпарат шығады





Просмотр анимации

программасының формасы




Келесі программа Animate компонентінің қолдануына мысал келтірілген:

Animate1 компонентінің қасиеттері






Қасиеттер

Мәні







FileName

bart.avi







Active

False







Transparent

True




unit ShowAVI_;

interface

uses

Windows, Messages, SysUtils,

Classes, Graphics, Controls,

Forms, Dialogs, StdCtrls, ComCtrls, ExtCtrls;



type

TForm1 = class(TForm)

Animate1: TAnimate;

// Animate компоненті

Button1: TButton; // Пуск-Стоп батырмасы

Button2: TButton; // келесі кадр

Button3: TButton; // алдыңғы кадр

RadioButton1: TRadioButton;

// барлық анимацияны қарап шығу

RadioButton2: TRadioButton;

// әр кадр бойынша қарап шығу

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure RadioButton1Click(Sender: TObject);

procedure RadioButton2Click(Sender: TObject);

private

{ Private declarations }



public

{ Public declarations )



end;

var Form1: TForm1; // форма

CFrame: integer;



implementation {$R *.DFM}

procedure TForm1.Button2Click(Sender: TObject);

begin

if CFrame = 1 then

Button2.Enabled := True;



if CFrame < Animate1.FrameCount then begin

CFrame := CFrame + 1;

Animate1.StartFrame := CFrame;

Animate1.StopFrame := CFrame;

Animate1.Active := True;

if CFrame = Animatel.FrameCount

then Button2.Enabled:=False;

end;

end;

procedure TForm1.Button3Click(Sender: TObject);

begin

if CFrame = Animate1.FrameCount



then Button2.Enabled := True;

if CFrame > 1 then begin

CFrame := CFrame — 1;

Animate1.StartFrame := CFrame;

Animate1.StopFrame := CFrame;

Animate1.Active := True;

if CFrame = 1 // текущий кадр — первый

then Form1.Button3.Enabled := False;

end;

end;

procedure TForml.RadioButtonlClick(Sender: TObject);

begin

Buttonl.Enabled:=True;

Form1.Button3.Enabled:=False ;

Form1.Button2.Enabled:=False;



end;

procedure TForm1.RadioButton2Click(Sender:TObject);

begin

Button2.Enabled:=True;

Buttons.Enabled:=False

Buttonl.Enabled:=False; end;



procedure TForm1.ButtonlClick(Sender: TObject);

begin

if Animate1.Active = False

then begin

Animate1.StartFrame:=l;

Animate1.StopFrame:=Animate1.FrameCount;

Animate1.Active:=True;

Button1.caption:='Стоп';

RadioButton2.Enabled:=False;



end

else

begin

Animate1.Active:=False;

Button1.caption:='Пуск';

RadioButton2.Enabled:=True;



end;

end;

end.

comonAVi қасиетінің мәндері анимацияны анықтайды




Мән

Анимация

Процесс







АviCopyFiles



Файлды көшіру







AviDeleteFile



Файлды алып тастау







aviRecycleFile



Файлды корзинаға алып тастау




5.2. MediaPlayer компоненті

MediaPlayer компонентінің белгісі System парағында орналасқан. Ол видеороликтерді, дыбысты және ды быспен байланысқан анимацияны шығаруға мүмкіндік береді.



MediaPlayer компонентінің белгісі



.

MediaPlayer компоненті



MediaPlayer компонентінің батырмалары



















Батырма

Белгіленуі

Атқаратын қызметі







Шығару

btPlay

Дыбыс немесе аудионы шығару







Пауза

btPause

Шығаруды уақытша тоқтату







Стоп

btStop

Шығаруды тоқтату







Келесі

btNext

Келесі кадрге көшу







Алдыңғы

btPrev

Алдыңғы кадрге көшу







Қадам

btStep

Келесі дыбыстық фрагментке көшу, мысалы CD-дегі келесі әнге көшу







Назад

btBack

Алдыңғы дыбыстық фрагментке көшу, мысалы CD-дегі алдыңғы әнге көшу







Жазу

btRecord

Жазу







Ашу/Жабу

btEject

Компьютердің CD-дисководын ашу немесе жабу





5.3. Дыбысты шығару

Дыбыстық фрагменттер WAV кеңейтілуі бар файлдарда орналасқан. Мысалы, C:\Winnt\Media каталогында Windows стандартты дыбыстары бар файлдарды табуға болады.



Келесі программа WAV-файлдарда орналасқан дыбыстық фрагменттерді шығару үшін ediaPiayer компонентін пайдалану мүмкіндігін көрсетеді.

Microsoft Windows-тың дыбыстары программасының формасы



MediaPlayer1 компонентінің қасиеттерінің мәндері
















Компонент

Мәні







DeviceType

DtAutoSelect







FileName

C:\Winnt\Media\3вук Microsoft.wav







AutoOpen

True







VisibleButtons . btNext

False







VisibleButtons .btPrev

False







VisibleButtons . btStep

False







VisibleButtons . btBack

False







VisibleButtons . btRecord

False







VisibleButtons .btEject

False
















  Листинг:

unit WinSound_; interface

uses

Windows, Messages, SysUtils,

Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, MPlayer;



type

TForm1 = class(TForm)

MediaPlayerl: TMediaPlayer; // медиаплеер

Label1: TLabel;

ListBox1: TListBox;

Label2: TLabel;



procedure FormActivate(Sender: TObject);

procedure ListBoxlClick(Sender: TObject);

procedure MediaPlayerlClick(Sender: TObject; Button: TMPBtnType;

var DoDefault: Boolean); private

{ Private declarations } public

{ Public declarations } end;

const


SOUNDPATCH='с:\winnt\media\';

var

Form1: TForm1;



implementation

{$R *.DFM}



procedure TForm1.FormActivate(Sender: TObject);

var

SearchRec: TSearchRec;



begin

Form1.MediaPlayer1.Play ;



if FindFirst(SOUNDPATCH+'*.wav', faAnyFile, SearchRec) =0 then

begin

Form1.ListBox1.Items.Add(SearchRec.Name) ;



while (FindNext(SearchRec) = 0) do

Form1.ListBox1.Items.Add(SearchRec.Name);



end;

end;

procedure TForm1.ListBoxlClick(Sender: TObject);

begin

Label2.Caption:=ListBox1.Items[ListBox1.itemlndex];



procedure TForm1.MediaPlayerlClick(Sender: TObject; Button: TMPBtnType;

var DoDefault: Boolean); begin

if (Button = btPlay) and (Label2.Caption <> '') then

begin

with MediaPlayerl do begin

FileName:=SOUNDPATCH+Label2.Caption;

Open;

end;

end;

end;

end.



Дыбысты жазу

Дыбыстық фрагментті алу үшін Windows-тың құрамындағы Звукозапись программасын пайдалануға болады. Ол үшін Пуск | Программы | Стандартные | Развлечения | Звукозапись командаларын таңдак керек.





Звукозапись

программасының диалогтық терезесі



WAV-файл келесі түрде құрылады. Алдымен дыбыстың қайнар көзін анықтау керек. Ол үшін Параметры менюінен Свойства командасын алып Регулятор громкости таңдау керек. Сонан соң Запись айырғышын таңдап Отображаемые регуляторы громкости тізіміндегі керекті сигналдарды орнату үшін жалаушаларды таңдау керек. Енді дыбысты жазуға көшуге болады.



Свойства диалогтық терезес



Уровень записи диалогтық терезе

Чтобы записать музыкальный или речевой фрагмент, надо запустить программу Звукозапись, активизировать диалоговое окно Уровень, выбрать устройство-источник звука,



Процессті тоқтату үшін Стоп батырмасын басу жеткілікті.

 

5.4. Видеороликтер мен анимацияны қарап шығу







MediaPlayer-ді қолдану программасының терезесі

MediaPlayer1 компонентінің қасиеттерінің мәні






Қаситет

Мән







Name

MediaPlayer1







FileName

delphi.avi







DeviceType

dtAVIVideo







AutoOpen

True







Display

Panel1







Visible

False




Листинг:

uses

Windows, Messages, SysUtils,

Classes, Graphics, Controls,

Forms, Dialogs, MPlayer, StdCtrls, ExtCtrls;



type

TForm1 = class(TForm)

Label1: TLabel; Panel1: TPanelButton1: TButtonMediaPlayer1: TMediaPlayer; procedure ButtonlClick(Sender: TObject);

procedure FormCreate(Sender: TObject);

private

{ Private declarations ) public

{ Public declarations } end;

var

Form1: TForm1 ;



implementation

($R *.DFM}



procedure TForm1.ButtonlClick(Sender: TObject);

begin

MediaPlayer1.Play;



end;

procedure TForm1.FormCreate(Sender: TObject);

begin

MediaPlayer1.DisplayRect:=Rect(0,0,60,60);



end;

end.

5.5 Анимацияны құру
Мысал:

Дельфи храмының эскизі





1



2




3



4



5



6

7 ...


37


Бұл есепті шешу үшін Macromedia Flash 5 программасын қолдануға болады.

Зертханалық жұмыс №4 «Полиморфизм және көрнекілік әдістер»


Полиморфизм — бұл әртүрлі кластарға кіретін әдістерге бірдей ат тағайындау мүмкіндігі. Полиморфизмнің концепциясы Концепция полиморфизма обеспечивает в случае применения метода к объекту использование именно того метода, который соответствует классу объекта.

Біреуі қалған екеуіне базалық класс болатындай үш класс анықталсын:



type

// базалық класс

TPerson = class

FName: String; // өрістің аты

Constructor Create(AName: String);

Function Info: String; virtual;

end;

// TPerson – нан туынды

TStud = class (TPerson)

FGr: Integer; // оқу тобының нөмірі

Constructor Create(Aname: String; Gr: Integer);

Function Info: String; override;



end;

// TPerson – нан туынды

TProf = class(TPerson)

FDep: String; // құжыраның аты

Constructor Create(AName: String; Dep: String);

Function Info: String; override;

end;

Әрбір класта Info әдісі анықталған. Базалық класта virtual директивасының көмегімен Info әдісі көрнекі болып анықталған. Әдістің көрнекі болып анықталуы еншілес класқа көрнекілік әдісті өз меншік әдісімен айырбас жасауға мүмкіндік береді. Әрбір еншілес кластың өзінің Info класы анықталған, ол аталық кластың сәйкес келетін әдісін айырбастайды (аталық кластың көрнекілік әдістерін ауыстыратын туындалған кластың әдісі, override директивасында орналастырылады).

Төменде әрбір класс үшін Info әдісінің анықталуы келтірілген.

function TPerson.Info: String;

begin

result := ' ';



end;

functicn TStud.Info: String;

begin

result := FName + ' группа ' + IntToStr(FGr)



end;

function TProf.Info: String;

begin

result := FName + ' кафедра ' + FDep;



end;

Екі класс та бір базалық кластан туындағандықтан студенттер мен оқытушылардың тізімін былай жариялауға болады (бұл жерде мынаны еске алу қажет, объект дегеніміз - бұл нұсқағыш):

list: array[1..SZL] of TPerson;

Тізімді осылай жариялауға болады, өйткені Object Pascal аталық кластың нұсқағышына еншілес кластың нұсқағышының мәнін меншіктеуге мүмкіндік береді. Сондықтан list массивінің элементі Tstud класының және TProf класының элементтері бола алады.

Студенттер мен оқытушылардың тізімін Info әдісін массив элементтеріне қолдану арқылы шығаруға болады. Мысалы, былай:

st := ' ';



for i := 1 to SZL do // SZL – тізім – массивінің өлшемі

if list[i] <> NIL

then st := st + list[i] .Info + #13;

ShowMessage(st);

Бағдарламаның орындалуы барысында массивтің әрбір элементі TStud типті объектіден де, TProf типті объектіден де тұра алады. Полиморфизмнің коцепциясы объектіге объектінің типіне сай келетін әдісті қолдануды қамтамасыз етеді.

Келесі бағдарлама жоғарыда қарастырылған TPerson, TStud және TProf кластарының жариялануын қолдана отырып, студенттер мен оқытушылардың тізімін қалыптастырады және шығарады. Бағдарламаның мәтіні 2.1 листингісінде, ал қарым – қатынас терезесі сурет 2.1 келтірілген.



Сурет 2.1 «Полиморфизм» бағдарламасының қарым – қатынас терезесі

2.1 листингісі Полиморфизмнің демонстрациясы

Unit polimor_;

Interface

Uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;



type

ТForm1 = class(TForm)

Edit1: TEdit;

Edit2: TEdit;

GroupBox1: TGroupBox;

RadioButton1: TRadioButton;

RadioButton2: TRadioButton;

Label1: TLabel;

Label2: TLabel;

Button1: TButton;

Button2: TButton;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

private

( Private declarations )

public

( Public declarations )

end;

type

// базалық класс

TPerson = class

FName: String; // өрістің аты

Constructor Create(AName: String);

Function Info: String; virtual;

end;

// Студент класы

TStud = class (TPerson)

FGr: Integer; // оқу тобының нөмірі

Constructor Create(AName: String; Gr: Integer);

Function Info: String; override;



end;

// Оқытушы класы

TProf = class(TPerson)

FDep: String; // құжыраның аты

Constructor Create(AName: String; Dep: String);

Function Info: String; override;

end;

const

SZL = 10; // тізімнің өлшемі



var

Forml: TForml

List: array[1..SZL] of TPerson; // тізім

n: Inteqer = 0 // тізімдегі адамдар саны



implementation

($R *.DFM}



constructor TPerson.Create(AName: string);

begin

FName:=AName;



end;

constructor TStud.Create(AName: string; Gr: integer);

begin

inherited Create(AName); // базалық кластың конструкторын шақыру

FGr:=Gr;

end;

constructor TProf.Create(AName: string; Dep: string);

begin

inherited Create(AName); // базалық кластың конструкторын шақыру

FDep:=Dep;

end;

function TPerson.Info: string;

begin

result:=FName;



end;

function TStud.Info: String;

begin

result := FName + ' группа ' + IntToStr(FGr)



end;

function TProf.Info: String;

begin

result := FName + ' кафедра ' + FDep;



end;

// Добавить батырмасына шерту

procedure ТForm1.Button1Click(Sender: TObject);

begin

if n < SZL then

begin

// объектіні класқа қосу

n:=n+1;



if RadioButton1.Checked

then // TStud объектісін құру

List[n]:=TStud.Create(Edit1.Text,StrToInt(Edit2.Text))



else // TProf объектісін құру

if RadioButton2.Checked then List[nl:=TРrоf.Create(Edit1.Text,Edit2.Text);

// енгізу өрісін тазалау

Edit1.Text :=' ';

Edit2.Text :=' ';

Edit1.SetFocus; // Тышқанның меңзері Фамилия өрісінде



end

else ShowMessage('Список заполнен!');

end;

procedure ТForm1.Button2Click(Sender: TObject);

var

i:integer; // индекс

st:string; // тізім

begin

for i:=1 to SZL do

if list[i] <> NIL then st:=st + list[i].info + #13;

ShowMessage(' Список ' + #13 + st);



end;

end.

Добавить (Button1) батырмасын басқанда іске қосылатын TForm1.Button1Click процедурасы TStud немесе TProf класының list[n] объектісін құрады. Құрылып жатқан объектінің класы RadioButton ауыстырып қосу батырмасының күйімен анықталады. Ауыстырып қосу батырмасының студент (RadioButton1) жағдайында орнатылуы TStud класын анықтайды, ал оқытушы (RadioButton2) жағдайы – TProf класын анықтайды.

Список (Button2) батырмасын басқанда іске қосылатын TForm1.Button2Click процедурасы тізімнің әрбір объектісіне (массив элементтеріне) Info әдісін қолдана отырып,барлық тізімді көрсететін жолды қалыптастырады.







































Зертханалық жұмыс №5 "Қаситтер мен әдістер"


Кластың сипатталынуы "Қос мәнді теріс емес бүтін сан" (TN2).

Қасиет – аты, мәні, тақтық, бірінші сан, екінші сан.

Әдістер:

процедуры: мәнді орнату (SetN2), сандарды ауыстыру (Swap);

функциялар: басқа санға қарағанда кіші (LessThen), ақпарат (Info);

конструктор (Create).

Листинг 2.2 «TN2» класын жүзеге асыратын бағдарламаның демонстрациясы

program Class_TN2;

{$APPTYPE CONSOLE} {Компилятор директивасыбағдарламаның жұмыс істеу режимінің тапсырмасы.}



{MS-DOS режиміне тәріздес мәтіндік режимнің эмуляторы құрылады}

uses SysUtils;

type

TN2 = class

fName: String;

fVal: integer;



constructor Create(aName: String);

procedure Swap;

function Info: String;

function LessThen(aNum: TN2): Boolean;

procedure SetVal(Value:Integer);

function GetOdd:string;

function GetD1:byte;

procedure SetD1(Value:byte);

function GetD2:byte;

procedure SetD2(Value:byte);

property Name:string read fName;

property Odd:string read GetOdd;

property Val:integer read fVal write SetVal;

property D1:byte read GetD1 write SetD1;

property D2:byte read GetD2 write SetD2;

end;

constructor TN2.Create(aName: String);

begin

fName:=aName;

fVal:=1;

end;

procedure TN2.Swap;

begin

SetVal(D2*10+D1);



end;

function TN2.Info: String;

begin

Result:='Naturalnoe dvuznachnoe '+odd+


' chislo '+Name+'='+IntToStr(Val)+#10#13+' first number='
+IntToStr(D1)+' second number='+IntToStr(D2);

end;

procedure TN2.SetVal(Value: Integer);

begin

if (Value>=0) and (Value<=99) then fVal:=Value;

end;

function TN2.LessThen(aNum: TN2): boolean;

begin

Result:= Val

end;

function TN2.GetOdd: string;

begin

if (val mod 2=1) then Result:='nechetnoe'

else Result:='chetnoe';

end;

function TN2.GetD1: byte;

begin

Result:=Val div 10;



end;

procedure TN2.SetD1(Value: byte);

begin

if Value in [0..9] then SetVal(Value*10+D2)

end;

function TN2.GetD2: byte;

begin

Result:=Val mod 10;



end;

procedure TN2.SetD2(Value: byte);

begin

if Value in [0..9] then SetVal(D1*10+Value)

end;

var a,b : TN2;

begin

a:= TN2.Create(' a ');



b:= TN2.Create(' b '); { Бағдарламаның орындалуының нәтижесі

b.Val:= 23; {

Writeln(a.Info); {
Writeln(b.Info); {

b.swap; {

a.D1:= 5; {

a.D2:= 8; {



Writeln(a.Info); {
Writeln(b.Info); {

a.Free; {

b.Free; {

Readln; {

end.

begin

SetPQ(NewP,q);



end;

 

procedure TDrob.SetQ(NewQ: longint);



begin

SetPQ(p,NewQ);



end;

 

function TDrob.GetValue: real;



begin

Result:=p/q;



end;

 

procedure TDrob.SetValue(NewValue: real);



begin

SetPQ(round(NewValue*10000),10000);



end;

end.

Delphi – дегі демонстрациялық бағдарлама

 – Drobs модульі қосылады:



uses

Windows, Messages, SysUtils, Classes, Graphics, Controls,


Forms, Dialogs, StdCtrls, Drobs

– екі бөлшекке тағайындалған айнымалылар сипатталынады:



var

Form1 : TForm1;



a,b : TDrob; 

– пішінге келесі объектілер орналастырылады:



GroupBox1, GroupBox2

бірінші және екінші бөлшектердің демонстрациясы үшін;

Label1, Edit1

бірінші бөлшектің бөліндісі

Label2, Edit2

бірінші бөлшектің бөлгіші

Label3, Edit3

бірінші бөлшектің мәні

Label4, Edit4

екінші бөлшектің бөліндісі

Label5, Edit5

екінші бөлшектің бөлгіші

Label6, Edit6

екінші бөлшектің мәні

Button1

"Орын ауыстыру"

Button2

"+"

Button3

"INFO" бірінші бөлшек үшін

Button4

"INFO" екінші бөлшек үшін

– үш процедура қосылады – бөлшектерді өңдеу үшін:



  • бірінші бөлшектің өзгеруі:

procedure TForm1.AChange(Sender: TObject);

begin

GroupBox1.Caption:=a.Name;

Edit1.Text:=IntToStr(a.p);

Edit2.Text:=IntToStr(a.q);

Edit3.Text:=FloatToStrF(a.Value,ffFixed,9,5);

end


  • екінші бөлшектің өзгеруі:

procedure TForm1.BChange(Sender: TObject);

begin

GroupBox2.Caption:=b.Name;

Edit4.Text:=IntToStr(b.p);

Edit5.Text:=IntToStr(b.q);

Edit6.Text:=FloatToStrF(b.Value,ffFixed,9,5);

end


  • екі бөлшек үшін бөлгіштің нольге айналуы:

procedure TForm1.ZeroEvent(Sender: TObject;
OldP,OldQ:longint);

begin

with sender as TDrob do

if MessageDlg('Дробь '+Name+
' получила нулевой знаменатель,'+
' который бы заменен единицей.
Восстановить прежнее значение?',
mtWarning,[mbYes,mbNo],0) = mrYes then SetPQ(OldP,OldQ);

end

– бөлшектерді басқаруға арналған көрнекілік құрауыштардың өңдеу - процедуралары қосылып жазылады:



  • Form1.OnCreate оқиғасының өңделуі (пішінді құру):

a:=TDrob.Create('a');

a.OnChange:=AChange; a.OnChange(a);

a.OnZero:=ZeroEvent;

b:=TDrob.Create('b');

b.OnChange:=BChange; b.OnChange(b);

b.OnZero:=ZeroEvent; 



  • бөлінді мен бөлгіштің терезелерінде символдық батырмалардың басылуы
    Edit1, Edit2, Edit4, Edit5 құрауыштары үшін OnKeyPress оқиғасы:

var st:string;

begin

with Sender as TEdit do

begin

st:=text;



if Key='-'

then begin

if st[1]='-' then Delete(st,1,1)

else st:='-'+st;

Text:=st;



end;

if not (Key in ['0'..'9',#8]) then Key:=#0;

if Key=#8 then if Length(st)<2 then Key:=#0;

end;

end

  • бөлінді мен бөлгіштің өзгеруі

Edit1.OnChange: a.p:=StrToInt(Edit1.Text);
Edit2.OnChange: a.q:=StrToInt(Edit2.Text);
Edit4.OnChange: b.p:=StrToInt(Edit4.Text);
Edit5.OnChange: b.q:=StrToInt(Edit5.Text);

  • бөлшектің мәнінің өзгеруі ( батырмасын басқанда)

Edit3.OnKeyPress: if Key=#13 then
a.Value:=StrToFloat(edit3.Text);
Edit6.OnKeyPress
: if Key=#13 then
b.Value:=StrToFloat(edit6.Text);

  • "Обмен" батырмасының басылуы

Button1.OnClick: a.Swap;

  • "+" батырмасын басу

Button2.OnClick: a.Add(b);

  • бірінші бөлшектің "INFO" батырмасының үстінен тышқанды жылжыту

Button3.OnMouseMove: Button3.Hint:=a.info;

  • екінші бөлшектің "INFO" батырмасының үстінен тышқанды жылжыту

Button4.OnMouseMove: Button4.Hint:=b.info; 

Зертханалық жұмыс №7 "Қарапайым Windows-қосымшасын құру"


  1. «Моя первая программа» атты тақырыбы бар пішіннің терезесін экранда бейнелейтін бағдарлама құрыңыздар. Қосымшаны іске қосыңыз.

  2. Бағдарлама өзгертулер енгізіңіздер. Тамғаны пайдалана отырып, терезенің тура ортасына «Hello world!» мәтінін шығарыңыздар. Қаріптің түсін, өлшемін өзгертіңіздер. Қосымшаны іске қосыңыздар.

  3. сәйкес келетін командалық батырманы басқанда «Hello world!» сөзінің үстіне «Я программирую на Delphi» сөзі шығатындай етіп бағдарламаны өзгертіңіздер. Мәтінді шығару үшін Edit құрауышын қолданыңыздар.

Property Visible:Booleanбастапқыда құрауыш көрінетін бола ма? соны анықтайды.

  1. Құрауыштар ағымды көмекші кеңес тұратындай етіп бағдарламаны толықтырыңыздар.

Property Hint: String – элементтер туралы қысқаша анықтама ақпараттан тұрады. Property ShowHint: Boolean – егер мәні True болса, онда меңзер элементтің үстінде тұрғанда Hint қасиетінде берілген қысқаша анықтамадан тұрады.

  1. Екі айнымалы жарияланғаннан кейін оларға қандай да бір мәндер меншіктелетіндей бағдарлама құрыңыздар. Осы мәндерді көбейтіңіздер және алынған нәтижені экранда бейнелеңіздер. Бүтін санды мәнді жолға айналдыратын функцияны қолданыңыздар.

  2. Негізгі пішіннің терезесіне Memo, Edit, Label құрауыштарын және “OK” және “Close” екі батырмасын орналастырыңыздар. Edit енгізу жолындағы мәтін “OK” батырмасына басқанда өзгеріссіз Label тамғасына және Memo көпжолды редактіріне көшетіндей бағдарлама құрыңыздар.

[имя строки ввода].SetFocus операторының көмегімен терезенің экранда пайда болған кезінде (пішіннің оқиғасын қолданыңыздар) және “OK” батырмасына басқанда енгізу жолы үшін енгізу фокусын орнатыңыздар.

Пішіннің оқиғалары:

Пішін құрылғанда және оның Visible қасиетінің мәні True болғанда, келесі оқиғалар тіркелген ретімен орындалады:

1. OnCreate – пішінді бастапқы құрғанда орындалады.

2. OnShow – пішін көрінер алдында орындалады.

3. OnActivate – пішін белсенді болғанда өрбиді.

4. OnPaintпішін экранда салынар алдында өрбиді (пішін белсенді болғанда немесе көрінетін болғанда).



OnDestroy оқиғасы – OnCreate қарама - қарсы, пішінді жойғанда орындалады.

  1. №5 – ші тапсырманың бағдарламасын - айнымалылардың мәндері енгізу жолдары арқылы енгізілетіндей етіп өзгертіңіз. Пішінге келесі әрекетке көмекші кеңес беретіндей тамғаны орналастырыңыз.
    Ұсыныс: Пішінге 4 құрауышты орналастырыңыз – Button(OK, OK, Close, Результат), 1 – Edit (айнымалылардың мәндерін енгізу үшін), 2 тамға Label - көмек кеңесті және нәтижені шығару үшін. Visible қасиетін және SetFocus әдісін қолданыңыздар.

3.2 Пернетақта арқылы берілген хабарламаны өңдеу


TWinControl класында пернетақтамен жұмыс істегенде пайда болатын оқиғалар анықталған. Оларға келесі оқиғалар кіреді:

property OnKeyDown:TKeyEvent;

Оқиға пернетақтаның пернесі басылғанда өрбиді. Оқиғаны өңдеу типі TKeyEvent:



type

TKeyEvent = procedure(Sender: TObject; var Key: Word;


Shift: TShiftState) of object;

мұндағы Sender – активті басқару элементіне сілтеме жасайтын параметр; Key – басылған перненің коды;



type

TShiftState = set of (ssShift, ssAlt, ssCtrl, ssLeft, ssRight,


ssMiddle, ssDouble);

Shift – пернетақтаның Alt, Ctrl, Shift пернелерінің және тышқанның пернелерінің күйін қадағалайды (көптіктің типі, оның элементтері: ssShiftShift батырмасы басылды, ssAltAlt батырмасы басылды, ssCtrlCtrl батырмасы басылды , ssLeft – тышқанның сол жақ батырмасы, ssRight – тышқанның оң жақ батырмасы, ssMiddle – тышқанның ортаңғы батырмасы, ssDouble – тышқанның батырмасымен екі рет шерту).



Мысал 3.2.1 OnKeyDown оқиғасының өңдеуіші Alt+Ctrl+Z пернелерінің қосындысына басқанда Form1 құрауышының пішіннің фонының түсіне clAqua (көгілдір) мәнін береді.

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);

begin

IF (Shift=[ssAlt,ssCtrl]) AND (Key=ORD(’Z’)) THEN Form1.Color:=clAqua;

end;

Пернелердің кодын VCL Reference анықтама жүйесінің Virtual Key Codes, Key Codes бөлімдерінен көруге болады.

property OnKeyPress:TKeyPressEvent;

Символдық перне басылғанда өрбитін оқиға. Оқиғаны өңдеу типі TKeyPressEvent:



type

TKeyPressEvent = procedure(Sender: TObject;


var Key: Char) of object;

Key параметрі – басылған перненің ANSI-кодын (символ) анықтайды.



property OnKeyUp:TKeyEvent;

Оқиға пернетақтадағы басылған пернені босатқанда өрбиді. Оқиғаны өңдеу типі TKeyEvent (жоғарыдағы OnKeyDown оқиғасын қараңыздар).



Мысал 3.2.2 OnKeyPress оқиғасының өңдеуіші Form1 құрауышы үшін «R» символдық пернесі басылғанда пішіннің фонының түсін қызылға өзгертеді, ал осы пернені босатқанда OnKeyUp оқиғасының өңдеуіші пішіннің фонының түсіне алғашқы мәнін орнатады (clBtnFace).

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);

begin

If Key='R' then Form1.Color:=clRed;

end;

{пернеге басқанда пернетақтаның регистрі және тілдік бөлінуі есепке алынады}

procedure TForm1.FormKeyUp(Sender: TObject;
var Key: Word; Shift: TShiftState);

begin

If Key=ORD('R') then Form1.Color:=clBtnFace;

end;

Осымен қатар TwinControl класында терезелік элемент активті болғанда немесе активті болмаған жағдайда өрбитін оқиғалар анықталған:



property OnEnter:TNotifyEvent;

Терезелік элемент енгізу фокусын алғанда өрбитін оқиға. Оқиғаны өңдеу типі TNotifyEvent.



type

TNotifyEvent = procedure(Sender: TObject) of object;

мұндағы Sender оқиға көзі - объектісіне нұсқаудан тұрады.

property OnExit:TNotifyEvent;

Терезелік элемент енгізу фокусын жоғалтқанда өрбиді.



TControl класында басқару элементі тышқан, перне және таймер арқылы қалыптастырылған оқиғаларды қалай қабылдайтынын анықтайтын қасиет бар:

property Enabled: Boolean;

Егер қасиетің мәні TRUE болса, онда – қабылдайды,


FALSE – қабылдамайды.

TScreen класында 2 оқиға анықталған:

property OnActiveControlChange: TNotifyEvent;

Оқиға пішіндегі активті басқару элементі өзгергенде өрбиді.



property OnActiveFormChange: TNotifyEvent;

Оқиға бағдарламада активті элемент өзгергенде өрбиді.


3.3 Тышқан арқылы берілген хабарламаны өңдеу


TControl класында тышқанды басқарғанда өрбитін оқиғалар анықталған.

property OnClick:TNotifyEvent;

Басқару элементін тышқан арқылы таңдағанда өрбитін оқиға (тышқанның көрсеткіші басқару элементінің үстінде орналасқанда тышқанның сол жақ пернесі басылады және босатылады).



property OnDblClick:TNotifyEvent;

Басқару элементіне тышқанның сол жақ пернесімен екі рет шерткенде өрбитін оқиға.



property OnMouseDown:TMouseEvent;

Тышқанның көрсеткіші басқару элементінің үстінде тұрғанда, тышқанның пернесі басылғанда өрбитін оқиға. Оқиғаны өңдеу типі TMouseEvent:



type

TMouseEvent = procedure(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X,Y:Integer) of object;

мұндағы Sender – оқиға болған құрауышқа нұсқайтын параметр;



type

TMouseButton = (mbLeft, mbRight, mbMiddle);

Button параметірінің мәні тышқанның қай батырмасы басылғанын анықтайды (mbLeft – сол жақ, mbRidht – оң жақ , mbMiddle - ортаңғы); Shift – пернетақтаның Alt, Ctrl және Shift пернелерінің және тышқанның пернесінің күйін қадағалайды (жоғарыдағы OnKeyDown оқиғасын қараңыздар); X,Y – Sender құрауышының клиенттік аймағындағы тышқанның көрсеткішінің жергілікті координаталары (пиксельмен беріледі).

property OnMouseMove:TMouseMoveEvent;

Тышқанның көрсеткіші басқару элементінің үстінде орналасқан кезде, оны жылжытқанда өрбитін оқиға. Оқиғаны өңдеу типі TMouseMoveEvent:



type

TMouseMoveEvent = procedure(Sender: TObject; Shift: TShiftState; X,Y:Integer) of object;

Параметлері OnMouseDown оқиғасындағы сияқты мағынаны береді.

property OnMouseUp:TMouseEvent;

Тышқанның көрсеткіші басқару элементінің үстінде орналасқан кезде, тышқанның пернесін босатқанда өрбитін оқиға. Оқиғаны өңдеу типі TMouseEvent (жоғарыдағы OnMouseDown оқиғасын қараңыздар).



Мысал 3.3.1 Бұл мысал пішінде төрт панелі бар StatusBar1 (Win32 парағы) қалып – күй жолының болуын талап етеді. . Панельді қосу үшін қалып – күй жолының Panels қасиетінің мәндер өрісінің үш батырмасына шерту арқылы Editing StatusBar1.Panels терезесін шақырыңыздар. Редактірлеу терезесінің басқару панельінің Add New батырмасына төрт рет шертіңіздер. (Мысалды орындамас бұрын әрбір панельдің Width қасиетіне 150 мәнін орнатыңыздар). Қолданушы тышқанның батырмасына басқанда, тышқанды жылжытқанда және тышқанның батырмасын босатқанда пішінде тіктөртбұрыш тартылады. Тышқанның батырмасы босатылғанда тіктөртбұрыш пішіннің канвасында пайда болады. Оның сол жақ жоғарғы және оң жақ төменгі бұрыштары тышқанды басқан және босатқан уақыттағы тышқанның көрсеткішінің орналасуымен анықталады. Қолданушы тышқанды жылжытқанда тіктөртбұрыштың сол жақ жоғарғы (Left, Тор) және оң жақ төменгі (Right, Bottom) бұрыштарының координаталары қалып –күй жолында бейнеленеді. Горизонталь осьі солдан оңға қарай жүреді. Вертикаль ось – жоғарыдан төмен қарай бағытталады. Осьтер тек қана оң мәндерден тұрады.

var

StartX, StartY: Integer; {Пішіннің модульінің интерфейс бөлімінде жариялайды}



{Бұл кодты пішіннің OnMouseDown оқиғасының өңдеуіші ретінде қолданыңыздар: }

procedure TForm1.FormMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X,Y: Integer);

begin

StartX := X;

StartY := Y;

end;

{ Бұл кодты пішіннің OnMouseUp оқиғасының өңдеуіші ретінде қолданыңыздар: }

procedure TForm1.FormMouseUp(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X,Y: Integer);

begin

Form1.Canvas.Rectangle(StartX, StartY, X, Y);

StatusBar1.Panels[0].Text := '';

StatusBar1.Panels[1].Text := '';

StatusBar1.Panels[2].Text := '';

StatusBar1.Panels[3].Text := '';



end;

{ Бұл кодты пішіннің OnMouseMove оқиғасының өңдеуіші ретінде қолданыңыздар: }

procedure TForm1.FormMouseMove(Sender: TObject;
Shift: TShiftState; X,Y: Integer);

begin

if ssLeft in Shift then { батырманың басылғанын тексеріңіздер }

begin

if Y > StartY then

begin

StatusBar1.Panels[0].Text := 'Top: ' + IntToStr(StartY);

StatusBar1.Panels[2].Text := 'Bottom: ' + IntToStr(Y);

end

else

begin

StatusBar1.Panels[0].Text := 'Top: ' + IntToStr(Y);

StatusBar1.Panels[2].Text := 'Bottom: ' + IntToStr(StartY);

end;

if X > StartX then

begin

StatusBar1.Panels[1].Text := 'Left: ' + IntToStr(StartX);

StatusBar1.Panels[3].Text := 'Right: ' + IntToStr(X);

end

else

begin

StatusBar1.Panels[1].Text := 'Left: ' + IntToStr(X);



StatusBar1.Panels[3].Text := 'Right: ' + IntToStr(StartX);

end;

end;

end;











































































Зертханалық жұмыс №8 “TForm объектісі


  1. Жаңа жоба құрыңыздар. Пішінге тақырып беріңіздер "Лабораторная работа №8, Фамилия Имя". Жеке каталогқа жобаны сақтаңыздар.

  2. Пішіннің өлшемін 500 де 400 пиксельге және орнын экранның центрі бойынша орнатыңыз.

  3. Пішінге өзіңіздің фирмалық иконыңызды орнатыңыз. Осы иконканы қосымшаға да орналастырыңыздар. (Қосымшаны көріңіздер).

  4. Пішінге "Моя формочка" деген көмекші кеңесті орнатыңыздар. Көмекші кеңестің түсіне қошқыл жасыл түс беріңіздер. (clLime).

  5. Тышқанның көрсеткішін пішіннің үстімен жылжыту кезінде, ол өз түсін бұрыштардағы мәндерге байланысты баяу өзгерту керек: сол жақтағы жоғарғы бұрыштың түсі - қара, сол жақтағы төменгі бұрыштың түсі - көгілдір, оң жақтағы жоғарғы - қызыл, оң жақ төменгі - ақ. Ctrl-Alt-C басу арқылы осы режимді қосуға/өшіруге болады.

  6. Тышқанның екі рет шертілгенде немесе Alt-X батырмаларының комбинациясына немесе F10 батырмасына басқанда пішін жабылады (рұқсат сұрату арқылы).

  7. Бағыттары көрсетілген пернелерге басқанда пішін жылжиды (экранның шекарасында).

  8. Тышқанның оң жақ батырмасына басқанда пішін жан – жағынан 5 пиксельге кішірейеді. Тышқанның оң жақ батырмасы мен Shift пернесіне басқанда пішін жан – жағынан 5 пиксельге үлкейеді.

Өздіктеріңнен.

  1. Пішіннің өлшемі өзгергенде шертпенің дыбысы шығады, ал өлшемнің өзі экранның төменгі жағындағы минимизация терезесінде көрсетіледі.

  2. Тышқанның ортаңғы батырмасына немесе екі шеткі батырмаларына басқанда пішін тышқанның көрсеткішінің нұсқағышына байланысты центрленеді.

Қосымша.

  1. Beep(0) процедурасы қысқа дыбыстық дабылды шақырады.

  2. RGB(r,g,b) функциясы r,g,b (от 0 до 255) параметрінің мәніне байланысты қызыл, жасыл және көк түстердің реттік нөмірін қайтарады.

  3. Application объектісі бағдарламаның маңызды қасиеттері мен әдістерін инкапсуляция жасайды Application объектісінің кейбір қасиеттері:

HintColor

Оперативті көмекші кеңестің таңбашасының түсі.

HintHidePause

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

Icon

Минимизацияланған бағдарлама батырмасының пиктограммасы.

Title

Минимизацияланған бағдарлама батырмасындағы мәтін.

  1. Screen объектісі ДК экранының жұмысын жеңілдететін маңызды қасиеттер мен әдістерден тұрады. Screen объектісінің кейбір қасиеттері:

Fonts

Барлық экрандық қаріптердің тізімі.

Height, Width

Экранның ұзындығы мен ені.

IconFont

Минимизацияланған бағдарлама батырмасының мәтінінің қаріпі.

PixelsPerInch

Пиксельден дюмге өтетін экранның рұқсат беретін қабілеті.

3.4 Басқару элементтерінің тасуын қамтамасыз ететін сипаттамалар (Drag & Drop тетігі)


Экранда бейнеленетін басқару элементтері құрауыштар сияқты ерекше қасиеттерге ие, оларды экран бойынша жылжытуға болады және оларды басқа басқару элементтеріне түсіруге болады. Тасу (Drag & Drop) сәйкес басқару элементін тышқанмен керекті орынға сүйреу арқылы жүзеге асады. Тышқанның сол жақ батырмасын босатқанда құрауыштың сол жақ жоғарғы бұрышы тышқанның көрсеткіші нұсқаған нүктеге орналасады.

Басқару элементтерін тасуға тағайындалған TControl класының негізгі сипаттамаларын қарастырайық.



Қасиеті (Properties):

property DragCursor: TCursor;

type

TCursor = -32768..32767;

Басқару элементін тасыған уақыттағы тышқанның көрсеткішінің түрін анықтайды.

property DragMode: TDragMode;

type

TDragMode = (dmManual,dmAutomatic);

Басқару элементін тасудың режимін орнатады: егер dmAutomatic (Автоматты түрде) мәнін қабылдаса, онда басқару элементін тікелей тышқанның көмегімен тасуға болады, егер dmManual (Қолмен) мәні тағайындалса, онда тікелей тышқанның көмегімен тасу мүмкін емес.

Оқиғалар (Events):

property OnDragDrop: TDragDropEvent;

Басқару элементіне басқа тасылатын басқару элементі түсірілгенде өрбитін оқиға. Оқиғаның өңдеуіші TDragDropEvent типінен тұрады:



type

TDragDropEvent = procedure(Sender, Source: TObject;


X, Y: Integer) of object;

мұндағы Sender тасылатын басқару элементі түсірілген объект; Source – тасылатын басқару элементі; X, Y – Source басқару элементін түсірген сәттегі тышқанның көрсеткішінің координаталары (Sender клиенттік аймағының координаталар жүйесіндегі). Оқиға шынымен Source басқару элементін Sender объектісіне түсірген кезде ғана өрбиді.



property OnDragOver: TDragOverEvent;

Sender басқару элементінің үстіне басқа тасылған Source басқару элементі орналастырылғанда өрбитін оқиға. Оқиғаның өңдеуіші TDragOverEvent типінен тұрады:



type

TDragOverEvent = procedure(Sender, Source: TObject; X,Y:Integer;


State: TDragState; var Accept: Boolean) of object;

Sender, Source, X, Y параметрлері OnDragDrop оқиғасындағы сияқты мағына алады; State – тасу режимінің күйін анықтайды (dsDragEnter – тасылатын объект басқару элементіне түседі, ол арқылы оны жылжытуға болады; dsDragLeave – тасымалданатын элемент осы басқару элементін тастап кетеді; dsDragMove – тасылатын элемент басқару элементінің бойымен жылжиды); Accept – егер Sender объектісі тасымалданған элементті қабылдайтын болса, онда оқиғаның өңдеуіші True мәнін, ал кері жағдайда False мәнін беретін параметр.



property OnEndDrag: TEndDragEvent;

Ағымды басқару элементін тасу аяқталғанда өрбитін оқиға. Оқиғаның өңдеуіші TEndDragEvent типінен тұрады:



type

TEndDragEvent = procedure(Sender, Target: TObject;


X, Y: Integer) of object;

мұндағы Sender тасылатын басқару элементі; Target – үстінде тасылған басқару элементі орналасқан объект; X, Y – тасу аяқталған кездегі тышқанның көрсеткішінің координаталары. Оқиға кез – келген тасуды аяқтағанда және Target Sender басқару элементін қабылдағанда, қабылдамағанда өрбиді. Соңғы жағдайда тасылатын басқару элементі өз орынында қалады.



property OnStartDrag: TStartDragEvent;

Ағымды басқару элементі тасылғанда өрбитін оқиға. Оқиғаның өңдеуіші TStartDragEvent типінен тұрады:



type

TStartDragEvent = procedure(Sender: TObject;


var DragObject: TDragObject) of object;

мұндағы Sender – тасылатын басқару элементі; DragObject – тасу кезінде басқару элементінің кескінін қалыптастыратын арнайы объектіге сілтемеден тұрады. Үнсіздікпен nil – ге тең болады, яғни құрауыштың өзі тасылатын болады.

Бұл оқиғалардың барлығы қорғалған, бірақ ұрпақтар класында олар жинақталған болып жарияланады, сондықтан объект инспектрінде пайда болады. Оқиғалар қажетті түрде жазатын әдістерге нұсқағыш болып табылады, талап еткен жағдайда сәйкес оқиғаны өңдеп береді. Бұл әдістің дайындамасын қалыптастыру үшін инспектор объектісінен сәйкес оқиғаны тышқанның көмегімен активтеу керек.

TControl класында сүйреу режимін іске қосатын әдіс анықталған:

procedure BeginDrag(Immediate: Boolean;
Threshold: Integer = -1);

BeginDrag әдісі бағдарламаның кодында басқару элементінің DragMode қасиетінің мәніне dmManual орнатылғанда шақырылады. Егер DragMode – dmAutomatic, онда әдіс автоматты түрде шақырылады.

Егер параметр Immediate - TRUE, онда тышқанның көрсеткіші DragCursor қасиетінде берілген түрді қабылдайды және жылжыту тез арада басталады. Егер Immediate – FALSE, онда тышқанның көрсеткішінің түрі өзгермейді, және қолданушы тышқанның көрсеткішін Threshold параметрінде көрсетілген пиксель санына жылжытқанша сүйреу басталмайды. Егер әдісті шақырғанда Threshold параметрі түсірілсе, онда BeginDrag Mouse ауқымды айнымалысының DragThreshold қасиетінің мәнін қолданады.

Immediate – қа FALSE орнататын болсақ, онда басқару элементі тасу амалын бастамай – ақ тышқанның шертуін қабылдайды.



Мысал 3.4.1 Басқару элементін тасуды қамтамасыз ететін бағдарлама.

Басқару элементін тасуды жүзеге асыратын бағдарлама жазайық. Ол үшін пішінге GroupBox тақырыбы бар панель мен Button батырмасын орналастырайық. Батырма мен оған орналасқан панельді пішіннің бойымен жылжытайық.

Батырманы жылжыту үшін оның DragMode қасиетіне dmAutomatic мәнін беру керек, ал пішін мен панель үшін OnDragDrop және OnDragOver оқиғаларының өңдеуішін жазу керек. Батырмаға OnStartDrag және OnEndDrag оқиғаларының қолданылғанын көрсету үшін батырмалардың аттарын өзгертетін оқиғалардың өңдеуішін жазу керек.

Тапсырманың шешімін келесі түрде ұйымдастыруға болады:



  1. Button1 қасиетінің DragMode қасиетіне dmAutomatic мәнін тағайындайық. Ол оның жылжуын тікелей тышқанның көмегімен асыруға мүмкіндік береді.

  2. Пішін тасылатын батырманы қабылдайтындай күйде болатындай шартты ұйымдастырайық. Ол үшін пішіннің OnDragOver оқиғасының өңдеуішін қалыптастырайық.

procedure TForm1.FormDragOver(Sender, Source: TObject;

X, Y: Integer; State: TDragState; var Accept: Boolean);



begin

Accept:= True; {Оқиға пішіннің жаңа орнына жылжығаннан кейін батырманың босатылуына мүмкіндік береді}



end;

  1. Пішінге батырманы тасуды аяқтауда қажетті әрекетті іске асыратын OnDragDrop оқиғасының өңдеуішін құрайық:

procedure TForm1.FormDragDrop(Sender, Source: TObject; X, Y: Integer);

begin

WITH Source AS TButton DO {Source параметрін TButton типіне әкелу, өйткені тасылатын батырма осындай типтен тұрады}

BEGIN

Parent:= Pointer(Sender); {Батырмаға үлкен құрауыш беріледі - Parent қасиетіне Sender (басқару элементі түсірілетін құрауыш) қасиетінің мәні тағайындалады, оны алдын – ала Pointer типіндегі нұсқағышқа айналдырамыз}

Left:= X; {Басқару элементінің сол жақ жоғарғы бұрышының

Top:= Y; координаталарына басқару элементі түсірілген құрауыштың ішіндегі тышқанның көрсеткішінің жергілікті координаталары меншіктеледі

END;

end;


  1. Аналогиялық түрде панель үшін OnDragOver және OnDragDrop оқиға өңдеуішін құрастырайық. Олар пішін үшін құрастырылған өңдеуіштерден аттары бойынша ғана өзгеретіндіктен, құрылған әдістерді меншіктеуді қолдануға болады.

  2. Батырма үшін оны тасудың басы мен аяғының оқиғасының өңдеуішін құрастырайық (OnStartDrag және OnEndDrag оқиғалары), олар батырманың атын өзгертеді.

procedure TForm1.ButtonStartDrag(Sender: TObject; var DragObject: TDragObject);

begin

WITH Sender AS TButton DO

BEGIN

Caption:= ’Перемещается’; {Егер тасымалданатын басқару элементі TButton типін немесе TButton типінің ұрпағын иемденсе, онда батырмаға«Перемещается» деген ат беріледі}

END;

end;


  1. Аналогиялық түрде батырмаға OnEndDrag оқиғасының өңдеуішін құрайық:

procedure TForm1.ButtonEndDrag(Sender, Target: TObject; X, Y: Integer);

begin

WITH Sender AS TButton DO

BEGIN

Caption:= ’Не перемещается’; {Егер тасымалданатын басқару элементі TButton типін немесе TButton типінің ұрпағын иемденсе,



онда батырмаға«Не перемещается» деген ат беріледі}

END;

end;

Бұл өңдеуіште Sender - тасыланатын басқару элементі (батырма); Target – тасылатын басқару элементі түсірілген құрауыш (пішін немесе панель).
































Зертханалық жұмыс №9 "Экрандық объектілерді сүйреу"


Экрандық объектілерді сүйреу тышқанның көмегімен жеке құрауыштардың арасында ақпаратты тиімді тасымалдауға мүмкіндік береді. Жолды бір тізімнен екінші тізімге сүйреу тетігін мысалда қарастырайық. Жоғарғы жақта жазбасы бар ListBox1 және ListBox2 құрауыштарынан тұратын жоба құрыңыздар. Бірінші тізімді апта аттарының атымен толтырыңыздар. Келесі қадамдар сүйреудің төрт қадамынан тұратын хабарламаны өңдеу мысалдарынан тұрады.

1 этап. Сүйреудің басталуы. Тышқанды сол жақ батырмасына басып жылжытқанда өрбиді. ListBox1 құрауышының DragMode қасиетіне dmAutomatic орнатыңыздар, яғни құрауыш өзіне осы этаптың өңделуін алады. Егер осы қасиетке dmManual орнататын болсақ, онда бағдарлама құрушы сүйреудің басын (мысалы, MouseDown оқиғасы бойынша) және оның тетігін іске қосуды (BeginDrag әдісі) өзі қолмен анықтауы керек болады. Сүйреуді бастау сәтінде құрауыш OnStartDrag оқиғасын өрбітеді. Осы қасиетті өңдеу оқиғасына мына жолды жазыңыздар:

Color:=clRed;



2 этап. Құрауыштан объектіні сүйреу. Тышқанның көрсеткішін құрауыштың үстінен жылжытқанда болатын сүйреуде ол OnDragOver оқиғасын өрбітеді. Осы оқиғаны өңдеудің келесі параметрлерін қарастырайық: Source - объект — сүйреудің көзі, X,Y – тышқанның көрсеткішінің координаталары, Accept – құрауыш сүйреп әкелінген ақпаратты қабылдай ма? жоқ па?, соны анықтайтын буль типтес айнымалы. ListBox2 құрауышының осы оқиғасы үшін келесі жолды жазыңыздар, ол тек ListBox1 құрауышынан ғана сүйреуге рұқсат береді:

Accept := Source=ListBox1;



3 этап. Ақпаратты толық құрауышқа лақтыру. Құрауыштан тышқанның батырмасын босатқан сәтте орындалатын сүйреу OnDragDrop оқиғасын өрбітеді. Осы оқиғаның өңдеуішіне сүйреу сәйкес келетін қимыл жазылуы керек. Біздің жағдайда ол жолды сол жақ тізіменен оң жақ тізімге тасымалдау қимылы. ListBox2.OnDragDrop оқиғасының өңдеуішіне ListBox1 тізімінде ерекшеленген жолды ListBox2 тізіміне қосатын операторды жазыңыздар:

with ListBox1 do ListBox2.Items.Add(Items[ItemIndex]);

4 этап. Сүйреуді аяқтау. Құрауыш - сүйреудің көзі оны босатқан сәтте OnEndDrag оқиғасын өрбітеді, оның Target параметрі басқа толық құрауышқа сәйкес келеді (біздің жағдайда ListBox2). Бұл оқиғаның өңдеуішіне бірінші тізімнен таңдап алынған жолды жоятын операторды және пішіннің түсін өзгертетін операторды жазыңыздар:

if Target = ListBox2 then
with ListBox1 do Items.Delete(ItemIndex);

Color := clYellow;

Компиляцияны орындаңыздар және сүйреу тетігінің жұмысын тексеріңіздер.

Өздік жұмысқа тапсырма9_1

Екі ListBox тізімінен, Edit құрауышынан, Panel құрауышынан, екі батырмадан және төрт жазбадан тұратын жоба құрыңыздар. Берілген жоба келесі функциялардың жұмысын қамтамасыз етуі керек:



  • жолды Edit құрауышынан екі тізімге тасымалдау;

  • жолды бірінші тізімнен екінші тізімге тасымалдау және керісінше;

  • жолды қара панельге сүйреу арқылы жою;

  • файлдағы жолды бірінші тізімде оқу;

  • екінші тізімнің жолдарын файлға сақтау.

Көп таңдау жасалғанда барлық таңдап алынған жолдарды тасымалдау.

Edit - тен <Ctrl> пернесі басылған тасымал жасалғанда, көшірме алынады (тышқанның көрсеткішінің түрі – crCross).

Өздік жұмысқа тапсырма9_2

Екі ListBox тізімдерінен, Edit құрауышынан және екі батырмадан тұратын жоба құрыңыздар. Ерекшеленген сөзді тасымал жасағанда орындалатын функцияларды іске асыратын бағдарлама құрыңыздар:



  • ListBox1пішін: ListBox1 – дегі сөз қосарланады;

  • ListBox2пішін: ListBox2 – дегі сөз жойылады;

  • ListBox1 ListBox2: сөздердің қарапайым тасымалдануы;

  • ListBox1 Edit1, ListBox2  Edit1: сөздердің орынмен ауысуы;

  • Edit1 ListBox1, Edit1 ListBox2: тышқанның сол жақ пернесі – тасымал, оң жағы – сөздің көшірмесі.

  • ListBox1 (ListBox2) Button1: файлдан барлық тізімді оқу;

  • ListBox1 (ListBox2) Button2: барлық тізімді файлға сақтау.

Көп таңдау жасалғанда барлық таңдап алынған жолдарды тасымалдау.

Edit1 – ден көшірмесін алғанда тышқанның көрсеткішінің түрі – crCross.

Ұсыныс :

Edit1 – ден сүйреудің бастамасын өңдеуді қолмен ұймдастырыңыздар, яғни Edit1.DragMode=dmManual орнатыңыздар және Edit1.OnMouseDown өңдеуішіне келесіні жазыңыздар (бұл толық емес):

if (Button=mbLeft) and (Edit1.Text<>'') then
Edit1.BeginDrag(False);

3.5 Диалог терезелері. Dialogs парағындағы Delphi құрауыштары (Open Dialog, Save Dialog, Font Dialog және т.б.)


Windows жанұясының операциялық жүйелері файлды ашуға және сақтауға, қаріпті, түсті, принтерді және басқаларды таңдауға және баптауға тағайындалған стандартты диалог терезелерінен тұрады. Delphi ортасы да стандартты диалог терезелерінен тұрады. Ол үшін Delphi – дің құрауыштар кітапханасында өз кезегінде тікелей TComponent класының ұрпақ класы болып келетін TCommonDialog (Жалпы диалог) бір ата – тек класына қатысты арнайы кластар анықталған. Диалог терезелері көрнекілік емес құрауыштардың мысалы болып табылады. Бұны мынадан байқауға болады, конструктірлеу кезеңінде пішінге орналастырылатын құрауыштың сыртқы көрінісі бағдарламаның орындалу барысындағы диалог терезесінің сыртқы көрінісімен сай келмейді.

Delphi - дің диалог терезелерін жүзеге асыру ерекшелігі олардың Windows жанұясының операциялық жүйесіндегі стандартты мүмкіншіліктерді қолдануы болады. Мысалы, Delphi - дің диалог терезелері операциялық жүйеде қолданылатын тілдегі ақпараттан тұрады.



Dialogs – Құрауыштар Палитрасындағы стандартты диалогтардың парағы.

Open Dialog – ашылатын файлдың атын таңдауға тағайындалған диалог терезелері.

Иерархиясы:



TObjectTPersistentTComponentTCommonDialog.

Ашылатын файлдың атын таңдауға арналған диалог терезелері TOpenDialog класының данасы болып табылады. Ол компьютердің файлдық жүйесін көруге және керекті файлдың атын таңдауға тағайындалған (3.5.1 суретін қараңыздар).

Байқағандарыңыздай Open Dialog құрауышы файлды автоматы түрде ашуға тағайындалмаған. Ол тек қолданушының таңдаған файлының атын ғана алуға мүмкіндік береді. Файлды тікелей ашу Object Pascal тілінің стандартты процедураларының көмегімен немесе арнайы әдістермен жүзеге асырылады. Мұндай әдістер мысалы TStrings класында анықталған.



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

property DefaultExt: String – егер файлдың кеңейткіші көрсетілмесе оның атына қосылып жазылатын кеңейткіштен тұрады. Бөлетін нүктені қоспағанда үш символдан тұруы мүмкін.

property FileName: TFileName;

type

TFileName = String;

Ол таңдап алынған файлдың атынан тұрады. Ол ат диалог терезесінің Имя файла: (File Name:) жолына орналастырылады.

property Files: TStrings – ерекшеленген файлдардың аттарының тізімінен тұрады. Қасиет тек оқуға ғана тағайындалған.

property Filter: String – бір немесе бірнеше файлдық сүзгілердің сипаттамасынан тұрады. Файлдық сүзгі – арнайы символдардан тұратын файлдың атының (файлдың қалқасы) бір немесе бірнеше шаблоны. Мысалы, *.pas қалқасы қолданушыға диалог терезесінде тек қана .pas кеңейткіші бар файлдарды ғана бейнелеуге көмектеседі. Filter қасиетінде көлбеу сызықтармен бөлінген бірнеше символдар тізбегінің жұбы болуы мүмкін. Әрбір осындай жұп бір файлдық сүзгіге сай келеді және өз кезегінде көлбеу сызықпен бөлінген екі бөліктен тұрады. Бірінші бөлік берілген сүзгі үшін диалог терезесінің Тип файлов: (Files of type:) аралас жолында шығатын мәтінді береді, ал екінші бөлім сүзгінің өзінен тұрады. Сүзгі үтір мен нүкте арқылы аударылған файл қалқасын береді. Мысалы, оператордың орындалуының нәтижесінде

OpenDialog1.Filter := Delphi модульдерінің файлдары(*.pas)|*.pas|' +

'Мәтіндік құжаттар (*.txt, *.doc)|*.txt;*.doc';

диалог терезесінің Тип файлов: аралас жолы екі жолдан тұратын болады:

Delphi модульдерінің файлдары (*.pas)

және


Мәтіндік құжаттар (*.txt, *.doc)

Бірінші жолға *.pas файлдық сүзгі, ал екінші жолға *.txt; *.doc файлдық сүзгі сай келеді. Сәйкес бірінші сүзгіні таңдағанда файлды ашу диалог терезесінде .pas кеңейткіші бар файлдар ғана бейнеленеді, ал екінші сүзгіні таңдағанда - .txt немесе .doc кеңейткіші бар файлдар бейнеленеді.

Пішінді конструктірлеу кезеңінде Объект Инспектірінен осы қасиетті таңдағанда көмекші терезе ашылады, оның көмегімен көлденең бөлгіш сызықтарды жазбай – ақ сүзгінің мәтінін және сүзгінің өзін беруге болады. property FilterIndex: Integer – диалог терезесі ашылғанда үнсіздікпен сүзгінің қандай элементі көрсетілетінін анықталады. Элементтерді нөмірлеу бір санынан басталады. Әдетте сүзгінің бірінші элементі қолданылады.

property InitialDir: String – құрамы диалог терезесі ашылғанда пайда болатын қапшықты анықтайды. Егер осы қасиеттің мәні тағайындалмаса, онда ағымды қапшық немесе қолданушының диалог терезесіне соңғы рет қатынағанда ашылған қапшық ашылады.

property Title: String – диалог терезесінің тақырыбын береді.

property Options: TOpenOptions;

type

TOpenOption = (ofReadOnly, ofOverwritePrompt, ofHideReadOnly, ofNoChangeDir, ofShowHelp, ofNoValidate, ofAllowMultiSelect, ofExtensionDifferent, ofPathMustExist, ofFileMustExist, ofCreatePrompt, ofShareAware, ofNoReadOnlyReturn, ofNoTestFileCreate, ofNoNetworkButton, ofNoLongNames, ofOldStyleDialog, ofNoDereferenceLinks);



TOpenOptions = set of TOpenOption;

Ол диалог терезесінің сипаттамасын орнатады және мән ретінде келесі шамалардың кез – келгенін ала алады:



ofReadOnly Только для чтения файлының ашылуының қосқышын береді (орнатады),

ofOverwritePrompt – файлды сақтағанда хабарлама шығады, егер мұндай файл бар болатын болса, онда файлды ауыстыруға растауды сұрайды,

ofHideReadOnlyТолько для чтения файлының ашылуының қосқышын тығып қояды (үнсіздікпен беріледі),

ofFileMustExist – бұл мән берілгенде тек бар файлдарды ғана беруге болады, қарсы жағдайда файл жоқ деген хабарлама шығады,

ofNoReadOnlyReturn – бұл параметр берілгенде Только для чтения файлын таңдағанда файлды ашуға болмайды деген хабарлама шығады,

ofAllowMultiSelect – бірден көп файлдарды ерекшелеуге мүмкіндік береді.

Файлды ашу диалог терезесін қолданғанда ерекше орынды TOpenDialog класында анықталған Execute әдісі алады.



function Execute: Boolean; override;

Диалог терезесін экранға модальды режимде орналастырады. Модальды режим дегеніміз - қосымшаның орындалуы қолданушы модальды терезені жаппағанша тоқтамайды. Функция True мәнін қайтарады, егер терезе Открыть батырмасы арқылы жабылса, және False, егер Отмена батырмасы арқылы жабылса.



TOpenDialog класында OnFolderChange, OnSelectionChange және OnTypeChange оқиғалары анықталған:

property OnFolderChange: TNotifyEvent;

Диалог терезесінің көмегімен қандай да бір қапшық ашылғанда немесе жабылғанда өрбиді.



property OnSelectionChange: TNotifyEvent;

Ерекшеленген файл өзгергенде өрбиді.



property OnTypeChange: TNotifyEvent;

Берілген сүзгі бойынша анықталған, диалог терезесінде бейнеленетін файлдардың типі өзгергенде өрбиді.



Мысал 3.5.1 Button1 құрауышының OnClick оқиға өңдеуіші ашылатын файлдың атын таңдауға арналған диалог терезесін ашады және таңдап алынған файлдың бірінші жолын Edit1 құрауышына орналастырады.

procedure TForm1.Button1Click(Sender: TObject);

var F: TextFile;

S: String;



begin

IF OpenDialog1.Execute THEN {Экранға файлды ашу диалог терезесін шығару}

BEGIN {Егер терезе Открыть батырмасы арқылы жабылған болса, онда ...}

{Диалог терезесінің файл атында таңдап алынған атты файлдық айнымалымен байланыстыру}

AssignFile(F,OpenDialog1.FileName);

Reset(F); {Файлды ашу}

Readln(F,S); {Файлдан бірінші жолды S жолдық айнымалысына есептеу }

Edit1.Text:=S; { Edit1құрауышындағы S жолын шығару}

CloseFile(F); {Файлды жабу}

END;

end;

Мысал 3.5.2 Button2 құрауышы үшін OnClick оқиға өңдеуіші ашылатын файлдың атын таңдауға арналған диалог терезесін ашады және файлдың мәтінін Memo1 құрауышына орналастырады.

procedure TForm1.Button2Click(Sender: TObject);

var fFileName: TfileName;

begin

WITH OpenDialog1 DO

BEGIN

Filter := 'All files|*.*'+'Text files|*.txt,*.doc';

FilterIndex := 2;

IF Execute THEN

BEGIN

{Таңдап алынған файлды Memo1 құрауышында ашады}

Memo1.Lines.LoadFromFile(FileName);



{ fFileName айнымалысына таңдап алынған файлдың толық атын жазу}

fFileName := OpenDialog1.FileName;



{Файлдың толық атын пішіннің тақырыбына шығару}

Form1.Caption := fFileName;



{Label1 құрауышына толық атынан бөліп алып, дискі және каталогтың атынсыз файлдың атын шығару}

Label1.Caption := ExtractFileName(fFileName);



END;

END;

end;

Save Dialog – сақталатын файлдың атын таңдау диалог терезесі.

Иерархиясы:



TObjectTPersistentTComponentTCommonDialogTOpenDialog.

Save Dialog диалог терезесі Open Dialog терезесіне өте ұқсас, бірақ одан айырмашылығы ол файлды сақтауда қолданылады (сурет 3.5.2 көріңіздер).

Сақталатын файлдың атын таңдау диалог терезесі TOpenDialog класынан туындаған және оның барлық сипаттамаларына ие болатын TSaveDialog класының данасы болып табылады.

TSaveDialog класында TOpenDialog класының аналогиялық функциясы атқаратын іс - әрекетті орындайтын өзінің Execute функциясы анықталған.

Өздерінің құрылымдары және сыртқы бейнесі бойынша Save Dialog және Open Dialog диалог терезелерінің айырмашылықтары аз ғана.



Мысал 3.5.3 Button2 құрауышы үшін OnClick оқиға өңдеуіші сақталатын файлдың атын таңдауға арналған диалог терезесін ашады және Memo1 құрауышындағы мәтінді осы файлға сақтайды.

procedure TForm1.Button2Click(Sender: TObject);

begin

IF SaveDialog1.Execute THEN

BEGIN

Form1.Caption := SaveDialog1.FileName;



Memo1.Lines.SaveToFile(SaveDialog1.FileName);

END;

end;

Font Dialog – қаріпті таңдау диалог терезесі.

Иерархиясы:



TObjectTPersistentTComponentTCommonDialog.

Қаріпті таңдау Font Dialog диалог терезесі қолданушыға қаріпті таңдауға және оның сипаттамаларын орнатуға мүмкіндік береді (сурет 3.5.3 қараңыздар).

Font Dialog құрауышы тікелей TCommonDialog класынан туындаған TFontDialog класының данасы болып табылады.



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

property Device: TFontDialogDevice;

type

TFontDialogDevice = (fdScreen, fdPrinter, fdBoth);

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

fdScreen – экран үшін қаріп,

fdPrinter – принтер үшін қаріп,

fdBoth – экран және принтер үшін қаріп.

Үнсіздікпен қаріп экран үшін беріледі.



property Font: TFont – қаріптің сипаттамаларын береді. Мәтінді бейнелеу үшін Windows операциялық жүйесінде тіркелген көптікке тиісті қаріп қолданылады.

property Options: TFontDialogOptionsTFontDialogOptions типті қасиет:

type

TFontDialogOption = (fdAnsiOnly, fdTrueTypeOnly, fdEffects, fdFixedPitchOnly, fdForceFontExist, fdNoFaceSel, fdNoOEMFonts, fdNoSimulations, fdNoSizeSel, fdNoStyleSel, fdNoVectorFonts, fdShowHelp, fdWysiwyg, fdLimitSize, fdScalableOnly, fdApplyButton);

TFontDialogOptions = set of TFontDialogOption;

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



fdAnsiOnly – бұл параметр тағайындалғанда символдары Windows операциялық жүйесінің көптік символдарына кіретін қаріпті ғана таңдауға болады,

fdEffects – бұл параметр тағайындалғанда диалог терезесі қаріптің астын сызуды және қайта сызуды анықтайтын Effects терезесінен және қаріптің түсін анықтайтын Color терезесінен тұрады,

fdForceFontExist – бұл параметр тағайындалғанда және жоқ қаріптің атын енгізгенде дұрыс енгізілмеген туралы хабарлама шығады,

fdLimitSize – бұл параметр тағайындалғанда қаріптің максимальды және минимальды өлшемін беруге болады,

fdApplyButton – бұл параметр тағайындалғанда Применить (Apply) батырмасы пайда болады.

property MaxFontSize: Integer – қаріптің максимальды (ең үлкен) өлшемін береді. Егер мәні нольге тең болса, онда максимальды өлшем берілмеген.

property MinFontSize: Integer – қаріптің минимальды (ең кіші) өлшемін береді. Егер мәні нольге тең болса, онда минимальды өлшем берілмеген.

Open Dialog және Save Dialog құрауыштарындағы сияқты қаріпті таңдау диалог терезесі Execute әдісінің көмегімен активтеледі.



TFontDialog класында бір оқиға – OnApply анықталған .

property OnApply: TFDApplyEvent;

type

TFDApplyEvent = procedure (Sender: TObject; Wnd: HWND) of object;

где Wnd – терезенің сандық идентификаторы.

Оқиға терезенің Применить (Apply) батырмасына басқанда өрбиді. Бұл батырма OnApply оқиғасының өңдеуіші бар болғанда немесе Options қасиетінде fdApplyButton параметрі берілгенде пайда болады.



Мысал 3.5.4 Button1 құрауышы үшін OnClick оқиғасының өңдеуіші қаріпті таңдау диалог терезесін активтейді және таңдап алынған сипаттамаларды Label1 құрауышының қаріпіне береді.

procedure TForm1.Button1Click(Sender: TObject);

var F: TextFile;

S: String;



begin

WITH FontDialog1 DO

BEGIN

{Options қасиетіне fdLimitSize параметрін береді}

Options := Options + [fdLimitSize];

MaxFontSize := 14; {Қаріптің максимальды өлшемін береді = 14 пункт}

MinFontSize := 8; {Қаріптің минимальды өлшемін береді = 8 пункт}



IF Execute THEN {Қаріпті таңдау диалог терезесін активтейді}

Label1.Font:=Font; {Егер терезе ОК батырмасымен жабылса, онда таңдап алынған сипаттамалар , Label1құрауышының қаріпіне беріледі}



END;

end;

Мысал 3.5.5 Бұл мысал пішінде орналастырылған келесі басқару элементтерін қолданады: Edit, Main Menu, Rich Edit. Қолданушы Шрифт менюінің пунктіне шерткенде, қаріпті таңдау диалогы активтелінеді. Қолданушы диалог терезесінің Применить (Apply) батырмасына шерткенде сол сәтте таңдап алынған қаріптің сипаттамалары активті басқару элементіне қолданылады.

procedure TForm1.Menu_FontClick(Sender: TObject);

begin

{Options қасиетіне fdApplyButton параметрін қосады}

FontDialog1.Options := FontDialog1.Options + [fdApplyButton];

FontDialog1.Execute; {Қаріпті таңдау диалог терезесін активтейді}

end;

procedure TForm1.FontDialog1Apply(Sender: TObject; Wnd: HWND);

begin

IF ActiveControl IS TEdit THEN {Егер активті басқару элементі TEdit типті объект ( немесе оның ұрпақтарының бірі) болса, онда ...}

WITH ActiveControl AS TEdit DO

Font.Assign(TFontDialog(Sender).Font) {Активті басқару элементінің Font қасиетіне қаріпті таңдау диалог терезесінде таңдалған сипаттамаларды бекіту}



ELSE IF ActiveControl IS TRichEdit THEN {Егер активті басқару элементі TRichEdit типті объект (немесе оның ұрпақтарының бірі) болса, онда ...}

WITH ActiveControl AS TRichEdit DO

SelAttributes.Assign(TFontDialog(Sender).Font) {Активті басқару элементінің ерекшеленген мәтініне қаріпті таңдау диалог терезесінде таңдалған сипаттамаларды бекіту}



ELSE

Beep;


end;

Color Dialog – түсті таңдау диалог терезесі.

Иерархиясы:



TObjectTPersistentTComponentTCommonDialog.

Түсті таңдау диалог терезесі TColorDialog класының данасы болып табылады. Ол Windows операциялық жүйесінде берілген стандартты түсті таңдап алуға және меншік түсті беруге мүмкіндік жасайды (сурет 3.5.4 қараңыздар).



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

property Color: TColor – түстің таңдап алынған мәндерінен тұрады.

property CustomColors: TStrings – Қолданушымен анықталған 16 түстен тұрады. Әрбір жол мынандай пішімнен тұрады: Со1оrХ=NNNNNN, мұндағы Х – А – дан Р – ға дейінгі әріптер, олар түстің нөмірін анықтайды, NNNNNN – RGB пішіміндегі түстің он алтылық көрсетілімі.

property Options: TColorDialogOptions – диалог терезесінің сипаттамаларын береді.

Мысал 3.5.6 Button1 құрауышы үшін OnClick оқиға өңдеуіші түсті таңдау үшін диалог терезесін ашады және ол түсті пішіннің көрінісінің түсіне береді.

procedure TForm1.Button1Click(Sender: TObject);

begin

IF ColorDialog1.Execute THEN

Form1.Color := ColorDialog1.Color;



end;

Print Dialog – баспа режімін таңдау диалог терезесі.

Иерархиясы:



TObjectTPersistentTComponentTCommonDialog.

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



Printer Setup Dialog – принтердің параметрлерін таңдау диалог терезесі.

Иерархиясы:



TObjectTPersistentTComponentTCommonDialog.

Принтердің параметрлерін таңдау диалог терезесі TPrinterSetupDialog класының данасы болып табылады. Құжаттарды баспаға шығару үшін қолданылатын принтердің параметрлер қатарын беруге мүмкіндік жасайды. Бұл параметрлер Windows операциялық жүйесінде анықталған және диалог терезесінде бейнеленген.



Құрауыш принтердің типіне байланысты принтердің параметрлерін баптау терезесін құрады. Бұл диалог принтердің драйверімен қарым – қатынаста болады және бағдарламаға ешқандай ақпаратты қайтармайды, сондықтан оның Execute әдісі функция емес, процедура болады.

Find Dialog – мәтіннің үзіндісін іздеу диалог терезесі.

Иерархиясы:



TObjectTPersistentTComponentTCommonDialog.

Мәтіннің үзіндісін іздеу диалог терезесі TFindDialog класының данасы болып табылады. Ол мәтіннен сол және басқа үзіндіні анықтауға мүмкіндік береді (сурет 3.5.5 қараңыздар).

Класс келесі негізгі қасиеттерден тұрады.



property FindText: String – ізделінетін мәтіннің үзіндісінен тұрады.

property Position: TPoint – диалог терезесінің экрандағы сол жақ жоғарғы бұрышын анықтайды.

property Options: TFindOptionsTFindOptions типті қасиет:

type

TFindOption = (frDown, frFindNext, frHideMatchCase, frHideWholeWord, frHideUpDown, frMatchCase, frDisableMatchCase, frDisableUpDown, frDisableWholeWord, frReplace, frReplaceAll, frWholeWord, frShowHelp);

TFindOptions = set of TFindOption;

Ол диалог терезесінің сипаттамаларын береді және мән ретінде келесі шамалардың кез – келген көптігін қабылдай алады (солардың кейбіреулері):



frHideMatchCase – егер осы параметр берілсе, жолдық және бас әріптердің айырмашылығын есепке алу қосқышы шығарылмайды,

frHideUpDown – егер осы параметр берілсе, іздеу бағытын таңдау ауыстырып қосқышы шығарылмайды,

frWholeWord – егер осы параметр берілсе, бүтін сөздердің ғана ізделінуі іске асырылады.

TFindDialog класында бір OnFind оқиғасы анықталған.

property OnFind: TNotifyEvent;

Оқиға іздеу үшін мәтіннің үзіндісін таңдағаннан кейін диалог терезесінің Найти далее (Find Next) батырмасын басқанда өрбиді.



Мысал 3.5.7. Бұл мысал пішінде орналастырылған: Rich Edit, Button және Find Dialog басқару элементтерін қолданады. Батырмаға шерткенде мәтіннің үзіндісін іздеу диалогы активтелінеді (іздеу бағыты – іздеу алға қарай). Образец (Find what)жолы толтырылғанда және Найти далее (Find Next) батырмасы басылғанда алдыңғы таңдаудың артынан ілесетін Rich Edit құрауышының үлгіге сәйкес келетін жолы ерекшеленгенеді.

procedure TForm1.Button1Click(Sender: TObject);

begin

FindDialog1.Position := Point(RichEdit1.Left + RichEdit1.Width,


RichEdit1.Top);

FindDialog1.Execute; {Мәтіннің үзіндісін іздеу диалог терезесін активтейді}



end;

procedure TForm1.FindDialog1Find(Sender: TObject);

var

FoundAt: LongInt;

StartPos, ToEnd: Integer;

begin

WITH RichEdit1 DO

BEGIN

IF SelLength <> 0 THEN {Мәтіннің ерекшеленген бөлігінің ұзындығы нольге тең болмаса, онда}

{Іздеу ағымды таңдаудан кейін басталады, егр ол бар болса}

StartPos := SelStart + SelLength;

{SelStart –мәтіннің ерекшеленген бөлігінің мәтіннің басынан бастағанда бірінші символын анықтайды (символдарды нөмірлеу 0 – ден басталады 0). Егер мәтін ерешеленбеген болса, онда алдында мәтіндік нұсқағыш орналасқан символға нұсқалынады}

ELSE

StartPos := 0; {Басқаша, іздеу мәтіннің басынан басталады}



{ToEnd – Rich Edit құрауышындағы мәтіннің StartPos - тан мәтіннің аяғына дейінгі символдық ұзындығы}

ToEnd := Length(Text) - StartPos;

FoundAt := FindText(FindDialog1.FindText, StartPos, ToEnd,
[stMatchCase]);

{FindText –мәтіннен диалог терезесінде берілген жолды іздейді және сәтті іздеуде оның бірінші символының индексін қайтарады. StartPos – іздеудің басы; ToEnd – жолдың ұзындығы, [stMatchCase] – іздеу кезінде жолдық және бас әріптердің айырмашылықтары ескерілетінін айтады}



IF FoundAt <> -1 THEN

BEGIN

SetFocus;

SelStart := FoundAt;

SelLength := Length(FindDialog1.FindText);



END;

END;

end;

Replace Dialog – мәтіннің үзіндісін іздеу және айырбастау диалог терезесі.

Иерархиясы:



TObjectTPersistentTComponentTCommonDialogTFindDialog.

Мәтіннің үзіндісін іздеу және айырбастау диалог терезесі тікелей TFindDialog класынан туындайтын және оның барлық сипаттамаларына ие болатын TReplaceDialog класының данасы болып табылады. Ол мәтіннен сол және басқа үзіндіні табуға және қажет жағдайда оны басқа үзіндіге ауыстыруға мүмкіндік береді (сурет 3.5.6 қараңыздар).

Бұл класта қосымша ReplaceText қасиеті анықталған.



property ReplaceText: String – мүмкін табылған үзіндіге айырбас жасалатын мәтін анықталады.

Бұл класта тағы OnReplace оқиғасы анықталған.



property OnReplace: TNotifyEvent;

Оқиға диалог терезесінің Заменить (Replace) немесе Заменить все (Replace All) батырмалары басылғанда өрбиді.



Мысал 3.5.8 ReplaceDialog1 құрауышы үшін келесі OnReplace оқиға өңдеуіші TMemo класының Memo1 құрауышынан FindText - ті іздейді және оны ReplaceText – ке айырбастайды. Ол TMemo класының SelStart, SelLength және SelText қасиеттерін қолданады.

procedure TForm1.ReplaceDialog1Replace(Sender: TObject);

var

SelPos: Integer;



begin

WITH TReplaceDialog(Sender) DO

BEGIN

{ Memo1 – дегі FindText регистірін есепке алғандағы ауқымды іздеу}

SelPos := Pos(FindText, Memo1.Lines.Text);



{Pos функциясы Memo1құрауышының мәтінінің шегіне дейін FindText – ті іздейді және осы мәтіннің шегіндегі FindText - тің бірінші символын бүтін санды мәнді қайтарады. Егер FindText табылмаса, онда Pos нөлді қайтарады}

IF SelPos > 0 THEN

BEGIN

Memo1.SelStart := SelPos - 1;

Memo1.SelLength := Length(FindText);

Memo1.SelText := ReplaceText; {Таңдап алынған мәтінді ReplaceText – ке ауыстыру}



END

ELSE

MessageDlg(Concat('Could not find "', FindText, '" in Memo1.'),


mtError, [mbOk], 0);

END;

end;

Open Picture Dialogграфикалық файлды ашу диалог терезесі.

Иерархиясы:



TObjectTPersistentTComponentTCommonDialogTOpenDialog.

Графикалық файлды ашу диалог терезесі TOpenDialog класынан туындаған және оның барлық сипаттамаларына ие болатын TOpenPictureDialog класының данасы болып табылады.

Ол графикалық кескіні бар файлды таңдауға тағайындалған. Диалог терезесіне қарау терезесі қосылған, онда сол сәтте ерекшеленген графикалық файл бейнеленеді.

property Filter: String – Windows стандартты графикалық файлдары үшін сүзгілер жиынынан тұрады.

Мысал 3.5.9 Button1 құрауышы үшін OnClick оқиға өңдеуіші ашылатын графикалық файлдың атын таңдауға арналған диалог терезесін ашады және оны Image1 құрауышына орналастырады.

procedure TForm1.Button1Click(Sender: TObject);

begin

IF OpenPictureDialog1.Execute THEN

Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);



end;

Save Picture Dialog – графикалық файлды сақтау диалог терезесі.

Иерархиясы:



TObjectTPersistentTComponentTCommonDialogTOpenDialogTOpenPictureDialog.

Графикалық файлды сақтау диалог терезесі тікелей TSavePictureDialog класының туындамасы және оның барлық сипаттамаларына ие болатын TSavePictureDialog класының данасы болып табылады.

Ол графикалық кескінді файлға сақтауға арналған.

Мысал 3.5.10 Button2 батырмасына шерткенде сақталатын графикалық файлдың атын таңдауға арналған диалог терезесі ашылады және Image1 құрауышындағы кескін осы файлға жазылады.

procedure TForm1.Button2Click(Sender: TObject);



begin

IF SavePictureDialog1.Execute THEN

Image1.Picture.SaveToFile(SavePictureDialog1.FileName);



end;

Зертханалық жұмыс №10 «Мәтіндік редактор»


Қадам 1. Пішінді TextEditor атпен атау және жобаны Editor.dpr атпен сақтау. (Пішін үшін фирмалық таңбашаны орнатуды, сонымен бірге тақырыбы мен қосымша үшін де таңбашаны, барлық батырмаларға көмекші кеңесті орнатуды ұмытпаңыздар.)

Қадам 2. Пішінге Panel1 құрауышын орналастырыңыздар және оның қасиеттерін орнатыңыздар (осы және басқа қасиеттердің не үшін тағайындалғанын міндетті түрде қарау.)

Align = alTop;

Caption = ’’;

Қадам 3. Пішіге Memo1 құрауышын орналастырыңыздар және оны қасиеттерін беріңіздер

Align = alClient;

Lines = ’’;

WordWrap = TRUE;

ScrolBars = ssBoth;

HideSelection = False; (фокус басқа құрауышқа өткенде ерекшеленген мәтіннің ерекшеленуі өшпейді).



Қадам 4. Пішінге келесі қасиеттері бар OpenDialog1 құрауышын орналастырыңыздар

DefaultExt = TXT;

Filter = ’Текстовые файлы | *.txt’ + ’Все файлы | *.*’;

Title = ’Открытие текстового файла’;

Options (TRUE – ні орнату)

ofHideReadOnly - диалог терезесінен “Открыть только для чтения” қосқышы жойылады ”;

ofFileMustExist - егер жоқ файл таңдап алынатын болса, онда қате туралы хабарлама генерацияланады;

ofNoReadOnlyReturn - егер ReadOnly типті файл таңдап алынса, онда қате туралы хабарлама шығады.



Қадам 5. Пішінге келесі қасиеттері бар SaveDialog1 құрауышын орналастырыңыздар

DefaultExt = TXT;

Filter = ’Текстовые файлы | *.txt’ + ’Все файлы | *.*’;

Title = ’Сохранение текстового файла’;

Options (установить в TRUE)

ofHideReadOnly

ofNoReadOnlyReturn

ofOverwritePrompt - бар файл таңдап алынған кезде қате туралы хабарлама генерацияланады.



Қадам 6. Панелге &Open атпен батырманы орналастырыңыздар және келесі OnClick оқиғасының өңдеуішін жазыңыздар (міндетті түрде әр команданың мағынасын түсініңіздер)

With OpenDialog1 do

if Execute then begin

Memo1.Lines.LoadFromFile(FileName);

Caption:='TextEditor - '+ExtractFileName(FileName);

SaveDialog1.FileName:=FileName;

FileName:='';

end;

Қадам 7. Панелге &Save атпен батырманы орналастырыңыздар және OnClick оқиғасының өңдеуішін жазыңыздар:

Memo1.Lines.SaveToFile(SaveDialog1.FileName);



Қадам 8. Панелге Save&As атпен батырманы орналастырыңыздар және OnClick оқиғасының өңдеуішін жазыңыздар:

With SaveDialog1 do

if Execute then begin

Memo1.Lines.SaveToFile(FileName);

Caption:='TextEditor - '+ExtractFileName(FileName);

end;

Қадам 9. Панелге E&xit атпен батырманы орналастырыңыздар және OnClick оқиғасының өңдеуішін жазыңыздар:

Close;


Қадам 10. Пішінге OnApply оқиға өңдеуіші бар FontDialog1 құрауышын орналастырыңыздар

Memo1.Font := FontDialog1.Font;



Қадам 11. Панелге &Font атпен батырманы орналастырыңыздар және OnClick оқиғасының өңдеуішін жазыңыздар:

With FontDialog1 do

if Execute then Memo1.Font:=Font;

Қадам 12. Пішінге PrinterSetupDialog1 құрауышын орналастырыңыздар.

Қадам 13. Панелге Printer Set&up атпен батырманы орналастырыңыздар және OnClick оқиғасының өңдеуішін жазыңыздар:

PrinterSetupDialog1.Execute;



Қадам 14. Пішінге PrintDialog1 құрауышын орналастырыңыздар

Қадам 15. Панелге &Print атпен батырманы орналастырыңыздар және OnClick оқиғасының өңдеуішін жазыңыздар:

var FileOut : TextFile;

k : Integer;



begin

if PrintDialog1.Execute then begin

AssignPrn(FileOut);

Rewrite(FileOut);

Printer.Canvas.Font:=Memo1.Font;



for k:=0 to Memo1.Lines.Count-1 do

Writeln(FileOut,Memo1.Lines[k]);

CloseFile(FileOut)

end;

end;

Принтермен жұмыс істеу процедурасы Printers модулінде орналасқан. Оның атын Unit1 модулінің interface бөлімінің uses тізімінде белгілеңіздер.



Қадам 16. Панелге Fi&nd атпен батырманы орналастырыңыздар және OnClick оқиғасының өңдеуішін жазыңыздар:

FindDialog1.Execute;



Қадам 17. Панелге &Replace атпен батырманы орналастырыңыздар және OnClick оқиғасының өңдеуішін жазыңыздар:

ReplaceDialog1.Execute;



Қадам 18. Пішінге FindDialog1 және ReplaceDialog1 құрауыштарын орнатыңыздар және Options тобының жалпы қасиеттеріне TRUE мәнін орнатыңыздар

frHideMachCase - “С учетом регистра” қосқышын тығып қояды,

frHideWholeWord - “Только слово целиком” қосқышын тығып қояды,

frHideUpDown - іздеу бағытын таңдау батырмаларын тығып қояды.



Қадам 19. FindDialog1 құрауышының OnFind оқиға өңдегішін анықтау:

Өңдеуіштің мәтіні

Түсініктеме

var Buff,FT,P : PChar;

BuffLen : Integer;



Көмекші айнымалылардың сипаттамасы.

Begin

With Sender as TfindDialog do begin

Процедураның басында төменде қолданылатын қасиеттер мен әдістер TFindDialog класының объектісі ретінде қарастырылатын Sender (оқиға көзі) объектісіне қатысты екені көрсетіледі.

BuffLen:=Memo1.GetTextLen+1;

GetMem(Buff,BuffLen);

Memo1.GetTextBuf(Buff,BuffLen);


Memo1 – дегі мәтін динамикалық Buff айнымалысына көшіріледі. Ол үшін BuffLen - ге мәтіннің ұзындығы кіргізіледі, Buff айнымалысына жадыда орын бөлінеді және көшіру орындалады.

GetMem(FT,Length(FindText)+1);

StrPCopy(FT,FindText);



Аналогиялық түрде FT динамикалық айнымалысына іздеу жолындағы мәтін көшіріледі.

P:=Buff+Memo1.SelStart+

Memo1.SelLength;



P айнымалысына іздеудің басқы адресі кіргізіледі.

P:=StrPos(P,FT);

P айнымалысына іздеу үлгісіне сай келетін бағыныңқы жолдың адресі кіргізіледі.

If P=Nil

then MessageBeep(0)

Егерадрес ноөлдік болса (үлгі табылған жоқ), онда дыбыстық дабыл генерацияланады.

else begin

Memo1.SelStart:=P-Buff;

Memo1.SelLength:=Length(FindText)

end;


Әйтпесе, егер үлгі табылса, ол Memo1 – де ерекшеленеді.

FreeMem(FT);

FreeMem(Buff,BuffLen);



end;

end;

Процедура аяқталғанда динамикалық айнымалылар бүлінеді.

Қадам 20. ReplaceDialog1 құрауышы үшін OnFind өңдеуішін FindDialog1 құрауышының оқиғасы ретінде (Object Inspector терезесінде) көрсету керек (сондықтан бұл процедурада FindText іздеу жолы нақты FindDialog1 немесе ReplaceDialog1 құрауыштарынан емес, оқиға көзі Senderден алынады.).

Қадам 21. ReplaceDialog1 құрауышы үшін OnReplace оқиға өңдеуішінің мәтінін енгізу.

Өңдеуіштің мәтіні

Түсініктеме

With ReplaceDialog1 do

Repeat

Цикл ұйымдастырылады.

if Memo1.SelText<>FindText

then FindDialog1Find(Sender);

Егер ерекшеленген үзінді іздеу үлгісіне сай келмесе, онда FindDialog1 құрауышының OnFind оқиға өңдеуішін шақыру арқылы келесі сай келетін үзіндіні табу.

if Memo1.SelLength=0 then Break;

Егер үзінді табылмаса, онда цикл жабылады.

Memo1.SelText:=ReplaceText;

Ерекшеленген үзіндіні айырбас үлгісіне айырбастау.

until not (frReplaceAll in Options);

Егер “Заменить все” режимі таңдалмаса, онда циклді тоқтату керек.

Өз беттеріңше: (тәжірибелік жұмыстан 5 деген баға алам деушілер 3 және 6 пункттерін орындаулары қажет)

1. Панельге келесі функцияларды орындауға мүмкіндік беретін батырманы қосу

Вариант

Тапсырма

1, 6, 11, 16, 21, 26

Мәтінді жолдағы сөздер саны бойынша сұрыптау

2, 7, 12, 17, 22, 27

Жолдарды кері ретпен қою

3, 8, 13, 18, 23, 28

Мәтінді жолдағы цифрлар саны бойынша сұрыптау

4, 9, 14, 19, 24, 29

Мәтінді жолдағы бос орын саны бойынша сұрыптау

5, 10, 15, 20, 25, 30

Жолдарды ереже бойынша қою 0-1, 2-3, 4-5,…

2. Панельге ‘proba.txt’ файлына келесілерді сақтауға мүмкіндік беретін батырманы қосу

Вариант

Тапсырма

1, 7, 13, 19, 25

Соңғы K жолды

2, 8, 14, 20, 26

Жұп санды сөздерден тұратын жолды

3, 9, 15, 21, 27

L - ден басталатын K жолды

4, 10, 16, 22, 28

Тура К сөзден тұратын жолды

5, 11, 17, 23, 29

Бірдей сөздер кезігетін жолды

6, 12, 18, 24, 30

Барлық символдары өзгеше жолдарды

K және L сандары панелде орналасқан SpinEdit құрауышына енгізіледі (SpinEdit - тегі мәндер мәтіннің жағдайына сай келуі керек).

3. Панельге файлдан (файлдың аты диалог терезесінде анықталады) 2 – ші тапсырмада (варианта – сіздікінен кейінгі вариант) берілген жолдарды есептеуге мүмкіндік беретін батырманы қосу. Жолдар бар мәтінді ауыстырады немесе оған қосылып жазылады (басына, аяғына, N – ші жолдан кейін – қолданушының таңдауына қарай). Барлық баптау диалогтың уақытында негізгіні айырбастайтын диалог панельінде анықталады. Диалогты болдырмау мүмкіндігін де қарастырыңыздар.

4. Мәтіннің көрінісінің түсін таңдауға тағайындалған батырманы қосу.

5. TMainMenu құрауышының көмегімен жобаның негізгі менюін ұйымдастыру қажет, оған негізгі панельдің барлық батырмаларының функциясын саналы түрде орналастырыңыздар (Әрине, бұл функцияларды қайта жазбай, меню пунктінің OnClick оиғасының дайын өңдеуішін тағайындауға (атын қайта өзгерту) болады).

6. Тәжірибелік жұмыстан 5 деген баға алам деушілер, жобада қосымшаның 2 және 3 пункттерін іске асырулары қажет (төменнен қараңыздар).

Қосымша:

1. Memo - құрауышы қосымшамен жұмыс істегенде ғана қолдануға болатын қасиеттердентұрады.

Қасиет

Мән

SelText

Мәтіннің ерекшеленген үзіндісі

SelLength

Ерекшеленген үзіндінің ұзындығы

SelStart

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

Modified

TRUE, егер мәтін өзгерсе.

2. Келесі бағдарламалық код Memo1 құрауышындағы тышқанның ңұсқағышының орынын анықтауға мүмкіндік береді:

var X,Y : Integer;

begin

Y:=Memo1.Perform(EM_LINEFROMCHAR, Memo1.SelStart, 0);

X:=Memo1.Perform(EM_LINEINDEX, Y, 0);

Y:=Y+1;


X:=Memo1.SelStart-X+1;

end;

3. Memo1 редактіріндегі әрекетті болдырмау үшін келесі бағдарламалық кодты қолдануға болады:

Memo1.Perform(EM_UNDO, 0, 0);

Әрекетті болдырмау мүмкіндігін тексеру үшін функцияның мәнін нөлмен салытыруға болады:

Memo1.Perform(EM_CANUNDO, 0, 0);


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: TFontStylesTFontStyles типті қасиет.

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: TPenModeTpenMode типті қасиет:

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: TBitmapBitmap қасиеті 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: TBrushStyleTBrushStyle типті қасиет:

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;

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



Image құрауышы.

Иерархиясы:



TObjectTPersistentTComponentTControlTGraphicControl

Құрауыштар Палитрасының Парағы: Additional.



TImage класының Image құрауышы пішінге қандай да бір суретті орналастыру үшін қолданылады. Бейнелеу файлы биттік карта болуы мүмкін (.BMP кеңейткіші бар файлы), пиктограмма (.ICO кеңейткіші бар файл), метафайлдар (.WMF кеңейткіші бар файл).

TImage класы TGraphicControl класының тікелей ұрпақ класы болып табылады, сондықтан графикалық басқару элементтер класына жатады. Туындаған қасиеттерімен қатар TImage класында келесі қасиеттер анықталған:

property Canvas: TCanvas – бағдарламаның орындалуы барысында бейнені қалыптастыруға тағайындалады.

property Center: Boolean – егер қасиет TRUE мәніне ие болса, онда кескін құрауыштың центрі бойынша теңестіріледі, қарсы жағдайда кескін құрауыштың сол жақ жоғарғы бұрышына орналастырылады. Үнсіздікпен FALSE мәніне тең болады.

property Picture: TPicture – құрауышта орналастырылған кескінді анықтайды.

property Stretch: Boolean – егер қасиеттің мәні TRUE болса, онда Picture қасиетінде анықталған кескін құрауыштың өлшеміне дейін үлкейтіледі немесе кішірейтіледі. Үнсіздікпен мәні FALSE – ге тең.

Басқа графикалық басқару элементтері сияқты Image құрауышы тышқан арқылы берілген барлық оқиғаларды өңдейді. Үнсіздік белгісі бойынша оқиға жоқ немесе анықталмаған.

Жобалау барысында кескінді Image құрауышына орналастырғанда кескіннің тапсырма терезесін қолдануға болады. Бұл терезе құрауыш белсенді болғанда немесе Объекті Инспектірінің Picture қасиетін таңдағанда пайда болады. Кескіннің тапсырма терезесінің негізгі өрісі таңдап алынған суретті орналастыруға тағайындалған. Сонымен бірге терезеде келесі батырмалар анықталған:

Load - бейнені файлдан іске қосу үшін;

Save - бейнені файлға жазу үшін;

Clear - таңдап алынған бейнені жою үшін;

OK - таңдап алынған бейнені құрауышқа жазу үшін;

Cancel - енгізілген өзгерісті қайтару үшін.



Shape құрауышы.

Иерархиясы:



TObjectTPersistentTComponentTControlTGraphicControl

Құрауыштар Палитрасының Парағы: Additional.



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

TShape класы тікелей TGraphicControl класының ұрпақ класы болып табылады және TImage класы сияқты графикалық басқару элементтерінің қатарына кіреді. Туындалған қасиеттермен қатар TShape класында келесі қасиеттер анықталған:

property Brush: TBrush – фигураның бетін бояуға тағайындалған қыл қаламды анықтайды.

property Pen: TPen – фигураның жиектерін салуға тағайындалған қарындашты анықтайды.

property Shape: TShapeTypeTShapeType типті қасиет:

type

TShapeType = (stRectangle, stSquare, stRoundRect, stRoundSquare, stEllipse, stCircle);

Экранға шығатын фигураларды анықтайды:

stRectangle - тіктөртбұрыш;

stSquare - квадрат;

stRoundRect - бұрыштары дөңгелектенген тіктөртбұрыш;

stRoundSquare - бұрыштары дөңгелектенген квадрат;

stEllipse - эллипс;

stCircle - дөңгелек;

Shape құрауышы үшін үнсіздікпен оқиға болып OnDragDrop оқиғасы табылады.



Paint Box құрауышы.

Иерархиясы:



TObjectTPersistentTComponentTControlTGraphicControl

Құрауыштар Палитрасының Парағы: System.



TPaintBox класының Paint Box құрауышы пішіннің шектелген аймағында сурет салуға мүмкіндік береді. Сурет салуға канваның барлық мүмкіндіктері қолданылады – қаріп, қарындаш, қыл қалам, сонымен қатар бағдарламаның орындалу барысында геометриялық фигураларды тұрғызатын әдістер де қолданылады.

TPaintBox класы TGraphicControl класының ұрпақ класы болып табылады және бұрын қарастырылған графикалық құрауыштармен қатар графикалық басқару элементтерінің жанұясына кіреді.

TPaintBox класындағы анықталған сипаттамалардың ішінен OnPaint оқиғасын ерекшелейік:

property OnPaint: TNotifyEvent;

Құрауыш салынар алдында өрбитін оқиға.



Paint Box құрауышы үшін үнсіздікпен оқиға болып OnClick оқиғасы табылады.

Timer құрауышы.

Иерархиясы:



TObjectTPersistentTComponent.

Құрауыштар Палитрасындағы Парақ: System – жүйелік деңгейде жұмыс істейтін құрауыштар парағы.

TTimer класының таймері көрнекі емес құрауыш болып табылады, сондықтан оны көмекші құрауыштар қатарына жатқызуға болады. Таймер бір берілген уақыт аралығынан кейін қандай да бір операцияны жасауға тағайындалған.

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



property Enabled: Boolean – Егер қасиет TRUE мәніне ие болса, онда таймер OnTimer меншік оқиғаға әсер етеді.

property Interval: Cardinal – Уақыт интервалын миллисекундпен анықтайды, одан кейін OnTimer оқиғасы пайда болады. Үнсіздікпен 1000 (1 секунда) – ға тең.

Сонымен қатар TTimer класында OnTimer оқиғасы анықталған:



property OnTimer: TNotifyEvent;

Периодты түрде Interval қасиетінде анықталған уақыт интервалы біткен сайын өрбіп отырады. Ол үнсіздікпен берілетін қасиет болып табылады.



Мысал 3.6.7 Келесі оқиғаны өңдеуіш OnTimer таймерінің оқиғасына жауап береді, ол белсенді басқару элементін бір пиксель оңға жылжытады.

procedure TForm1.Timer1Timer(Sender: TObject);

begin

Timer1.Interval := 100;



IF ActiveControl <> nil THEN

ActiveControl.Left := ActiveControl.Left + 1;



end;

Мысал 3.6.8 Келесі оқиғаны өңдеуіш OnTimer таймерінің оқиғасына жауап береді, ол белсенді басқару элементін оң жаққа бір пиксельге жылжытады, оң жақ шекараға жеткенде басқару сол жақ шекараға беріледі және қозғалыс ары қарай орындалады.

procedure TForm1.Timer1Timer(Sender: TObject);



begin

Timer1.Interval := 10;



IF ActiveControl <> nil THEN

IF ActiveControl.Left+ActiveControl.Width <= Form1.ClientWidth

THEN ActiveControl.Left := ActiveControl.Left + 1

ELSE ActiveControl.Left := 0;

end;

Зертханалық жұмыс №10 «Бейнелерді құру»


  1. Келесі түрдегі Y=F(x) функциясының графигін тұрғызыңыздар:

0≤x<50 Y=0

50≤x<100 Y=x-50

100≤x<150 Y=50

150≤x<200 Y=-(x-200)

200≤x<250 Y=0

Барлық өлшемдері пиксельмен берілген.



Пішінге график тұрғызу үшін Image құрауышын орналастырыңыз. Пішінге екі батырманы орналастырыңыз «Операция» және «Закрыть». «Операция» батырмасына басқанда график тұрғызылады.

  1. Rectangle әдісін қолданып, оған қажетті координаталарды бере отырып, тіктөртбұрыш сызыңыздар.Төмендегі қасиеттерді орнатыңыз:

property Canvas.Pen – шекараларды сызу үшін.

Property Canvas.Width – сызықтың қалыңдығын анықтайды, пиксельмен беріледі.

property Canvas.Brush – оның ішкі облысын бояу үшін қолданылады.

TextOut әдісінің көмегімен келесі хабарламаны шығарыңыз: «’Прямоугольник с координатами (’+IntToStr(x1)+’;’+IntToStr(y1)+’),
(‘+IntToStr(x2)+’;’+IntToStr(y2)+’)’ ”»

  1. RadioGroup құрауышын және TCanvas класының негізгі әдістерін қолдана отырып, геометриялық фигураларды сызатын қосымша құрыңыз (шеңбер, элиипс, бұрыштары дөңгелектенген тіктөртбұрыш, бұрыштары дөңгелектенген квадрат, квадрат және т.б.).

  2. Алдыңғы тапсырманың бағдарламасын өзгертіңіз, геометриялық фигураны салу үшін Additional парағының Shape құрауышын қолданыңыз.

property Shape – геометриялық фигураның түрін анықтайды.

Samples парағының ColorGrid құрауышын қолдана отырып, геометриялық фигураның түрін өзгертіңіз.

Shape1.Brush.Color:=
ColorGrid1.ForeGroundColor;


  1. Пішіннің канвасында сурет салуға мысал:

Инспектор объектісінің Events парағынан пішін үшін келесі оқиғаларды табыңыздар: OnMouseDown, OnMouseMove, OnMouseUp. Бұл оқиғалар пішінге тышқанмен әсер еткенде қолданылады – тышқанды басу, тышқанның қозғалысы, сәйкесінше тышқанның батырмасын босату.

Келесі оқиғаларға реакцияны өңдейтін процедурураларды жазыңыздар:



procedure TForm1.Form1MouseDown(…)

begin

isdown:=true;

form1.canvas.moveto(x,y);

end;

procedure Tform1.Form1MouseMove(…);

begin

if isdown then Form1.Canvas.LineTo(X,Y);



end;

procedure Tform1.Form1MouseUp(…);

begin

isdown:=false;



end;

Осы бағдарламаны іске қосыңыз, сонда сіз пішіннің терезесінде тышқанның көмегімен сурет сала аласыз.



  1. Image немесе PaintBox құрауыштарын қолдана отырып, көпбұрыштардың интерактивті салынуын көрсетіңіз (сызықтың тізбектей салынуын қолмен жүргізіңіздер).

  2. Pixels қасиетін қолдана отырып функциясының графигін шығаратын бағдарламаны құрыңыз және талдаңыз. Графикті тұрғызу үшін барлық мүмкін аймақтар қолданылады, сонымен қатар бағдарламаның орындалу барысында терезенің өлшемі өзгеретін болса, онда график нақты өлшемді ескере отырып, қайтадан шығады.

property Pixels – Canvas обектісінің пиксельінің екі өлшемді массиві. Мысалы,

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

инструкциясы пішіннің бетіндегі нүктені қызыл түске бояйды.

event OnPaint пішін қандай да бір себепке байланысты қайта бояуды талап еткенде өрбиді.

event OnResize пішіннің өлшемі әрбір кез өзгергенде өрбиді.

Pixels массивінің өлшемі графикалық беттің өлшемімен анықталады. Пішіннің графикалық бетінің өлшемі ClientWidth және ClientHeight қасиеттерінің мәндері арқылы анықталады, ал Image құрауышының графикалық бетінің өлшемі Width және Height қасиеттерінің мәні арқылы анықталады. Пішіннің жұмыс аймағының сол жақ жоғарғы бұрышына Pixels[0,0] элементі сәйкес келеді, ал оң жақ төменгі бұрышына - Pixels[ClientWidth-1,ClientHeight-1]. Графикті шығаруға арналған пішіннің аймағын толығымен алатындай масштабты қалай есептеуге болады?



Мысалы, қандай да бір функциясы нөлден 1000 – ға дейінгі мәндерді қабылдаса және оның графигін шығару үшін биіктігі 250 пиксель болатын аймақ қолданылатын болса, онда у осінің масштабы келесі формула бойынша орындалады: . Сол себепті мәніне облыстың кординатасы , болатын нүкте сай келеді, ал мәніне кординатасы () болатын мән сәйкес келеді (ең үлкен бүтінге дейін дөңгелектенеді).

unit Grfunc_1;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;



type

TForm1 = class(TForm)



procedure FormPaint(Sender: TObject);

procedure FormResize(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;



Implementation

{$R *.DFM}

procedure Gr0fFunc; {Функцияның графигін тұрғызу}

var

x1,x2:real; // функция аргументінің өзгеру шекарасы

y1,y2:real; // функция мәнінің өзгеру шекарасы

x:real; //функция аргументі

y:real; // х нүктесіндегі функцияның мәні

dx:real; // аргументтің ауысуы

l,b:integer; // графикті шығару аймағының сол жақ төменгі бұрышы

w,h:integer; // графикті шығару аймағының биіктігі мен ені

mx,my:real; // X және Y осьтері бойынша координаталар

x0,y0:integer; // нүкте - координата басы



{Графикті тұрғызатын функция}

function f(x:real):real;

begin

f:=2*sin(x)*exp(x/5);



end;

begin

// Графикті шығару аймағы

l:=10; // Хсол жақ жоғарғы бұрыштың координатасы

b:=Form1.ClientHeight-20; // Y – сол жақ жоғарғы бұрыштың координатасы

h:=Form1.ClientHeight-40; // биіктігі

w:=Form1.ClientWidth-40; // ені

x1:=0; //аргумент диапазонының төменгі шекарасы

x2:=25; //аргумент диапазонының төменгі шекарасы

dx:=0.01; // аргумент қадамы



{[x1,x2] бөлігіндегі функцияның максимальды және минимальды мәндерін табайық }

y1:=f(x1); // минимум

y2:=f(x1); // максимум

x:=x1;

repeat

y:=f(x);


if ythen y1:=y;

if y>y2 then y2:=y;

x:=x+dx;


until (x>=x2);

my:=h/abs(y2-y1);



// Y осі бойынша масштаб

mx:=w/abs(x2-x1);



// X осі бойынша масштаб

{остер}

Gr0fFunc процедурасы арқылы тұрғызылған график

x0:=1;


y0:=b-abs(Round(y1*my));

with form1.Canvas do

begin

// оси

MoveTo(l,b); LineTo(l,b-h);

MoveTo(x0,y0); LineTo(x0+w,y0);

TextOut(l+5,b-h,FloatToStrF(y2,ffGeneral,6,3));

TextOut(l+5,b,FloatToStrF(y1,ffGeneral,6,3));

// построение графика

x:=x1;


repeat

y:=f(x);


Form1.Canvas.Pixels[x0+Round(x*mx),y0-Round(y*my)]:=clRed;

x:=x+dx;


until (x>=x2);

end;

end;

procedure TForm1.FormPaint(Sender: TObject);

begin

Gr0fFunc;



end;

procedure TForm1.FormResize(Sender: TObject);

begin

// очистить форму

with form1 do

Canvas.FillRect(Rect(0,0,ClientWidth,ClientHeight));



Gr0fFunc;

end;

end.

  1. №7 тапсырманың бағдарламасына басқа функцияның графигі тұрғызылатындай өзгеріс енгізіңіздер. Бағдарламаны барлық диапазонда тек оң немесе тек теріс мәндер қабылдайтын функцияның графигін тұрғызатындай етіп өзгертіңіздер.

  2. №1 тапсырмасындағы қосымша сияқты синус функциясының графигін тұрғызатын қосымша құрыңыздар.

  3. Бағдарлама терезесінің шекарасымен сол жақтан оң жағына қарай бағытта жылжитын шеңбердің қозғалысын көрсететін бағдарлама құрыңыздар (TCanvas класының әдістерін қолданыңыздар).

Суреттің орын ауыстыруын қамтамасыз ету өте қарапайым түрде ұйымдастырылады: ең алдымен суретті шығару керек, содан соң бірнеше уақыттан кейін оны өшіріп, қайта шығару керек, бірақ ол алдыңғы орынына қарағанда бірнеше ара қашықтықтан кейін шығады. Шеңберді қайта - қайта салуды ұйымдастыратын процедураны периодты түрде шақырып тұру үшін пішінге System парағынан Timer көрнекі емес құрауышын орналастырыңыздар.





Достарыңызбен бөлісу:
1   2   3




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

    Басты бет