Нысан конструкторлары
Нысандардың қашан және қалай жасалатынын қарастырайық, яғни оларға қашан жады бөлінеді және бастапқы меншіктеу жүргізіледі. Әдеттегі айнымалыларға келетін болсақ екі нұсқа мүмкін болар еді: статикалық және динамикалықайнымалылар. Егер айнымалы статикалық болса, сәйкес блоктың орындалар алдында олар үшін автоматты түрде жады бөлінеді – ауқымды айнымалылар үшін бағдарлама жүктелгенде және жергілікті айнымалылар үшін процедураны шақыру кезінде. Егер айнымалы динамикалық болса, онда ол үшін жады new операторын шақыру арқылы қолдан бөлінеді. Класс типті айнамалылар Object Pascal-да статикалық сияқты сипатталады:
Var AMyObject:TMyObject;
Бірақ осы тілде олар тек динамикалық бола алады. Бұл AMyObject айнымалысының нысан адресін қамтитын нұсқауыш екенін және қолдан бөліну керек екенін білдіреді. Дегенмен әдістер мен өрістерге қатынас (^) символын қолданусыз орындалады. Басқа нысанды-бағдарланған тілдерде, мысалы, С++-те бұлай емес. Оларда статикалық та және динамикалық нысандар да болуы мүмкін. Статикалық нысандар автоматты түрде, ал динамикалық – қолдан құрылады. Нысанды жасау нысанды инициализациялайтын арнайы әдісті - конструкторды шақыру жолымен жүзеге асырылады. Жасалған экземпляр басқа әдіспен – деструктормен жойылады.
Конструктор – қажетті нысанды жасайтын және инициализациялайтын арнайы әдіс. Конструктордың сипаттамасы процедураның сипаттамасына ұқсас, бірақ constructor сөзінен басталады. Мысалы:
Constructor Create;
Constructor Create(AOwner:TComponent);
Сипаттамада айнымалы типі көрсетілмесе де, конструкторды класс атауы арқылы шақырғанда, ол құрылған нысанға сілтемені қайтарады.
Класстың бірден артық конструкторы болуы мүмкін, бірақ бір ғана конструкторы да болуы мүмкін. Әдетте конструктор атауы Create.
Нысан құру үшін конструктор класс атауын көрсету арқылы шақырылады. Нысан емес, дәл осы класс атауы (яғни, айнымалы емес, типі), себебі нысан әлі құрылған жоқ.
Нысанды құру мысалы:
Var MyObject:TMyObject;
MyObject:=TMyClass.Create;
Осы кезде келесі әрекеттер орындалады:нысан өрістеріне динамикалық жады бөлінеді, барлық скаляр өрістердің мәндері үшін 0 орнатылады, класс типінің барлық нұсқауыштары мен өрістеріне nil орнатылады, жол типті барлық өрістерге «бос жол» мәні меншіктеледі. Ары қарай конструкторда сипатталған әрекеттер орындалады. әдетте бұл нысан өрістерін инициализациялау. Мұнда тек нольдік емес және бос емес өрістерді инициализациялау қажет, ал қалғаны автоматты түрде инициализацияланады. Боған соң конструктор жаңа ғана бөлінген және инициализацияланған нысанға нұсқауышты қайтарады. Қайтарылатын мәннің типі конструктор шақырылған класс типіне сәйкес келеді.
Егер конструктор айнымалы атауы арқылы шақырылған жағдайда - нысанға сілтеме жасалғанда, класс атауы арқылы шақырылған жағдайдан айырмашылығы – жаңа нысан жасалмайды, сәйкесінше конструктор мән қайтармайды. Конструктор денесінде сипатталған әрекеттер ғана орындалады.
Конструкторлар бірнешеу болуы мүмкін. Бұл кезде overload қызметші сөзі қолданылады, ол әдісті қайта жүктелетіндей мүмкіндік береді. Қайта жүктелуді алдыңғы дәрістерде қарастырамыз.
Конструктордың үш нұсқасы болады: үнсіз келісім бойынша конструтор, инициализациялау конструкторы және көшіру конструкторы:
- үнсіз келісім бойынша конструктордың әдетте параметрлері болмайды және нысан өрістеріне үнсіз келісім бойынша мәндер береді.
- инициализациялау конструкторы нысан өрістеріне меншіктелетін мәндерді параметр ретінде алады.
- көшіру конструкторы параметр ретінде сондай типті нысанға нұсқауыш алады да, өзінің өрістеріне алынған нысанның өрістерінің мәндерін меншіктейді. Яғни нысан қалпы көшірілгендей болады. Конструкторларды қолдану мысалы:
Type
TMyObject = class;
Property A:integer read GetA write SetA;
Property B:integer read GetB write SetB;
Property C:real read GetC write SetC;
constructor Create; overload; {үнсіз келісім бойынша}
constructor Create (pA,pB,pC: integer); overload; {инициализациялау}
constructor Create(CopyMyObject:TMyObject); overload; {көшіру}
…
end;
constructor TMyObject.Create;
begin
A:=1;
B:=1;
{C 0-ге тең болып қала береді}
end;
constructor TMyObject.Create(pA,pB,pC:integer);
begin
A:=pA;
B:=pB;
C:=pC;
End;
constructor TMyObject.Create(CopyMyObject:TMyObject);
begin
A:=CopyMyObject.A;
B:=CopyMyO bject.B;
C:=CopyMyObject.C;
End;
. . .
Var
A1MyObject:TMyObject;
A2MyObject:TMyObject;
A3MyObject:TMyObject;
Begin
A1MyObject:=TMyObject.Create; {үнсіз келісім конструкторы}
A2MyObject:=TMyObject.Create(10,20,0.5); { инициализация конструкторы }
. . .
A1MyObject.B:=1000;
A3MyObject:=TMyObject.Create(A1MyObject); {көшіру конструкторы}
. . .
End;
A1MyObject нысанын құру кезінде оның өрістері (1,1,0) мәндерін алады, A2MyObject нысанын құру кезінде оның өрістері – (10,20,0.5) мәндерін алады, A3MyObject нысанын құру кезінде оның өрістері – (1,1000,0) мәндерін алады.
Нысан деструкторлары
Нысандар, яғни класс типті айнымалылар конструкторды шақыру арқылы жасалады. Object Pascal-да барлық класс типті айнымалылар динамикалық, сондықтан констрнуктор айқын түрде шақырылуы керек. Класс типті статикалық айнымалылар үшін конструкторды шақыру автоматты түрде орындалады. Кез-келген жағдайда конструкторды шақыру кезінде нысан өрістеріне жады тарату мен параметрлерді инициализациялау жүргізіледі. Ал таратылған жады бос болу керек. Және де тікелей нысандардың өрістері алып тұрған жады да, сол сияқты өздері алып тұрған динамикалық жады да босатылуы керек. Сол сияқты қолданылатын ресурстар да, мысалы файлдар босатылуы керек. Осы амалдар деструкторлар арқылы жүзеге асырылады. Динамикалық нысандар үшін деструкторлар айқын түрде шақырылуы керек.
Деструктор — бұл өзі шақырылған нысанды жойып, жадыны босататын арнайы әдіс. Деструктордың сипаттамасы процедура сипаттамасы сияқты destructor сөзінен басталады.
Мысалы: destructor Destroy;
Класс біреуден артық деструкторға ие бола алса да, әрбір класс үшін бір ғана Destroy деп аталатын деструктор болуы ұсынылады.
Деструкторды жойылуға тиіс нысан арқылы шақыру керек (конструктордағы сияқты сияқты класс арқылы емес). Мысалы:
Var
MyObject:TMyObject;
. . .
MyObject.Destroy;
Деструторды шақыру кезінде алдымен деструкторда сипатталған операторлар шақырылады. Әдетте олар нысан өрістері сілтеме жасайтын динамикалық жадыны босатудан және нысан үшін берілген ресуртсарды босатудан тұрады, мысалы файлдарды жабу. Содан кейін, нысаның өзі үшін берілген жады босатылады. Object Pascal-да нысандарды жою үшін мұраға алынған Free әдісі қолданылады, ол алдымын нұсқауышты тексереді (оның nil-ға теңдігін ), содан кейін Destroy шақырады.
Мысал келтірейік. Стек класының сипаттамасын деструктордың алдыңғы мысалдарымен толықтырайық.
1. Массивтегі стек.
TSObStack = class(TObject)
Stack:array[1..1000] of TElem;
Top:integer;
Constructor Create; {үнсіз келісім бойынша}
Destructor Destroy;
procedure InStack(Elem: TElem}:boolean;
function OutStack(var Elem:TElem):Boolean;
end;
Constructor TSObStack .Create;
Begin
Top:=0; {жасамауға да болар еді}
{үнсіз келісім бойынша конструктор қажет емес}
End;
Destructor TSObStack.Destroy;
Begin
{ешқандай әрекеттер қажет емес}
End;
2. Динамикалық стек
TDObStack=class(TObject)
Top:TERef;
Constructor Create; {үнсіз келісім бойынша}
Destructor Destroy;
procedure InStack(Elem: TElem}:boolean;
unction OutStack(var Elem:TElem):Boolean;
end;
Constructor TDObStack .Create;
Begin
Top:=nil; {жасамауға да болар еді}
{ үнсіз келісім бойынша конструктордық қажеті жоқ}
End;
Destructor TDObStack.Destroy;
Var
Elem:TElem;
Begin
While OutStack(Elem) do;
End;
Қолданылуы:
Var
DStack:TDObStack;
SStack:TSObStack;
. . .
A:TElem;
Begin
DStack:=TDObStack.Create;
SStack:=TSObStack.Create;
{қолданылуы}
DStack.Destroy;
SStack.Destroy
End.
Конструкторлар мен деструкторлар туралы қорытындылай отырып, келесіні айту керек: егер нысан болып табылатын стандартты визуалды компонеттері көп Object Pascal-да жазылған кез-келген программаны алатын болсақ, онда конструкторлар мен деструкторларды көрмейсіздер. Мәселе мынада: визуалды жобалау кезіндегі қолданбаға компоненттер палитрасынан қойылған кез-келген компонент белгілі бір иерархияға қосылады. Бұл иерархия формада тұйықталады: оның барлық құраушы бөліктері үшін конструкторлар мен деструкторлар бағдарламалаушыға көрінбей шақырылады. Форманың өзінің жасалуы мен жойылуы үшін қолданба жауап береді (Application атты ауқымды нысан). Жоба файлында (DPR кеңейтілуі бар) Application. CreateForm әдісінің шақырылуын көре аласыздар. Динамикалық түрде (қолданба орындалуы кезінде) жасалатын нысандарға қатысты алғанда, онда мұнда конструкторлар мен деструкторларды немесе Free әдісін айқын шақыру керек.
Дәріс №3. Класстар. Класстарды құрудың негізгі құралдары. Класстарды құрудың қосымша құралдары.
Object Pascal тіліндегі кластар деп өрістен, әдістен және қасиеттерден тұратын арнайы типтерді айтады. Кез-келген басқа типтер тәрізді класс объект деп аталатын нақты экземплярды құру қызметін атқарады. Turbo Pascal жүйесіндегі жасалған программалармен үйлесімділікті сақтау үшін жүйені құрушылар Object Pascal тіліндегі бұрынғы объектілі модельді сүйемелдейтін Object – объект типін қалдырған. Кластың басқа типтерден басқа маңызды айырмашылығы кластың объектілері барлық уақытта топқа бөліне алады. Сондықтан объект айнымалылар жадының динамикалық бөлігінде көрсеткіштің рөлін атқарады. Дегенмен, басқа көрстекіштерден айырмашылығы объектінің мазмұнына сілтемеде объектінің атауынан кейін «^» символын пайдалануға болмайды:
Type
TmyClass=class(TObject)
Field: Integer;
…
end;
var
MyClass: TmyClass;
begin
…
MyClass^.Field:=0; // Қате! Ол былай жазылуы тиіс.
MyClass.Field:=0;
…
end.
Кластың құраушылары
Өріс
Өріс деп кластағы инкапсуляцияланған мәліметтерді айтады. Өріс кез келген типті болуы мүмкін, оның ішінде класта болуы мүмкін;
Мысалы:
type
TMyClass=class
AIntField:integer;
AstrField:String;
AObjectField:Tobject;
……………
End;
Әрбір объект өрістер жиынтығын алады, бірақ осы кластың барлық объектілері үшін жалпы қасиеттер мен әдістер жиынтығы бар. Инкапсуляцияның іргелі принципі өріске кластың әдістері мен қасиеттерінің көмегі арқылы қатынас жасау керектігін талап етеді. Бірақ Object Pascal тілінде өріске тікелей шығуға рұқсат етіледі.
type
TMyClass=class
AIntField:integer;
AstrField:String;
AObjectField:Tobject;
……………
End;
Var aObject. TMyClass;
Begin
……………
AObject.FindField:=0;
AObject.FStrField:=’символдар жолы’;
………………….
end;
Класс- ұрпақ өзінің барлық аталарынан барлық өрістерді ала алады және оны өзінікімен толықтырады, бірақ алдын ала анықтай алмайды немесе өшіре алмайды. Сөйтіп, тармақ иерархиясында класс қаншалықты төмен орналасса, соншалықты оның объектілерінен мәліметтер ала алады.
Әдістер
Класта инкапсуляцияланған процедуралар мен функциялар әдістер деп аталады. Олар әдеттегі қосалық программалар тәрізді хабарланады:
Тype TMyClass=class
Function MyFunc(aPar:Integer):integer;
Procedure MyProc;
End;
Кластың әдістеріне кіру оның өрістеріне кіргендей құрама атаулардың көмегімен жүзеге асырылады.
Var
AObject:TmyClass;
Begin
………
AObject:MyProg;
………
end;
Жоғарыда айтылғандай кластың әдістері ұрпақтарында жабылып тұруы мүмкін. Мысалы,
Type
TparentClass=Class
Procedure DOWork;
End;
TChildClass=Class(TParentClass);
Procedure DOWork;
End;
Екі кластың ұрпақтары да DOWork процедурасының атауы бойынша ұқсас әрекеттерді орындау мүмкін. Бірақ, бұл жалпы жағдайда әртүрлі орындалады. Әдістерді мұндай ауыстыру статикалық деп аталады, яғни компилятормен программаны жүргізу кезеңінде жүзеге асырылады. Object Pascal тілінде программаны жүргізу кезеңінде әдістерді динамикалық ауыстыру жиі пайдаланылады. Мұны жүзеге асрыу үшін аталық класта оранласқан әдіс динамикалық (dynamic директивасымен) немесе виртуалды (virtual) түрде хабарлануы тиіс. Осындай хабарлауды кездестіргеннен кейін компилятор екі кесте құрады: DMT (Dynamic Method Table) және VMT (Virtual Method Table), оларды сәйкес динамикалық немес виртуалдық әдістердің кіру нүктесіндегі адреске орналастырады. Әрбір ауыстырылатын әдіске оралған компилятор сәйкес кестелердің бірінен қосалқы прогаммаға кіру нүктесінің адресін шығаруға мүмкіндік беретін кодты қояды.
Класс ұрпағына әдісті алмастыру override (жабу) директивасымен хабарланады. Осы нұсқауды алғаннан кейін, компилятор программаны жүргізу кезеңінде ата-аналық кестесіне класс-ұрпақ әдісінің кіру нүктесін орналастырады, ал аталыққа жаңа әдістің көмегімен қажетті әрекетті орындауға мүмкіндік береді.
Мысалы, аталық класс Show және Hide әдістерінің көмегімен экранда бейнені көрсетеді немесе жасырады. Бейнені құру үшін длогикалық параметрі бар DRAW әдісін пайдаланады:
Type
TVisual Object=class(TWinControl)
Procedure Hide;
Procedure SHOW;
Procedure DRAW(IsSHOW:Boolean):Virtual;
End;
TVisualChildObject=class(TVisual Object)
Procedure DRAW(IsSHOW:Boolean):override;
end;
Show және Hide әдістерінің жүзеге асырылуы өте қарапайым:
Procedure TVisual Object.SHOW;
Begin
DRAW(True);
End;
Procedure TVisual Object.Hide;
Begin
DRAW(false);
End;
Аталық және ұрпаққа DRAW әдісінің жүзеге асырылуы әртүрлі және әртүрлі бейнелер құрылады. Нәтижесінде, SHOW және Hide аталық әдістері - өзінің кез келген ұрпағындағы DRAW әдісінің нақты жүзеге асырылуына тәуелді болады. Динамикалық байланыстыру толығымен кластар полиморфизмін жүзеге асырады.
Динамикалық және виртуалдық әдістердің арасындағы айырмашылығы- динамикалық әдістер кестесінде осы класта тек dynamic ретінде хабарланған әдістер адрестері болады, ал виртуалдық кестесінде сол кластын вертуалдық әдістерімен қатар, оның барлық аталықтарының да адрестері сақталады. Көлемі айтарлықтай VMT келесі жылдам іздеуді жүзеге асырады, сондай-ақ, динамикалық әдіске оралғанда программа алдымен DMT объектінің кестесін қарап шығады, одан кейін аталық класын қажетті кіру нүктесі табылғанша іздейді.
Динамикалық жабылатын әдістер ешнәрсе орындамауы мүмкін. Мұндай жабылатын әдістер ешнәрсе орындамауы мүмкін. Мұндай әдістер абстрактылы әдістер деп аталады, олар ұрпақтарында жабылуға міндетті. Прогаммист abstract директивасымен хабарлау арқылы абстракт әдісі шығаруға тосқауыл қоя алады. Мысалы:
Type
TvisualObject=class(TWinControl)
….
Procedure DRAW(IsSHOW:Boolean);
Virtual;abstract; end;
TVisualChildObject=class(TWinControl)
......
Procedure DRAW(IsSHOW:Boolean):override;
End;
Var
aVisualObject:TvisualObject;
aVisualChild:TvisualChildObject;
begin
…
aVisualObject.SHOW; {қате / Абстракт әдіс шақырылды}
aVisualChild.SHOW {Шақыру дұрыс. TVisualChildObject класындағы DRAW әдісі жабылған}
End;
Жабылмаған абстракт әдісті шақыру орындалу барысында қате болып есептеледі. Сауатты құрылған прогрммада абстракт әдіс шақырылмайды.
Кез-келген класстың құрамына екі арнайы әдіс кіреді: конструктор және деструктор. Tobject класында бұл әдістер Create және Destroy деп аталады. Конструктор динамикалық жадыда объектілерді үлестіреді және жадының осы адресіне SELF айнымалысын орналастырады, ал автоматты түрде класта хабарланады. Конструктор және деструктор процедура болып табылады, бірақ Constructor және destructor қызметші сөздерінің көмегімен хабарланады:
Type
TMyClass=class
IntField:integer;
ConstructorCreate(Value:integer);
Destructor Destroy;
End;
Көптеген конструкторлар объектінің дұрыс жұмыс істеуіне қажетті қандай да бір әрекетті орындайды. Сондықтан класс ұрпақ конструкторында алдымен өзінің аталық конструкторын шақыру қажет, одан кейін қосымша әрекеттер жүзеге асырылады. Аталық кластағы кез-келген әдісті шақыру Inherited (мұрагер) қызметші сөзінің көмегімен жүзеге асырылады:
Constructor TMyClass.Create (Value:integer);
Begin
InheritedCreate; // Мұрагер конструкторды шақыру
Inherited:=Value //Қосымша әрекетті орындау
End;
Кейбір әдістер объектіні құрмай және иницилизация жасамай-ақ шақырылуы мүмкін. Мұндай әдістер кластың әдістері деп аталады, олар Class қызметші сөзінің көмегімен шақырылады.
Type
TMyClass=class(TObject)
Class Function GetClassName:String;
End;
S:string;
Begin
S:=TmyClass.GetClassName;
…..
End;
Кластың әдістері өрістерін шақыра алмайды, жалпы жағдайда объект құрмай –ақ шақырылады. Әдетте класс туралы қызметші ақпаратпен шектеледі: класс аты, аталық класс аты, әдістің адресі және т.б.
Бір атаулы әдістер
Бір кластың шеңберінде бірнеше бір атаулы әдістерді пайдалануға болады. Жоғарыда сипатталған аталық әдісті жабу тәсілі ұрпақтың жабылған аталық әдісті «көрмеуіне» әкеледі. Оны тек Inherited қызметші сөзінің көмегімен шақыруға болады.
Бір атулы әдіс табылатын болса, Delphi компиляторы класта осыған ұқсас әдіс басқа параметрмен келтірілгендігі туралы ескертеді.
Бір атаулы әдісті хабарлау үшін reintroduce қызметші сөзі пайдаланылады.
Келесі мысалда TForm 1 класында 4 бір атаулы әдіс-Close пайдаланылады. Олардың тек біреуі-параметрсіз мұрагер әдіс-өзінің негізгі қызметін атқарып, терезені жабады. Ал, қалған үшеуі параметржинағымен ерекшеленіп, терезе тақырыбына хабарлама шығарады.
Бос формаға төрт TButton батырмаларын орналастырып, оған OnClickын өңдеушілерін жазыңдар:
Procedure TForm1.Button1Click(Sender:TObject).
Begin
Close(“символдар жолы”)
End;
Procedure TForm1.Button2Click(Sender:TObject);
Begin
Close(123)
end;
Procedure TForm1.Button3Click(Sender:TObject);
Begin
Close(20,300)
end;
Procedure TForm1.Button4Click(Sender:TObject);
Begin
Close
end;
Енді Private бөліміне TForm1 класының хабарлануы үшін төмендегідей үш Close әдісін орналастыруға болады:
Private{ Private declaration}
Procedure Close (S:String); reintroduse; overload;
Procedure Close (I:Integer); reintroduse; overload;
Procedure Close (I,J:Integer); reintroduse; overload;
Одан кейін Implementation е хабарланған әдістердің сипатталуын жазыңдар:
Procedure TForm1. Close (S:String);
Begin
Caption:=S
End;
Procedure TForm1. Close (i:integer);
Begin
Caption:=IntToStr(i)
End;
Procedure TForm1. Close (i,j:integer);
Begin
Caption:=IntToStr(i*j)
End;грамма орындалғанда алғашқы үш батырма TForm1 класының Close әдісін шақырады және терезенің тақырыбы ауысады, сонымен қатар Button4 батырмасы тәрізді аталық TForm класының Close әдісін шақырып, терезені жабады.
Қасиеттер
Қасиеттер – бұл өріске кіру мүмкіндігін реттейтін кластардың арнайы механизмі.
Қасиеттер property, read және write қызметші сөздерінің көмегімен хабарланады (read және write сөздері тек қасиетті хабарлау контексінде пайдаланатын қызметші сөздер). Әдетте қасиет қандайда бір өріспен байланысты болады және осы өріске жазуда немесе одан оқуда пайдаланатын кластың әдістерін көрсетеді. Мысалы:
Type
TaClass=class
IntField:integer;
Function.GetField:integer;
Procedure SetField (Value&integer);
Property IntegerValue:integer read
GetField write SetField;
End;
Программа контексінде қасиет өзін әдеттегі өріс ретінде көрсетеді.
Сондай-ақ, төмендегідей операторларды жазуға болады:
Var
aClass:TaClass;
Value:integer;
Begin
aClass:=TaClass.Create {емесе қасиетті шақырар алдындағы конструктордың міндетті шақырылуы}
aClass.InterValue:=0;
…
Value:=aClass.InterValue;
…
aClass.Destory; // керек емес объектіні өшіру
Мұнымен бірге, төмендегідей меншіктеу операторының жазылуы мүмкін:
aClass.IntField:=NewValue;
Бұл оператормен төмендегі оператордың арасындағы айырмашылық-қасиетті шақырғанда SetField әдісі автоматты түрде қосылады және арнайы әрекеттер орындалады.
Оқу программасында келтірілген
LbOUTPUT.CAPTION:=’жол’
Операторын еске түсірейік.
Label компонентінің Caption қасиеті SetText әдісін шақырады, ол ішкі айнымалыдағы символдар жолын сақтап қана қоймай, жаңа мәтінді де еске сақтайды.
Егер қасиетті арнайы оқу немесе жазу үшін қажеттілік болмаса сәйкес әдістің атауының орнына өріс атауын көрсетуге болады:
Type
TaClass=class
IntField:integer;
Procedure SetField (Value:integer);
Property IntegerValue:integer read IntField write SetField;
End;
Егер қасиет тек оқу немесе жазу үшін ғана қажет болса, онда оған сәйкес бөлігін жазбауға болады. Қасиет өріспен байланыспауы да мүмкін.
Шынында, ол қасиеттің өзінің типіндей мәліметтерден қандайда да бір әрекетті жүзеге асыратын бір немесе екі әдісті сипаттайды.
Кластарды хабарлау
Жаңадан құрылатын кез келген класс төмендегідей қызметші сөздермен анықталатын секциялардан тұрады: Private (жабылған), protected (қорғалған), public (мүмкін) және automated (автоматтандырылған). Әрбір секцияның ішінде басында өріс, одан кейін әдістер мен қасиеттер анықталады.
Секциялар класы сипаттау элементтерінің көрінетін бөлінгін анықтайды. Public секциясы ондағы көрсетілген өрістердің көріну бөлігіне шектеулер жасамайды, әдістер мен қасиеттерді кез келген басқа программа модулінде шақыруға болады. Published секциясы көріну бөлігін шектемейді, бірақ мұнда тек орындалу кезеңінде ғана мүмкін болатын қасиеттер ғана емес, программа құру кезеңіндегі қасиеттер жащылады (яғни объектілір инспекторы терезесінде).
Published секциясы тек стандартты мес компоненттерді жасауда пайдаланылады. Delphi ортасы формаға орнатылған компоненттерді сипаттауды арнайы аты жоқ секцияғаорналастырады, ол класс тақырыбынан кейін жазылады да, бірінші хабарланған секцияға дейін жалғасады. Бұл секция Published деп аталады.
Private секциясы көріну бөлінген ең төменгі деңгейде дейін кішірейтеді: жабық элементтердің сипатталуы осы кластың ішіндегі, яғни класс сипатталған модульде орналасқан әдіс пен қосалқы программаға ғана пайдаланылады. Protected секциясы тек сол кластың әдістері үшін, сондай-ақ, кез келген оның ұрпақтары үшін пайдаланылады, бірақ оның орналасуына тәуелсіз.
Private секциясында хабарланған элмент, егер ол басқа модульде орналасқан болса, тіпті кластың жақын ұрпақтары үшін де пайдаланылмайды. Automated секциясы OLEін автоматтандыру интерфейсінде қосылатын қасиеттер мен әдістерді хабарлау үшін пайдаланылады; бұл секцияның мүшелерінің көріну бөлігі шектелмеген.
Object Pascal де кез келген секцияны бірнеше рет, яғни қажетіне қарай хабарлай беруге болады, секцияларды пайдаоанушы қалауынша орналастыруына болады. Кез келген секция бос болуы мүмкін. Келесі программа фрагменті секциялардың экрандағы көріну бөлігін сипаттайды.
Unit Unit1;
Interface
Uses Controls, Forms;
Type
TForm1=class(TForm)
Button1:TButton;
Private
FintField: integer;
Procedure SetValue(Value:Integer);
Function GetValue:Integer;
Published
Property IntField: read GetValue write SetValue
Protected
Procedure Proc1;
Public
Procedure Proc2;
End;
Var
Form1:TForm1;
Implementation
Procedure TForm1. Proc1;
Button1.Color:=clBtnFace;
FIntField:=0;
IntField:=0;
Proc1;
Proc2;
End;
Begin
Form1.Button1.Color:=clBtnFace;
Form1. FLintField:=0;
Form1. IntField:=0;
Form1.Proc1; //Бұл жазу қате!
Form1.Proc2;
End;
Unit Unit1;
Interface
Uses Controls, Unit1;
Type
TForm2=class(TForm1)
Button2:TButton;
Procedure Button2
Procedure Button2Click(Sender:TObject);
End;
Var
Form2:TForm2;
Procedure Tform2.Button2Click(Sender:TObject);
Begin
Button1,Color:=clBthFace;
FintField:=0; // Бұл жазу қате!
Proc1;
Proc2;
End;
Begin
Form1.Button1.Color:=clBthFace;
Form1.FintField:=0; // Бұл жазу қате!
Form1.IntField:=0;
Form1.Proc1;//Бұл жазу қате!
Form1.Proc2;
End;
Класс — ұрпақты хабарлауда класс элементтерін бір көріну бөлігінен басқа бөлігіне алмасиыруға болады. Алдыңғы мысал үшін төмендегідей хабарлауды жазуға болады:
Type
Tform2=class(TForm2)
...
Public
Procedure Proc1;
...
end;
Осындай хабарлаудан кейін Unit2 модулін былай шақыруға болады:
Form2.Proc1;
Private секциясына алмастыру жасағаннан кейін хабарлау элементі ұрпақтарына көрінбейді (егер ұрпақ басқа модульде хабарланған болса), онда кейін оны басқа секцияға орналастыруға болмайды.
Класс модульдің тек интерфейстік бөлігінде немесе жүзеге асырудың бастапқы кезеңінде хабарланады. Класты қосалқы программаның сипаттау бөлігінде анықтауға болмайды.
Дәріс №4. Қолданбалар пішімі. Пішімнің компоненттері.
Программалар жобасымен жұмыс істеу процесінде сізге формалар мен модульдер жиындығын құру қажет. Бұл мәліметтерді жеке папкада файлдар түрінде сақтаған дұрыс. Оның ішінде өзініздің жұмыс папканызды құруға болды. «My_fist_program» деген атпен папка құрыңыз, оның ішіне өздерініздің программанызды сақтайтын папка құрыңыз.
Екіншіден, Delphi ортасының стандартты келтірілген күйіне өзгеріс енгізу қажет. Бұл сіздің құрған программаңыздың соңғы нұсқасының автоматты түрде сақталу үшін керек.
Ол үшін Tools/Environment Options менюін таңданыз, пайда болған сұхбат терезесінде Preferences бетінің екеніне назар аударыңыз. Осы беттің сол жақ жоғарғы бұрышында Autosave Options тобында “Editor Files”және “Desktop” деген ауыстырып қосқыштары бар. Ауыстырып қосқыштары екпінді жасау- программа коды терезесінің мәтінін және Delphi терезесінің жалпы орналасуын автоматты түрде сақтайды. Бұл программаны жоғалудан қорғайды. Тышқанмен белгілеу арқылы осы ауыстырыа қысқыштарды екпінді жасаймыз. Компиляция барысын қадағалап отыру үшін Compiling және Running тобындағы Show Compiler Progress ауыстырып қосқышын екпінді жасаңыз. Сондай –ақ, программа кодына түсіндірмені – мәтін фрагменттерін сақтауға болады, ол программа жұмысына әсер етпейді, бірақ оның мәтінін түсінікті етіп көрсетеді. Мәтін шығару үшін шрифті тағайындау қажет:
Tools/ Editor Options Display бетінде Editor Font–қа Times New Roman шрифт түрін тағайындау қажет.
Енді алғашқы программаны жүргізуге бәрі дайын болды. Негізі терезеден батырмасын немесе F9 басқару клавишын басыңыз. Сонымен, Delphi ортасындағы программа үш кезеңнен өтеді: компиляция – компоновка – орындау.
Компиляция кезеңінде код терезесінде дайындалған программа мәтіні Object Pascal тіліне ауыстырылады; комппоновка кезеңінен дайын программа жедел жадыға шақырылып, орындалуға жіберіледі.
F9 клавишін басқаннан кейін Save Unit1 As сұхбат терезесі пайда болады, яғна Delphi Unit1.pas модулі үшін файлдфң аты мен ол орналысатын папканың атын сұрайды, сондай-ақ, модульдің де атын өзгерту қажет (немесе әрбір есепке жеке папка ашып, Save All командасы арқылы бәрін сақтаған дұрыс).
Delphi- дегі атаулары. Delphi- дегі атау латын әріптерінен басталатын әріптер, цифрлар және сызғыш болуы тиіс, атау цифрдан басталуы керек, ұзын атау бере беруге болады.
Форманың қасиеттерін өзгерту
Алдымен модуль ұғымына тоқталайық. Әрбір жаңа форма құрғанда модуль құрылады. Программаны компиляциялау кезінде Delphi заты .PAS, .DFM және .DCU болып келген файлдарды әрбір модуль үшін құрады: .PAS файл- программа коды терезесіндегі мәтін көшірмесінен тұрады; заты -.DFM файылында форма терезесінің мазмұны сақталады; ал файылында – екі файлдан алынған мәтінді машиналық нұсқауға түрлендіру нәтижесі сақталады. .DCU файлдары компилятормен құрылады және ол компоновщиктің жұмысы үшін қажетті базаны береді. Одан кейін ол заты .EXE болып келген біртұтас шақырылатын файлға түрленеді. Енді программаны түрлендіру көрейік, алдымен терезе тақырыбын өзгертейік. Алғаш Delphi жүйесіне кіргеннен кейін, терезе тақырыбы форма тақырыбына сәйкес келеді. Тақырыпты өзгерту үшін Объектілер Инспекторы терезесіне беру қажет. Form1 программасының терезесін жабыңыз. Объектілер Инспекторы терезесінің Caption жолын тышқанмен белгілеңіз. Осы жолдың оң жағында жыпылықтаған курсор болады. Клавиатураны кириллицияға ауыстырып, «программа» деп жазыңыз, одан кейін F9 ды басыңыз. Программаның бұл орындалуы – тақырыбы «программа» деп аталатын терезе құру. Объектілер Инспекторы терезесі арқылы программалар терезесінің бір қасиетін – тақырыбын өзгертейік. Дәл осылай формалардың кез келген қасиетін өзгертуге болады.
Формаға жаңа компоненттер орналастыру
Формаға жаңа компонент орналастыруды қарастырайық. Ол үшін алдымен орналасатын компонентті таңдау қажет, одан кейін форма терезесіндегі компонент орналасытын орынды тышқанмен белгілеу жеткілікті.
Енді программалар терезесіне әртүрлі жазуларды, түсініктемелерді орналастыруға арналған Label(белгі) компонентін орналастырайық. Алдымен, компоненттер политрасынан Standard бетінің ашылғанына көз жеткізу қажет. Курсорды әрбір компоненттің үстінен жүгізгенде оның аты жазылады. Компоненттер политрасына курсорды келтіріп, тышқанмен белгілейміз, одан кейін форма терезесінде белгінің орнын көрсетеміз.
Жаңа компоненттің стандартты аты Label1, батырмадағы жазудың да аты осындай болады. Объектілер Инспекторы терезесіндегі жолының көмегімен бұл жазуды оңай өзгертуге болады: «программа N1» деп енгіземіз. Бұл енгізілген жазу формадағы компоненттен көрінеді.
Енді жазудың түсі мен шрифті өзгертейік. Ол үшін Объектілер Инспекторы терезесіндегі Font қасиетін тышқанмен белгілейміз, батырманың көмегімен жолдың оң жақ бөлігінен шрифті түзететін сұхбат терезесі ашылады. Size тізімінен шрифтің өлшемін 24, Color тізімінен қажетті түсті таңдаймыз. ОК батырмасымен терезені жабамыз. Форма терезесіндегі компоненттегі жазу өзгеруге сәйкес қасиетін өзгертеді.
Дәріс №5. Оқиғалы-басқармалы программалау. Оқиға және оқиғаларды өңдеу процедурасы.
Оқиғалар. Программалық код терезесі.
Delphi -де программа түрлі оқиғалар арқылы басқарылады.
Оқиға- программамен жұмыс істеу барысында обьект жағдайының белгілі бір әрекетке жауап ретінде өзгеруі. Мысалы: пайдаланушы программа құру үшін алдымен формаға компонент орнатуы, форманы не формада орналастырылған компонентті тышқан арқылы шерту мүмкін. Оның әр іс-әрекеті оқиға шығарады. Delphi -де әр оқиға атау беріліп қойылған. Әр обьектіге байланысты оқиғалар көп . Мысалы: формаға байланысты өқиғалар саны 35. Олар қасиеттер терезесінің Events қосымша бетіне еңгізілген. Терезеде оқиға атауларының алдына On прифексі (қосымшасы) тіркестіріліп жазылған. Ол-атаудың оқиға екендігін білдіретін белгі:
Delphi ортасында жиі кездесетін оқиғалар
OnClick-тышқан түймесін бір рет басу.
OnDblClick-тышқан түймесін екі рет басу.
OnKeyDown-клавишті басу.
OnGreatе-форманы екі рет шерту басу т.б.
Проект екі бөлімнен тұрады: автоматты түрде project1 атауы берілген проекті файлы
(негізгі модуль) және Unit1.pas атауы берілген модуль. Олар жеке терезелерде орналасқан. Модульге оқиғаларға сәйкес іс-әрекеттерді орындайтын программа мәтіні (процедуралар) еңгізіледі. Программа мәтінің программалық код деп , ол еңгізілетін процессі деп атайды. Формада код терезесіне өту және код терезесінен формаға өту үшін F12 клавишін басу жеткілікті.
Формасы екі рет шерткен кезде ол терезесіне еңгізілген процедура дайындамасы көрсетілген. Оқиғаға байланысты құрылатын процедура Оқиғаны өңдуіш не өңдеу процедурасы делінеді. Процедура дайындамасының жазылу түрі:
Procedure <атау> (Sender:TObject);
<сипаттау бөлімі>
begin
<процедура денесі>
еnd;
Мұндағы: Sender- құрылатын процедураның қай класқа тиістілігін анықтайтын параметр.
Терезенің сол бөлігінде –браузер терезесі.
Онда код терезесінде барлық жариялаулардың құрылым көріп шығуға болады.
- Берілгендерді еңгізу және шығару. InputBox функциясы ShowMessage процедурасы. Типті түрлендіру функциялары.
Delphi -де айнымалы мәнің еңгізу үшін меншіктеу командасын, еңгізу терезесін не форманың Edit компонентің өрісін пайдалану мүмкін.
Delphi -де нәтижені ShowMessage процедураның терезесіне шығаруға болады. Процедураның жазылу түрі:
ShowMessage(FloatStr(S));
ShowMessage(FloatTostrF(S,ffgeneral,7,3));
Жүйе соңғы операторды оқып шығып, 7 цифрдан тұратын нақты санды символдық типте
ShowMessage терезесінде көрсетеді.
1.Мысалы: х=4,8 үшін у=3х+5/3 функциясының мәнің есептеу керек. Х мәні InputBox терезесі арқылы еңгізілсін, у мәні ShowMessage терезесінде көрсетіледі.
1. File-New Application командасын беріп, жаңа жоба ашу Form1 терезесі көрінеді.
2. Форма екі рет шерту Unit1.pas атаулы модель құрылады да, On Greate оқиғасын өндеуіне процедурасының дайындамасы көрінеді.
Form1 Form Greate форманы екі рет шерту оқиғасынан жауап ретінде құрылатын процедураның құрама атауы.
( Delphi -де әр қайсысы ұқсас толық бір іс-әрекетті орындайтын программалар тобы не, басқаша айтқанда, әдістер немесе қасиеттер орталығымен сипатталатын обьектілер жиынтығы класс деп, олардың біреуі класс данасы делінеді. Обьект орындай алатын әрекет әдіс деп аталады)
Екіншісі процедураның аты. Ол обьект және оқиға атауларының қосындысынан тұрады (оқиға атауының алдында On қосымшасы жазылмайды)
Көбінесе программа әр қайсысы нақты оқиғаны өндеуге арналған процедуралар жиынтығынан тұрады. Жиынтыққа қосалқы программа-процедура, функциялардың еңгізілуі де мүмкін.
Дәріс №6. VCL Delphi кітапханасының компоненттері. VCL Delphi кітапханасының батырмалары, индикаторлары, басқару элементтері.
Delphi7 oртасында ішкі программаларды пайдалану жолдары көрсетіледі. Бұл тақырып бойынша негізгі түсініктерді және ұғымдарды беруде оларды жаттықтырушы есептермен бекітіп отырған қолайлы болады. Мыалдарды күрделі емес, ықшам етіп, және 1-мысалды екі тәсілмен (процедура мен функция) көрсету оқушылардың тез түсінулеріне ықпал етеді деп ойлаймыз. Енді оқушыларға 2-мысалды функциямен, 3-мысалды процедурамен шығаруды талап етуге болады. Содан кейін оқушыларға жеке орындауға арналған тапсырмалар ұсынылады. Оқушыларға теориялық мағлұматтарды нәтижелі меңгерту үшін осындай практикалық жаттығу есептерін олардың орындалу іс-әрекетін ретпен көрсету арқылы ұсыну қолайлы деп есептейміз.
Компоненттер дегеніміз жұмыс істейтін программада құрылатын, көрінетін бейнелер тұрғызылатын элементтер болып табылады. Компоненттер палитрасының ішінде бейне ретінде көрінбейтін де компоненттер жеткілікті. Сонымен, бұл тарауда біз Delphi ортасының негізгі компоненттеріне тоқталамыз.
3.1. SТANDARD беті
SТANDARD бетінде программа құруға ең қажетті Windows-ге арналған стандарты интерфейстік элементтерден тұратын компоненттер палитрасы орналасқан.
3.1-сурет. Sтandard беті.
Frame – басқа компоненттерді орналастыруға арналған контейнер қызметін атқарады (қызметі форма терезесімен бірдей). Формадан айырмашылығы компоненттерге дайындық құра отырып, компоненттер палитрасында орналасады.
MainMenu – Программаның бас менюі. Бұл компонент күрделі иерархиялық меню құрып жұмыс істеуге мүмкіндік береді.
Label – форманың бетіне мәтін шығаруға аранлаған. Компоненттің қасиеті мәтіннің түрі мен орналасуын анықтайды.
Edit – енгізу өрісі – символдар жолынжөндеуге арналған.
Button – командалық батырма.
Memo – бірнеше жолдан тұратын мәтіндік редактор құру элементі болып табылады.
RadioButton – қызметі басқа батырмалардың қызметімен байланысты болатын тәуелді батырма болып табылады. Егер сұхбат терезесінде бірнеше ауыстырып қосқыш пайдаланылатын болса, онда әрбір топты RadioGroup компоненті арқылы беруге болады.
CheckBox – басқаларға тәуелсіз ауыстырып қосқыш батырманы сипаттайды.
ListBox – қажетті элементті таңдауға болатын тізімді береді.
ComboBox – енгізу өрісіне мәліметтерді клавиатурадан теріп енгізуге немесе тізімнен таңдауға мүмкіндік береді.
-
ADDITIONAL беті
Additional бетінде сұхбат терезелерінің түрін түрлендіруге мүмкіндік беретін 18 қосымша компоненттер орналасқан.
3.2 – сурет. Additional беті.
BitBtn – жазуы бар, пиктограммалы командалық батырма.
SpeedButton – пиктограммалық батырма. Әдетте бас менюдің опцияларына жылдам кіру үшін пайдаланылады.
MaskEdit – арнайы мәтіндік редактор. Енгізілген мәтінді сүзгілеуге мүмкіндік береді, мысалы, датаны дұрыс енгізу үшін қажет.
StringGrid – жолдар кестесі. Бұл компонент мәтіндік ақпаратты кесте түрінде шығаруға мүмкіндік береді.
DrawGrid – еркін кесте. StringGrid компонентінен айырмашылығы бұл компоненттің ұяшықтарында кез келген ақпарат, оның ішінде сурет те сақталады.
Image – сурет. Бұл компонент суреттерді, оның ішінде пиктограммалар мен метафайлдарды бейнелеуге арналған.
Shape – фигура. Бұл комполненттің көмегімен терезеге дұрыс геометриялық фигураларды – тіктөртбұрыш, шеңбер, эллипс және т.б. қоюға болады.
Bevel – жиек. Терезенің жеке бөліктерін үш өлшемді қоршаумен немесе жолақпен ерекшелеуге арналған.
ScrollBox – орағыш жолақтар панелі. Panel компонентінен айырмашылығы – егер орналасқан компоненттер оның шекараларымен қиылыспаса, онда орағыш жолақтарды автоматты түрде қояды.
CheckListBox - жиынтық таңдаулар тізімі. Стандартты ListBox компонентінен айырмашылығы әрбәр опциясының қасында бірнеше опцияны бірден таңдауды жеңілдтетін CheckBox тәрізді тәуелсіз ауыстырып қосқышы бар.
Splitter – шекара. Бұл компонент формада көрінетін екі компоненттің арасында орналасады да, пайдаланушыға программаны жүргізу кезінде компоненттерді бір-бірінен бөліп тұрған шекараларын алмастыруға мүмкіндік береді.
StaticText – статикалық мәтін. Стандартты Label компонентінен айырмашылығы өзінің жеке Windows терезесінің болуымен сипатталады. Ол мәтінге қоршау жүргізуге мүмкіндік береді.
ControlBar – басқару жолағы. DRAG&DOG технологиясында «тақалып» тұратын компоненттерді орналастыратын контейнер қызметін атқарады.
ApplicationEvents – оқиғаны қабылдаушы. Егер бұл компонент формаға орналасқан болса, онда програмсмаға арналған барлық Windows хабарламаларын алып отырады.
ValueListEditor – атау = мән жұбынан тұратын жолдар редакторы. Мұндай жұптар Windows-де жиі пайдаланылады.
LabeledEdit- бір жолдық редактор мен белгінің комбинациясы.
ColorBox – жүйелі түстердің бірін таңдауға арналған арнайы ComboBox варианты.
Chart – диаграмма. Бұл компонент мәліметтерді графикалық жолмен беруге арналған арнайы панельдер құруды жеңілдетеді.
ActionManager - әрекеттер менеджері. Төмендегі үш компонентпен бірге қосымшалар, интерфейс құруды қамтамасыз етеді.
ActionMainMenuBar – меню жолағы, ол оның опциялары ActionManager көмегімен құрылады.
ActionToolBar – ActionManager компонентінің көмегімен құрылатын пиктографиялық батырмаларды орналастыруға арналған жолақ.
CustomizeDLG баптау сұхбаты. Бұл компоненттің көмегімен пайдаланушы жұмыс программасының интерфейсін қалауынша баптай алады.
-
WIN 32 беті
WIN 32 беті 32 разрядты WINDOWS 95/98/NT/2000 операциялық жүйелерінің интерфейстік элементтерінен құралады. (бұл 2-нұсқада WIN 95 деп аталады).
3.3 - сурет. WIN 32 беті.
TabControl – қойымталар жиынтығы. Әрбір қойымта жазуы немесе суреті бар тіктөртбұрышты өріс болып келеді. Қойымтаны таңдау программа арқылы жүргізіледі және терезедегі компоненттер жиынтығын басқару үшін пайдаланылады.
PageControl – қойымталары бар панельдер жиынтығы. Әрбір панельдің өзінің инерфейстік элементтер жиынтығы бар. Ол өзіне байланысты қойымтаны тышқанмен белгілеу арқылы жүзеге асырылады.
ImageList – суреттер жиынтығы. Өлшемдері бірдей бірнеше суретерді сақтауға мүмкіндік береді.
RichEdit – форматталған мәтінге арналған көп жолдық редактор. Memo компонентінен айырмашылығы RichEdit компонентіндегі мәтін Кеңейтілген Мәтіндік Формат ережесіне бағынады (RTF – RICH TEXT FORMAT) және шрифт, түс, туралау тәрізді сипаттамаларын өзгерте алады.
TrackBar - регулятор. Программадағы кейбір шамалардың мәндерін басқару үшін пайдаланылады. Мысалы, оның көмегімен мультимедиалық программалардағы дыбыстың дауысын оңай өзгертуге болады.
ProgressBar – процесс индикаторы. Бұл компоненттің көмегімен ұзақ уақыт орындалатын процестің атқарылуын бейнелеуге болады. Мысалы, мәліметтерді дискетке көшіру барысы.
UpDown – цифрлық регулятор. Бұл компоненттің екі батырмасы компонентке байланысты сандық мәнді үлкейтуге немесе кішірейтуге арналған.
Hotkey – басқару клавиші. Компонент басқару клавиштерін енгізу үшін пайдаланылады.
Animate – мультипликатор. Бірінен кейін бірі ауысып отыратын қозғалыстағы суреттерді (видеоклип) бейнелеуге арналған. Компонент дыбысы бар видеоклипті сүйемелдей алмайды.
DateTimePicker - күн, уақыт селекторы. Бұл компонент күнді немесе уақытты енгізіп, бейнелеуге арналған.
TreeView – таңдау тармағы. Пиктограммалардың тармақты құрылыммен байланысқан жиынтығын береді. Әдетте каталогтар құрылымын және басқа да иерархиялық қатынаспен байланысқан элементтерді көру үшін пайдаланылады.
ListView – пиктограммалар панелі. Бірнеше пиктограмаларды көруді және қажеттісін таңдауды ұйымдастырады. Бұл компонент пиктограммаларды тігінен немесе көлденеңінен орналастырып, оларды үлкейтіп немесе кішірейтіп көрсетеді.
HeaderControl – басқарушы тақырып. Жазуы бар секцияларға бөлінеген, тік немесе көлденең жолақ болып келеді. Секциялардың өлшемін програмам жұмысы кезеңінде тышқанмен өзгертуге болады. Әдетте әртүрлі кестелердегі жолдар мен бағандардың өлшемін өзгерту үшін пайдаланылады.
StatusBar – статус панелі. Жөндеу терезесінде әртүрлі нұсқау беретін ақпараттарды орналастыруға арналған.
ToolBar – саймандық панель. Бұл компонент Bitbtn командалық батырмалары үшін контейнер қызметін атқарады. Сондай-ақ, олардың өлшемдерін және батырмаларды өшіргендегі немесе жаңасын қосқандағы орнын автоматты түрде өзгерте алады.
CoolBar – саймандық панель. ToolBar компонентінен айырмашылығы WINDOWS-дің Edit, ListBox, ComboBox және т.б. тәрізді стандартты интерфейстік компоненттерін орналастыруға арналған контейнер ретінде пайдаланылады.
PageScroller – айналатын панель. Жіңішке саймандық панельдерді орналастыруға мүмкіндік береді. Қажеттілігіне қарай панельдің жиегіне орағыш стрелкаларды автоматты түрде орналастырады.
ComboBoxex - ComboBox компонентіне ұқсас, бірақ ашылатын тізімге шағын бейнелерді бейнелеуге мүмкіндік береді.
3.4. SYSTEM беті
Бұл бетте басқару қызметі бар компоненттер келтірілген, оның ішінде Windows үшін стандартты OLE (Object Linking and Embedding) және DDE (Dinamic Data Exchange) мәліметтерімен алмасуды сүйемелдейтін де компоненттері бар.
3.4-сурет. System беті
Timer – таймер. Бұл компонент шынайы уақыт аралығын есептеу қызметін атқарады.
PaintBox – сурет салуға арналған терезе. Графикалық бейнелерді салуға арналған тіктөртбұрышты бөлік құрады.
MediaPlayer – мультимедиалық ойнатқыш. Бұл компоненттің көмегімен әртүрлі мультимедиалық құрылғылар басқарылады.
OleContainer – OLE – контейнер. Байланыстырылатын немесе енгізілетін объектілерді қабылдау қызметін атқарады.
-
DIALOGS беті
Dialogs бетінің компоненттері Windows үшін стандартты сұхбат терезелерін жүзеге асырады.
3.5-сурет. Dialogs беті.
OpenDialog – ашу. Стандартты «файлды ашу» сұхбат терезесін шығарады.
SaveDialog – сақтау. Стандартты «файлды сақтау» терезесін шығарады.
OpenPictureDialog – суретті ашу. Суретті алдын ала көру мүмкіндігін сақтай отырып, графикалық файлды таңдайтын арнайы терезені шығарады.
SavePictureDialog – суретті сақтау. Суретті алдын ала көру мүмкіндігін сақтай отырып, графикалық файлды сақтайтын арнайы терезені шығарады.
FontDialog – шрифт. Шрифті таңдайтын стандартты сұхбат терезесін шығарады.
ColorDialog – түс. Түсті таңдайтын стандартты сұхбат терезесін шығарады.
PrintDialog – басып шығару. Құжатты басып шығаруға арналған параметрлерді таңдау сұхбат терезесін шығарады.
PrinterSetupDialog - принтерді баптау. Басу құрылғысын баптауға арналған стандартты сұхбат терезесін шығарады.
FindDialog – іздеу. Мәтін фрагментін іздеуге арналған стандартты сұхбат терезесін шығаруға мүмкіндік береді.
ReplaceDialog – Мәтін фрагментін іздеу мен алмастыруға арналған стандартты сұхбат терезесін шығаруға мүмкіндік береді.
-
SAMPLES беті
Gauge – қалып күй индикаторы. Win32 бетіндегі ProgressBar компонентіне ұқсас, бірақ формалардың әртүрлілігімен ерекшеленеді.
3.6-сурет. Samples беті.
ColorGrid – түстер кестесі. Бұл компонент 16 түсті палитрадан негізгі және фондық түсті таңдауға арналған.
SpinButton – қос батырма. Қандай да бір сандық шамаларды басқарудың ыңғайлы құралы.
SpinEdit – сандар редакторы. Қос батырманың көмегімен бүтін сандарды өзгерту мүмкіндігімен бірге бейнелеу және жөндеуді қамтамасыз етеді.
DirectoryOutline – каталогтар тізімі. Дискідегі иерархиялық құрылыммен орналасқан каталогтарды бейнелейді.
Calendar - календарь. Айдағы күнді таңдап, көрсетуге арналған.
Дәріс №7. Мәтіндік ақпараттарды енгізу және бейнелеу компоненттері. Кестелік деректерді бейнелеу компоненттері. Иерархиялық деректерді бейнелеу компоненттері. Компоненттер-мәзірлер.
TFrame-рамка және қалып компоненті. Ол компонент ең алғаш Delphi 5-те шыққан. Ол рамкасын айқындайды-контейнерге басқа компонентерді орналастырады.
TPopupMenu-көмекші (локальді) меню.
TpopupMenu-компонентер класын көмекші (локальді) меню құруға пайдаланады, тышқанның оң жақ батырмасын басқаннан кейін пайда болады.
Басты менюден көмекші менюге кез-келген компонентік терезеге құруға болады.
TLabel -текстік бейнелер үшін белгі. Tlabel- (метка) компонентер класы әр түрлі формадағы жазуды сығыстырады. Ол үшін центірлік компонент Caption қасиеттерін пайдалынады.
TFont-қасиеттерінің көмегімен жазуды әр түрліғып жазуға болады. (осы 2 қасиет TgraphicControl мұрасынан белгіленген. Сондықтан ол кестеден дұрыс бейнеленбейді.
TEdit- шығару және жолды бейнелеуді.
Tedit –компонент класы 1 жолды тексті көрсетеді, оның көмегімен бір текстік немесе бірнеше ұзын жолдар қосуға болады.
Центірлік компонент Text.OnChange өңдеуші оқиғасының көмегімен текстің шығуын программа байқалады және оны сүзгілеп алады және шықпаған символдарды илемейді.
TMemo- шығару және тексті бейнелеу.
TMemo- компонент класы шығаруға арналған редакциялау және жеткілікті текстің ұзындығын бейнелейді. Қасиеттерімен және әдістерімен мына кластардың (Count, Add, Delete, Clear және т.б) сақталған компонентер динамикалық өңдеуге болады.
BorderStyle, CanUndo, HideSelection, MaxLentgh, Modified, OEMConvert, OnChange, ReadOnly, Sellength, Selstart және SelText қасиеттері аналогты
Tedit қасиеті.
TButton- батырма . Tbutton-батырмасы программада кең көлемде басқара алады, алгаритм батырмасымен байланысты іске асыру OnClick-оқиға өңденеледі.
TCheckBox- тәуелсіз қосылғыштар. TcheckBox- тәуелсіз қосылғыштар, тұтынушылар өздірінің шыққан шешімдерін көрсете алатын үшін Да/Нет немесе Нет/Незнаю деген үшін пайдалынады.
TRadioButton- тәуелді қосылғыштар. TCheckBox-тен айырмашылығы TRadioButton- компонентері тәуелді қосылғыштарды көрсетеді, бір немесе бірнеше өзара іс-қимылдарын тағайындайды.
TListBox- таңдау тізімі.
TListBox- компонент класы Windows-қа таңдау тізімі үшін стандартты түрде пайдалынады.
TComboBox- тізімдерді таңдауда ашады. TComboBox- комбинерлі тізім TListBox- және редактор Tedit комбинациялық тізімді көрсетеді, сондықиан оның қасиеті және тәсілдері компонентерде өзара байланысты.
TGruopBox- топтасу мәтіні . Бұл компонентер контейнер қызмет етеді, рамка және текстік тіктөрбұрыш терезені көрсетеді, үздік рамка.
TActionlist- механикалық әрекет. Бұл компонент ең алғаш Delphi 4-те шыққан. Ол көрінбейтін бейне және ол механикалық әрекетке қызмет етеді. Ең алдымен оның редакторының көмегімен әрекет құрайды- Taction обьект класы ( редактор 2 рет батырманы басып компонентке немесе опций Action List Editor көмегімен көмекші меню тышқанның оң жағымен үстінен басып отырғанды шығарады.
Timer- таймер нақты уақыт аралықтарын есептеу. Оның қасиеті Interval , интервал уақытын анықтайды милисекундта.
Таймер қосындысы Enable қасиеттегі True-ден өту керек. Таймерді бірлет қосқанда уақыт сайын OnTimer оқиғасын қозғай береді, пока Enable қасиеті False-ні қабылдағанша.
TBitBtn- бейнелі батырма. TВitBtn- пиктографик батырма TВutton батырмасында әр түрлі стандартты атқа ие. Оның ерекше қасиеті-Cluph қасиет, батырманың үстінгі жағында салынады.
TSpeedButton- құрал саймандар тақташасындағы батырма TSpeedButton- батырмасы TBitBtn айырмашылығы 3 жағдайда қарастырылады:
1) бұзылып бара жатқан жағдайды өңдеуге болады..
2) олар берілген модальді терезені жаба алмайды.
3) олар үнсіз бола алмайды.
TMasKEdit- арнайы редактор. TmasKEdit –редактор тексті шығаруға арналған. Егер . TmasKEdit қасиеті берілген онда жай оқағанға True берілген, егерде шаблон жолдары берілсе.
TDrawGrid- тәлкелік кесте.
TDrawGrid- компоненті программистқа құруға мүмкіндік береді және кестелік структура мәлеметтерге қызмет етеді. Бұл өрістер текстік жолдарды сақтауға пайдалынады және суреттейді.
Procedure TfmDrowGrid.FormGreate(Sender:Tobject);
//тізімді құрады және толтырады SlBitMap
const
Fnames:array [0..3] of String={}
(“athena.bmp”,”construe.bmp”,”earth.bmp”,”technlgy.bmp”);
var
k:integer;
begin
//жолдың тізімін құру
SlBitMap:=Tstringlist.Greate;
//Файлдарды немесе суреттерді құрайды
witn SlBitMap do for k:=0 to 3 do
begin
Add(Fname[k]);
Objects[k]:=TbitMap.Greate;
(object[k] as TbitHap). Lood Fromfile(Fname[k]);
end;
end;
procedure TfmDrawGrid. FormDestroy(Sender:Tobject);
//жолдар тізімін жояды.
begin
SlBitMap.Free
end.
Дәріс №8. Графикалық және мулътимедиа -ақпараттарды бейнелеу.
Delphi –де графиканы пайдалану TGanvas класына негізделген (Ganvas –канва, сурет салу, кенебі). Түрлі суреттермен графиктер салу үшін TGanvas класына туындалған 3 класты пайдалануға болады: Windows шрифі үшін –Tfont, түрлі сызықтар сызу үшін Tpen және тұйық фигураларды бояу үшін- TBrush (font-шрифт, pen-қалам, brush-бояу жаққыш).
Tpen- перо обьектісін құрайды, сызық сызуға арналған.
Tpen- обьект шрифтты құрайды, кез-келген графиктік құрылғыға арналған (экран, принциптер, плоттера т.б)
Pixels қасиеттерінің көмегімен канвыдын бүкіл пикселі 2 түрдегі массив нүктесін көрсетеді.
Пиксельдің түрін өзгерту, қайтадан бейнені жеке-жеке нүктеде салуға болады.
Procedure Arc (x1, y1, x2, y2, x3, y3, x4, y4: Integer)
|
Доға элипст сызу (x1, y1)- (x2, y2) доғаның басы қиып өтуде жатыр,(x3, y3) нүктесінің центірінен өтеді, ақырында (x4, y4) центірінен бұрышқа дейін қилысады.см(а)
|
Procedure Chard (x1, y1, x2, y2, x3, y3, x4,y4: Integer)
|
Элипс сегментің сызу (x1, y1)- (x2, y2), бастапқы доға сегменті элипстің қилысуында жатыр(луча), центір нүктесінен (x3, y3) өтеді, ал сонында- қилысуы с лучом центірінің (x4, y4) нүктесінен өтеді. см(б)
|
Procedure Pie (x1, y1, x2, y2, x3, y3, x4,y4: Integer)
|
Секторлық элипсті сызу, (x1, y1)- (x2, y2), центірлік нүктесінен (x3, y3) жүргізілген, ал центірінің соңғы нүктесінен (x4, y4) жүргізілген. Доға сағат тіліне қарсы сызылады. Доғаның басы және соңы тура центірінде қилысады. см(в)
|
Procedure RowndRect (x1, y1, x2, y2, x3, y3, x4,y4: Integer)
|
Cызық сызады және тікбұрышты толықтырады (x1, y1)- (x2, y2) домалақ бұрыштармен. Тікбұрыш (x1, y1)- (x3, y3), доғаның бұрыштарының домалақтану- ының анықтайды. см(г)
|
Қасиет Тағайындама
Color Қаламұш арқылы салынған сызық түсі(15 түрлі)
Style Қаламұш арқылы салынған сызық стилі. Мүмкін мәндер:
psSolid (тұтас сызық), psPash(пунктирлік)
Width Пиксель өлшемі бойынша сызық қалындығы.
|
1-кесте. TPen қасиеттері.
Қасиет Тағайындама
Color Шрифт түсі
Name Шрифт атауы (мысалы, Times Kaz)
Style Шрифт стилі (жартылай қалың, курсив,т.б.) мысалы, программада шрифті жартылай қалың, курсив ету операторының жазылуы: Form 1. Canvas. Font. Style= [fsBold,fsItalic]
|
3-кесте. TBrush (негізгі қасиеті)
Қасиет Тағайындама
Color Бояу жаққыш түсі (объектінің боялу түсі)
|
4-кесте. TCanvas класының кейбір әдістері.
MoveTo(x,y:integer);
(х,у) нүктесіне қаламды орнату
LineTo(x,y:integer);
Қаламұштың ағымдық орнынан бастап, (х,у)нүктесіне дейін түзу кесіндісін сызу. Сызық түсі Pen.Color әдісімен анықталады.
Rectangle(x1,y1,x2,y2:integer);
(х1,у1)-(х2,у2)- тік төртбұрышын салу. Фигураның ішкі облысының түсі бояу жаққыш (Brush.Color) түсімен анықталады.
Ellipse(x1,y1,x2,y2): integer;
(x1,y1)-(x2,y2)- тік төртбұрышына сырттай сызылатын эллипс не шеңбер сызу. Элементтің ішкі облысының түсі бояу жаққыш түсімен анықталады.
TextOut (x,y: integer; ConstText: String);
(x,y) нүктесінен бастап мәтін жазу
Arc (x1,y1,x2,y2,x3,y3,x4,y4: integer);
(x1,y1)-(x2,y2)- тіктөртбұрышына сырттай сызылған элипс сегментін сызу
|
TGraphic және TPicture класы.
Delphi –да ең манызды орын алатын TGraphic және TPicture класы.
TGraphic-ол абстракты класс, инкапсуляцияланған жалпы қаиеттер және әдістер боп 3 мұра қалдырды : пиктограмма(Ticon), метофайлфы (TMetoFile) және расторового бейне (TBitmap).
TGraphic-тің жалпы ерекшелігі файлдарға сақталынады, берілген екі нақты фарматта.
Пиктограмма файлдарына көбінесе ICO кеңейтпесін пайдалынады.
Метафайл-бұл бейне, ол графиктік құрылғыда берілген арнайлы командалармен салынады, WMF немесе EMF мынадай кеңейтпедегі файлдарда сақталынады.
Дәріс №9. Жүйелік диалогтар. Қолданбаны басқаруды ұйымдастыру. Әрекеттерді диспетчерлеу.
Қолданбаларда келесі стандартты әрекеттерді жиі орындауға тура келеді: файлдарды ашу және сақтау, қаріп атрибуттарын беру, палитра түстерін таңдау, контекстік іздеу және ауыстыруды жүргізу және т.б.
Delphi дайындаушылары кітапханаға осындай сұхбат терезелерін жүзеге асыратын орындауға қарапайым компоненттерді қосқан. Олар Dialogs бетінде орналасқан. Келесі кестедеосы диалогтардың тізімі келтірілген:
1-кесте. Жүйелік диалогтар мен олардың үзінділері
Пикто-
грамма
|
Компонент
|
Бет
|
Сипаттама
|
|
OpenDialog
«Файлды ашу»
|
Dialogs
|
«Файлды ашу» сұхбат терезесін жасауға арналған.
|
|
SaveDialog
«Файлды сақтау»
|
Dialogs
|
«Файлды сақтау» сұхбат терезесін жасауға арналған.
|
|
OpenPictureDialog
«Суретті ашу»
|
Dialogs
|
Графикалық файлды ашатын «Сурет ашу» сұхбат терезесін жасауға арналған.
|
|
SavePictureDialog
«Суретті сақтау»
|
Dialogs
|
Бейнені графикалық файлда сақтауға арналған «Суретті сақтау» сұхбат терезесін жасауға арналған.
|
|
FontDialog
«Шрифттер»
|
Dialogs
|
«Шрифттер» сұхбат терезесін жасауға арналған – шрифт атрибуттарын таңдау.
|
|
ColorDialog
«Түс»
|
Dialogs
|
«Түс» сұхбат терезесін жасауға арналған – түсті таңдау.
|
|
PrintDialog
«Баспа»
|
Dialogs
|
«Баспа» сұхбат терезесін жасауға арналған.
|
|
PrinterSetupDialog
«Принтерді орнату»
|
Dialogs
|
«Принтерді орнату» сұхбат терезесін жасауға арналған.
|
|
FindDialog
«Табу»
|
Dialogs
|
«Табу» сұхбат терезесін жасауға арналған – мәтіндегі контестік іздеу.
|
|
ReplaceDialog
«Ауыстыру»
|
Dialogs
|
«Ауыстыру» сұхбат терезесін жасауға арналған – мәтін үзіндісін контестік ауыстыру.
|
|
FileListBox
(файлдар тізімі)
|
Win3.1
|
Каталогтағы барлық файлдар тізімін бейнелейді.
|
|
DirectoryListBox
(каталогтар құрылымы)
|
Win3.1
|
Дискінің каталогтар құрылымын бейнелейді.
|
|
DriveComboBox
(дисктер тізімі)
|
Win3.1
|
Қол жетімді дисктердің ашылатын тізімі.
|
|
FilterComboBox
(фильтрлер тізімі)
|
Win3.1
|
Файлдарды іздеуге арналған ашылатын фильтрлер тізімі.
|
|
DirectoryOutline
(каталогтар ағашы)
|
Samples
|
Таңдалынған дисктің каталогтар құрылымын бейнелеуге арналған компонент мысалы.
|
Осы кестедегі соңғы үш компонент аяқталмаған диалогтар емес, өзіңнің сұхбат терезеңді құруға мүмкіндік беретін олардың үзінділері болып табылады. Барлық диалогтар визуалды емес компоненттер болып табылады, сондықтан олардың формадағы орнының маңызы жоқ. Осы компоненттерге қатынау кезінде түрі Windows версиясы мен жүйенің баптауларына тәуелді болатын стандартты диалогтар шақырылады.
Кез-келген диалогқа қатынау жүргізілетін негізгі әдіс — Execute. Бұл функция диалогтық терезені ашады, және де егер пайдаланушы онда қандай-да бір таңдау жасаған болса, онда функция true мәнін қайтарады. Мұнда диалог компонентінің қасиеттерінде оқуға және ары қарай қолдануға болатын пайдаланушының таңдауы сақталады. Егер пайдаланушы диалогта Отмена батырмасын немесе Esc пернесін басқан болса, онда Execute функциясы false мәнін қайтарады. Сондықтан диалогқа стандартты қатынау келесі түрге ие:
if <диалог-компоненттің атауы>.Execute then
<пайдаланушы таңдауын қолданатын операторлар>;
Дәріс №10. Класстарды анықтау. Әдістерді қайта анықтауды жүзеге асырудың ерекшеліктері. Виртуальды әдістер. Абстрактілі әдістер. Әдістерді жүктеу.
Класс — пайдаланушы анықтаған мәліметтер типі. Delphi –де анықталған класстардың көптігі бұл анықтамаға қайшы келмейді, себебі Delphi дайындаушылаыр да Object Pascal-дың пайдаланушылары.
Класс осы класстың бір айнымалысы болсын жарияланбай тұрып жариялануы керек. Яғни, айнымалыларды жариялаудың ішінде жариялана алмайды.
Кез-келген Делфи-қолданбада төмендегі жолдарды көре аласыз:
type
TForml = class(TForm)
Buttonl: TButton;
procedure ButtonlClick(Sender: TObject);
end;
var
Forml: TForml;
Бұл сіздің формаңыздың TForml класының жариялануы және Forml айнымалысының –осы класс нысанының жариялануы.
Жалпы жағдайда классты жариялау синтаксисі төмендегідей:
Туре
<класс атауы> = Class(<ата-ана классының атауы>)
public // яғни барлығына қатынау
<өрістер, әдістер, қасиеттер, оқиғалар>
published // яғни нысандар инспеторында көрінеді және өзгертіледі
<өрістер, қасиеттер>
protected // ұрпақтарға ғана қатынау
<өрістер, әдістер, қасиеттер, оқиғалар>
private // осы модульде ғана қатынау
<өрістер, әдістер, қасиеттер, оқиғалар>
end;
Класс атауы кез-келген мүмкін идентификатор бола алады. Бірақ көптеген идентификаторларды "Т" символынан бастау қабылданған. Ата-ана класының атауы көрсетілмесе де болады. Онда осы класс тікелей TObject мұрагері деп қарастырылады – анықталған класстардың ішіндегі ең жалпыламасы. Осылайша, келесі жариялаулар эквивалентті:
type TMyClass = class
end;
және
type TMyClass = class(TObject)
end;
Жоғарыда келтірілген TForml формасының класының жариялануында оның ата-ана класы TForm екені көрініп тұр.
Класс өрістерді, әдістерді, қасиеттерді, оқиғаларды өздерінің ата-бабаларынан мұраға алады және класстың осы элементтерінің кейбіреулерін қайтарып, кейбіреулерін жаңасын енгізе алады. Класстың жарияланатын элементтеріне қатынау олардың қай бөлімде жарияланатынына байланысты.
Рublic (ашық) бөлімі сыртқы қолдануға дайын жариялаулар үшін. Бұл класстың ашық интерфейсі. Published (жарияланған) бөлімі ашық қасиеттерді қамтиды, олар нысан инстпекторы қасиеттері бетінде жобалау үрдісінде пайда болады және сәйкесінше пайдаланушы оларды жобалау үрдісінде орната алады. Private (жабық) бөлімі, осы класстың ішінде ғана қолданылатын өрістер, процедуралар және функциялардың жарияланымдарын қамтиды Protected (қорғалған) бөлім жарияланған класстың ұрпақтары ғана қатынай алатын жарияланымдарды қамтиды. Жабық элементтер жағдайы сияқты соңғы пайдаланушыдан қорғалған элементтердің детальдарын жасыруға болады. Дегенмен жабық элементтерге қарағанда қорғалған элементтер осы класстан туынды нысандар жасағысы келген бағдарламалаушылар үшін қол жетімді болып қалады, және де туынды нысандардың осы модульде жариялануының қажеті жоқ.
Өрістерді жариялау айнымалыларды немесе жазба өрістерін жариялау сияқты көрінеді:
<өріс атауы>: <типі>;
Жоғарыда келтірілген форма классын жариялауда төмендегі жолды көре аласыз:
Buttonl: TButton;
Бұл TButton типті Buttonl нысанын (өрісін) жариялау.
Өрісті жариялаудың кәдімгі айнымалыны жариялаудан айырмашылығы бар: өрістерді жариялау кезінде оған қандай-да бір мәнді инициализациялауға болады. Автоматты түрде стандартты инициализация орындалады: реттік типтерге бастапқы мән ретінде бастапқы мән ретніде 0 беріледі, нұсқауыштарға — nil, жолдар бос болады. Қажет жағдайда басқа бастапқы мәндерді беру кезінде конструктолрлар пайдаланылады.
Жай жағдайларда әдістерді жариялау кәдімгі процедуралар мен функциларды жариялаудан айрықшаланады.
Абстрактілі әдістер дегеніміз класста анықталған виртуалды және динамикалық әдістер, бірақ, ешқандай әрекеттерді қамтымайды, ешқашан шақырылмайды және міндетті түрде класс ұрпақтарында қайта анықталуы керек. Абстрактілі әдістер тек виртуалды және динамикалық әдістер бола алады. Object Pascal-да әдісті абстрактілі етіп жариялау үшін оның сипаттамасында virtual немесе dynamic директивасынан кейін abstract директивасы қолданылады:
TOb = class
Procedure X; virtual; abstract;
end;
Мұнда осы әдіс үшін ешқандай кодты жазудың қажеті жоқ. Абстрактілі әдісті шақыру орындау кезеңінің қателігіне әкеледі. Оның класстар мен ұрпақтардың жабатын әдістерін ғана шақыруға болады. Класстардың жеткілікті түрде күрделі иерархиясын қамтитын программаны дайындау кезінде, иерархияның ең жоғары деңгейінде тұратын класстар көбінесе өздігінен қолданылмайды. Олардың негізгі мәні - клсстар иерархиясының текбасшысы бола отырып, абстрагирлеу мүмкіндігін беру. Осы класс-ата-бабаларында ұрпақтарда жабылмайтын жалпылама әдістер жүзеге асырылған, ал жабылатын әдістер жүзеге асырылмайды және абстрактілі болып жарияланады.
Достарыңызбен бөлісу: |