Қоршаған ортаны модельдеуде сапалы мүмкіндіктерге ие, сезімдік тұрғыдан түсініктіұғымдар жиынтығы негізінде құрылады, алдын ала жазылып қойған программа кодын көп рет қолдануға мүкіндік береді



бет32/35
Дата25.08.2017
өлшемі8,61 Mb.
#27256
1   ...   27   28   29   30   31   32   33   34   35

7.2-сурет. Модуль құру терезесі
Ұсынылатын әдебиеттер: [1-9]
Бекіту сұрақтары:

  1. Object Pascal тіліндегі кластар дегеніміз не?

  2. Кластың басқа типтерден қандай айырмашылығы бар?

  3. Кластар негізінде қандай іргелі ұғымдар анықталады?

  4. Инкапсуляция дегеніміз не?

  5. Мүрагерлік принципі дегеніміз не?

  6. Object Pascal тілінің барлық кластары қандай ата-аналық кластан тарайды?

  7. Delphi ортасындағы кластар тармағын қалай сипаттауға болады?

  8. Полиморфизм дегеніміз не?

  9. Өріс дегеніміз не?

  10. Әдістер дегеніміз не және олар қалай бейнеленеді?

  11. Әдістерді динамикалық және статикалық ауыстыруды қалай түсіндіруге болады?

  12. Әдісті алмастыру қандай директивамен хабарланады?

  13. SHOW және HIDE әдістерінің қызметі қандай?

  14. Динамикалық және вертуалдық әдістердің арасында қандай айырмашылық бар?

  15. Конструктор және деструктор әдістерінің қызметі қандай?

  16. Бір атаулы әдістер дегеніміз не?

  17. Бір атаулы әдісті хабарлау үшін қандай қызметші сөз пайдаланылады?

  18. Қасиеттер дегеніміз не?

  19. Қасиеттер қандай қызметші сөздердің көмегімен хабарланады?

  20. Delphi ортасындағы кластардың хабарлауына сипаттама беріндер?

  21. Public, Private, Protected, Automated секцияларының қызметі қандай?

  22. Интерфейс дегеніміз не?

  23. Интерфейс қандай қызметші сөзбен хабарланады?

  24. Интерфейстің кластан айырмашылығы қандай?

  25. Интерфейсте хабарланған мүшелер қай секцияларда орналасады?

  26. Әдеттегі кластан интерфейстік кластың айырмашылығы қандай?

  27. Интерфейстік кластар қандай аталықтан туындайды?


Зертханалық жұмыс №13
Тақырыбы: Варианттар
Мақсаты Delphi ортасының жұмысына жалпы сипаттама
Қолданылатын материалдар мен құрал- жабдықтар:

Компьютер, Delphi программалау ортасы
Теориялық түсініктеме:

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

Вариант айнымалысына:


  • бүтін және нақты санды;

  • логикалық мәнді;

  • жолды;

  • уақыт немесе датаны;

  • OLE объектісін;

  • Элементі жоғарыда аталған типтердің бірінен құралатын, өлшемі мен ұзындығы еркін алынған массивті орналастыруға болады.

Варианттар сәйкес түрлендіру нақты болған жағдайда бүтін санды, нақты, логикалық немесе уақыт және дата өрнектеріне қатыса алады. Мысалы, егер кез келген V вариантына ‘1.0’ жолы меншіктелсе, 1+v өрнегінің дұрыс нақты мәні 2.0 болады. Ал, егер v:= ‘Текст’ болса, 1+v өрнегі EVariantError қатесін шақырады.

Варианттық типтің құрылымы төмендегідей сипатталады:

TVarData=packed record

VType:Word;

Reserved1, Reserved2, Reserved3:Word;

Case Integer of

VarSmallInt:(VSmallInt:SmallInt);

VarInteger:(VInteger:Integer);

VarSingle:(VSingle:Single);

VarDouble:(VDouble:Double);

VarCurrency:(VCurrency:Currency);

VarDate:(VDate:Double);

VarOLEStr:(VOLEStr:PWideChar);

VarDispatch:(VDispatch:Pointer);

VarError:(VError:WordBool);

VarString:(VSting:Pointer);

VarArray:(VArray:PVarArray);

VarByRef:(VPointer:Pointer);

End;

Варианттық типі кез келген айнымалы 8 байттық варианттық бөліктен тұратын 16 байттық жазу болып келеді, ол өзіне мәліметті немес адресті (яғни динамикалық орналасқан мәліметтерге сілтеме) сақтайды. Кез келген VType өрісіне компилятор вариант құру мезетінде мәліметтердің жоқ екендігі туралы VarEmpty белгісін орналастырады. Орындалатын программада бұл өрістің мәні варианттық бөлікте орналасқан ағымдағы мәліметтер типіне сәйкес өзгереді. Бұдан программа вариант жазуының өрісіне тікелей кіре алмайды. Варианттық мәліметтер типін VarType функциясының көмегімен алуға болады, ал типті вариантқа жаңа мән меншіктеу жолымен өзгертуге болады.



Варианттарды мәліметтердің басқа типіне түрлендіру

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

Варианттардағы типтердің түрлендірілуі

Қолда-нылуы

Варианттардағы мәліметтер типі

Var

Epty


Бүтін

Нақты

Дата уақыт

Жолдық

Логикалық

Бүтін

0

Сәйкес типке түрлен-діру

Бүтінге дөңге-лектеу

Бүтінге дөңге-лектеу

Бүтін типке түр-

лен-


діру

False

үшін 0,


әйтпесе – 1, Byte үшін 255

Нақты

0.0

Сәйкес типке түрлен-діру

Сәйкес типке түрлен-діру

Сәйкес типке түрлен-діру

Нақты типке түр-

лен-


діру

False

үшін 0,


True үшін – 1

Дата уақыт

30.12.

1899


00:00:00

Double – ге түрлен-діру

Double – ге түрлен-діру

Түрленді-рілмейді

Датаға түрле

неді


Double – ге түрлен-діру

Жолдық

Бос жол

Символ-дық түрге түрлен-діру

Символ-дық түрге түрлен-діру

Символ-дық түрге түрлен-діру

Түрлен-

діріл-


мейді

False

үшін 0,


True үшін – 1

Логикалық

False

0 – False

әйтпесе - True



0 – False

әйтпесе - True



0 – False

әйтпесе - True



‘False’

- 0 -


False

әйтпесе - True



Түрленді-рілмейді

Мұндағы


Бүтінге: VarByte, VarSmallInt, VarInteger, VarError;

Нақтыға: VarSingle, VarDouble, VarCurrency;

Жолдыққа: VarString, VarOleStr жатады.

Варианттармен жұмыс істеуге арналған қосалқы программалар

Варианттармен жұмыс істеу үшін төмендегідей қосалқы программаларды пайдалануға болады:



  1. Function VarAsType(ConstV:Variant; VarType:Integer):Variant;

  2. Procedure VarCast(VArDest:Variant; const Sourse:Variant; VarType:Integer);

  3. Procedure VarClear(var V:Variant);

  4. Procedure VarCopy(VarDest:Variant; const Source:Variant);

  5. Function

VarForm_DateTime(DateTime:TDateTime):Variant;

  1. Function VarIsEmpty(const V:Variant):Boolean;

  2. Function VarIsNull(const V:Variant): Boolean;

  3. Function VarToDateTime (const V:Variant):TDateTime;

  4. Function VarToStr(const V:Variant):string;

  5. FunctionVarType(const V:Variant):Integer;

1 – функция – кез келген варианттың мәліметін VarType параметрімен анықталатын типке түрлендіреді.

2 – прцедура – Sourse вариантының мәліметін VarType параметрімен анықталған типке түрлендіріп, нәтижені Dest айнымалысына орналастырады.

3 – процедура динамикалық жадыны босатады, егер ол вариантпен байланысты болса және оған VarEmpty типін береді.

4 – процедура Dest вариантына Sourse параметрін көшіреді.

5 – функция – типі дата – уақыт болып келген DataTime мәліметтерінен тұратын вариантты береді.

6 – функция – егер V – да мәліметтер болмаса, True мәнін береді.

7 – функция – егер V варианты анықталмаған мәліметтер типінен тұратын болса, True мәнін береді.

8 – функция – V варианттының мәліметтерін дата – уақыт типіне түрлендіреді.

9 – функция – V варианттының мәліметтерін жолға түрлендіреді.

10 – функция – Вариантта сақталған мәліметтер типін береді.



Вариантты массивтер

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

Var

V:Variant;



Begin

//5 элементтен тұратын бір өлшемді вариатты массив құрайық

Var:=VarArrayCreate([0,4],varVariant);

//Толтырамыз:

V[0]:=1;

V[1]:=1234.5678;

V[2]:= ‘салем’;

V[3]:=True;

//Массивтің 5 – элементі тағы бір массив болсын.

V[4]:=VArArrayof([1..10,100..1000]);

Caption:=V[2];

LBOutput.Caption:=InttoStr(V[4][2]);

End;

Вариантты массивтермен жасалатын барлық әрекеттер төмендегі процедуралар мен функциялардың көмегімен жүзеге асырылады:



  1. Function VarArrayCreate(const Bounds:array of integer; Vartype:Integer):variant; - Bounds параметрі арқылы мөлшері мен шекарасының өлшемі көрсетілген типті элементтерден вариантты массив құрады;

  2. Function VarArrayDimCount(const A:Variant):Integer; - Варианты А массиві өлшемінің мөлшерін (санын) береді, егер А массив болмаса, 0 – ге тең.

  3. Function VarArrayHighBound (const A:Variant: Dim:Integer):Integer; - Dim өлшемі бойынша вариантты А массиві жоғарғы шекарасының индексін береді;

  4. Function VarArrayLock(var a:Variant):Pointer; - массивті бұғаттап, мәліметтерге байланысты көрсеткішті береді;

  5. Function VarArrayLowBound (const A:Variant; Dim:Integer):Integer; - Dim өлшемі бойынша А вариатты массиві төменгі шекарасының индексін береді;

  6. Function VarArray (const Values:array of Variant):Variant; - Values ашық массивіндегі мәндерден тұратын бір өлшемді вариантты массив құрады. Бұл жағдайда вариантты масивінің төменгі шекарасының индексі 0 – ге тең;

  7. Procefure varArrayRedim(Var A:variant; HighBound:Integer); - А вариантты массивтің жоғарғы индексінің шекарасын шамасына өзгердеді. Егер массив VarArrayLock функциясымен бұғатталған болса, онда процедураның шақырылуы жойылады;

  8. Function VarArrayRef(const A:Variant):Variant; - Вариантты массивке сілтемені береді. АРІ функцияларды шақыруда пайдаланылады;

  9. Procedure VarArrayUnlock(var A:Variant) – VarArrayLock функциясының әрекетін жоққа шығарады.

Пайдаланушының варианттары

Delphi – дің 6 – нұсқасынан бастап, варианттың мәндеріндегі сипатындағы шектеулерді толық алып тастайтын пайдаланушының варианттары жұмыс істейді. Бұл варианттың қасиеттерімен толық танысу үшін төмендегідей вариантты қарастырайық: комплекстік сандарды сақтап, оларды басқа типке түрлендіріп және олармен қажетті әрекетті жүзеге асыратын вариантты пайдаланайық. Пайдаланушының вариантын құру – ондағы сақталатын мәліметтердің күрделілігіне тәуелді болады. Delphi – ді жасаушылардың құрған VarCmplx модуліне қосылған вариантты пайдаланайық. Төмендегідей оқиға өндеушісін құрайық.

Uses VarCmplx;//Бұл сілтеме міндетті түрде қажет!

Procedure TfmExample.bbRunClick(Sender:TObject);

Var

V1,V2:Variant;



Begin //кездейсоқ екі комплекс сан құрамыз:

V1:=VarComlexCreate(Trunc(Random*1000)/100,Trunc(Random*1000)/ 100);

Width mmOutput.Lines do

Begin


Add(‘ ’); //Бос бөлінетін жол

Add(‘1-ші сан’#9+V1);

Add(‘2-сан’#9+V2);

Add(‘қосу’#9+(V1+V2));

Add(‘Азайту’#9+(V1-V2));

Add(‘Көбейту’#9+(V1*V2));

Add(‘Бөлу’#9+(V1/V2));

End;


End;

Енді түсініктеме берейік:

Trunc(Random*1000)/100 конструкциясы комплекс санмен 3 мәнді цифр алынуы үшін қажет.

Келтірілген мысалдан байқап отырғанымыздай жаңа вариант комплекстік сандармен жақсы сүйемелденеді: VarComlexCreate функциясы комплекстік саннан құралатын вариант құрады, ары қарай вариант математикалық операцияларды орындап, оны жолдық типке түрлендіреді. Сондай – ақ, VarCmplx модулінің мәтіні вариантқа қосымша қасиет береді (ескертусіз Source\RT1\Common\ VarCmplx.pas – та орнаалсады), көлемі 30000 байттан астам.

Пайдаланушының вариантын құру үш кезеңде жүреді.


  1. Алдымен TVarData жазуына жаңа мәліметтер орналасады немесе оған сілтеме жасалады.

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

  3. Жаңа кластың ұрапқтарын хабарлауға және олардың типін анықтауға қажетті қосымша әдістер құрылады.

  4. Көрсетілген қадамдарды орындағаннан кейін жаңа қасиеттермен байытылған толық вариант алынады: ол тек жоғарыда кестеде келтірілген мәндерді ғана сақтап қоймай, басқа да кез келген мәндерді, оның ішінде қасиеттер мен әдістерді де сақтай алады.


Тапсырма:
Тапсырманы орындауға әдістемелік нұсқаулар:
Ұсынылатын әдебиеттер: [1-9]
Бекіту сұрақтары:

  1. Вариант дегеніміз не?

  2. Вариант айнымалысы ретінде қандай типтерді алуға болады?

  3. Варианттық типтің құрылымы қалай сипатталады? Мысал келтіріңіз.

  4. Мәліметтер вариантында орналасқан типтерді қалай түрлендіруге болады?

  5. Варианттармен жұмыс істеуге арналған қандай қосалқы программалар бар?

  6. Варианттық мәліметтер типін қандай функцияның көмегімен алуға болады?

  7. Вариантты массивтер дегеніміз не? Олардың негізгі айырмашылығы неде?

  8. Пайдаланушының варианттарының қандай ерекшелігі бар?

  9. Пайдаланушының вариантың құру қанша кезеңнен тұрады? Әрбір кезеңге сипаттама беріңіз.

Зертханалық жұмыс №14

Тақырыбы: Файлдар
Мақсаты Delphi ортасының жұмысына жалпы сипаттама
Қолданылатын материалдар мен құрал- жабдықтар:

Компьютер, Delphi программалау ортасы
Теориялық түсініктеме:

Файл ұғымы туралы жалпы түсінік

Файл деп дербес компьютердің сыртқы жадысының атау берілген бөлігін түсінеміз. Кез келген файлдың өзіне тән үш ерекшелігі болады. Біріншіден, файлдың атауы бар, программаға осы атауы бойынша бір мезгілде бірнеше файлмен жұмыс істеуге мүмкіндік береді. Екіншіден, ол бір типті компоненттерден тұрады. Файлдан басқа Object Pascal–дың кез келген типі компоненттер типі бола алады. Үшіншіден, файлдың ұзындығы жөнінде оны хабарлауда ешнәрсе айтылмайды, ол тек сыртқы жады құрылғысының көлемімен шектеледі. Файлдық типті төмендегі үш тәсілдің бірімен беруге болады:



<аты>=File of <тип>;

<аты>=TextFile;

<аты>=File;

Мұндағы <аты> - файлдық типтің аты; File of - қызметші сөздер (файл, содан); TextFile - стандартты мәтіндік файл типінің атауы; <тип> - файлдан басқа Object Pascal –дың кез келген типі.

Мысалы,

Type


Product=Record

Name: String;

Code: word;

Cost: Comp

End;

Text80=File of String[80];



Val F1: File of char;

F2:TextFile;

F3:Text80;

F4:F4 of Product;



Файлдармен жұмыс

Хабарлау тәсіліне қарай, файлды үш түрге бөлуге болады: мәтіндік, типтік және типтік емес.

Ақпарат ASCII кодымен берілген файл мәтіндік файл болып табылады. Мәліметтердің кез келген қарапайым типі осылай беріледі. Жеке мәндер файлда жол болып беріледі. Мұндай жазулар ақпарат бөліктері болып бірігуі мүмкін. Мәтіндік физикалық файлдың атауы үшін оның заты .txt, .doc болып беріледі. Программалау тілдеріндегі программа мәтіндегіфайлдар үшін заты тілдің белгісін білдіреді, мысалы, .pas, .bas. Физикалық мәтіндік файл тізбекті кіру мүмкіндігі бар файл болып табылады.

Типтік файл – бұл компоненттері – мәндері екілік кодпен берілген, файлдық типтен басқа, жай және құрылымдық типті файл. Файл компоненті деп файл жөніндегі дербес мәліметті айтады. Мысалы, integer немесе real типті файл. Типтік файл тікелей кіру мүмкіндігі бар файл болып табылады, бірақ өзінің компоненттеріне тізбекті түрде кіру мүмкіндігін де береді.

Типтік емес файл – бұл компоненттері 0 мен 1 екілік цифрлардан құралған сегіз битті тізбек болып табылады. Мысалы, жадының кез келген ұяшығындағы кез келген типті ақпарат түрінде көз алдымызға елестетуге болады. Файлдарға төмендегідей ұғымдар тән: файл атауы, файл типі, файл компоненті, файлды жазу, файлды жазудың соңы және файл соңы. Бұл ұғымдардың бәрі логикалық та, физикалық та бола алады. Мысалы, файлдың логикалық атауы және файлдың физикалық атауы. Файлды жазудың соңы – тасымалдаушыға физикалық жазудан кейін қойылатын белгі. Ол EOL (End Of Line) деп аталады. Ол физикалық файлмен жұмыс барысында жазудың соңы кездессе мәнін қабылдайды.

Файлдың соңы – тасымалдаушыға физикалық файл компонентінің соңын жазғаннан кейін қойылатын белгі. Ол EOL (End Of Line). Сондай-ақ, физикалық файлмен жұмыс барысында файлдың соңы кездессе, true мәнін қабылдайтын Паскальдың бұл айнымалы функциясы да осылай аталады.

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

Файлға тікелей кіру жағдайында файлдың кез келген компоненттерімен жұмыс істеу үшін тікелей кіруге болады. Тікелей кіру мүмкіндігі бар файлдың барлық компоненттері нөмірленген. Нөмір нольден басталады, яғни 1-компоненттің нөмірі - 0, екінші компоненттің нөмірі 1 және т.с.с. Бұдан, файлдың соңына n+1–ші орынға n–нөмірлі компонент орналасады. Тікелей кіру мүмкіндігі бар файлды тасымалдаушының кез келген бөлігіне тікелей кіруге мүмкіндік беретін ақпарат тасымалдаушыларда ғана орналастыруға болады, мысалы, магнитті дискілерде.

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

Object Pascal тілінде файлдармен төмендегідей жұмыс түрін ұйымдастыруға болады:



  • файл құру;

  • мәліметтерді файлға жазу;

  • мәліметтерді файлдан оқу;

  • файлды түрлендіру.

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

Логикалық файлдың сипатталуы

Файл үшін логикалық және физикалық файл ұғымы енгізіледі. Логикалық файл – бұл ақпараттың қандай да бір абстракт көлемі. Физикалық файл – бұл физикалық тасымалдаушыда жазылған логикалық файл: диск, дискет, дисплей экраны, магнитті лента және т.б. Мысалы, сыныптағы оқушылардың аты-жөнінің тізімі логикалық файл болып есептеледі. Сондай-ақ, қағазға немесе дискіге жазылған Object Pascal программасының мәтіні де физикалық файл болып табылады. Логикалық файл мен физикалық файлды байланыстыру стандартты AssignFile процедурасы арқылы жүзеге асырылады:

AssignFile(<логикалық файл аты>,<физикалық файл аты>);

Мұндағы <логикалық файл аты> – программада файлдық айнымалы ретінде хабарланған файлдық айнымалы, <физикалық файл аты> – файл атынан тұратын мәтіндік өрнек, егер қажет болса файлға кіру маршруты толық көрсетіледі.

Паскаль тілінде логикалық файл ретінде мәліметтердің арнайы типі – файл құрылымы енгізілген.

Файлды ашу

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

Файлмен жұмыс істеу үшін – ашу, ал жұмыс аяқталғаннан кейін – жабу қажет. Оқуға арналған файл RESET(FF) операторымен, жазуға арналған файл REWRITE(FF) операторымен ашылады. APPEND(FF) – мәтіндік физикалық файлға мәліметтер қосып жазуға арналған.

Мәліметтерді оқу және жазу белгілі READ/WRITE операторларының көмегімен жүзеге асырылады, тек тізімінің басында файлдық айнымалының аты көрсетіледі:

READ(FF,тізім)

WRITE(FF,тізім)

Файлдың жабылуы CLOSE(FF) операторымен орындалады.

Файлды шартты түрде басы бар, соңы тіркелмеген лента түрінде елестетуге болады. Файлдың компоненттері осы лентаға бірінен соң бірі тізбектеліп жазылады.



REWRITE командасы жазуға арналған файлды ашып, файлды жазу режимінің бастапқы күйіне келтіреді, маркер нольдік позицияға орналасады. Егер FF файлы бұрын болса, онда ол жойылады.

RESET командасы бойынша диск каталогындағы физикалық файлдың бар екендігіне көз жеткізеді, егер физикалық файл табылмаса, онда файл табылған жоқ деген хабарлама беріледі. Егер файл табылса, маркер көрсеткіші нольдік күйге келтіріледі, файл мазмұны жойылмайды.

APPEND командасы бойынша файл көрсеткіші оның соңына орналастырылып, бұрыннан бар файлға қосымша мәліметтер тіркеліп жазылады.

Файлдармен жұмыс істеуге арналған процедуралар мен функциялар

Файлдың кез келген түріне пайдалануға болатын процедуралар мен функциялардың тізімін келтірейік.



  1. Procedure AssignFile(var F; FileName,:String); - Fфайлдық айнымалысын FileName атты файлмен байланыстырады;

  2. Function ChangeFileExt(const FileName, Extensions:String):String; - файлдың затын Extension параметрімен берілген файл затына өзгертеді;

  3. Procedure ChDir(Path:String); - Ағымдағы каталогты өзгертеді: Path -ескертусіз орнатылған каталогқа баратын жолды көрсететін жолдық өрнек;

  4. Procedure CloseFile(Var F); - Файлды жабады, бірақ F файлдың айнымалысымен AssignFile процедурасымен алдын-ала орнатылған байланыс сақталады. CloseFile процедурасының функциясы программа жұмысы дұрыс аяқталған жағдайда барлық ашылған файлдар автоматты түрде жабылады.

  5. Function DateTimeToFileDate(DataTime:TDataTime):Integer; - DataTime мәнін файл құру уақытының жүйелік форматына аударады;

  6. Function DiskFree(D:Byte):LongInt; – көрсетілген дискідегі бос орынның байттық көлемін береді; D - диск нөмірі (0 ескертусіз құрылғы; 1 - диск А; 2 – диск В және т.б.). Функция, егер жоқ дискінің нөмірі көрсетілсе 1 деген мәнді береді.

  7. Function EOF(Var F):Boolean; – Файлдың соңын көрсетеді, егер файлдық көрсеткіш файлдың соңында тұрса, онда True мәнін береді. Жазуда бұл кезекті компонент файлдың соңына қосылғанын, ал оқуда файлдың жойылғанын көрсетеді.

  8. Procedure Erase (Var F): - F файлын өшіреді. Процедураны орындар алдында файлды жбау қажет.

  9. Function FileAge(const FileName: String):integer; - FileName файлы үшін оның соңы жаңартылған (қайта жазылған) уақытын береді (жүйелік форматта); егер мұндай файл болмаса, онда – 1-ге тең.

  10. Function ExcludeTrailingBaslash(const S: String): String; - Sжолын тұйықтайтын “/” символын өшіреді (егер бұл символ жолды тұйықтамаса, онда S–ті өзгеріссіз қалдырады);

  11. Function ExpandFileName(const FileName: String):String; - файл атын ағымдағы каталогпен толықтырады;

  12. Function ExpandUncFileName(const FileName: String):String; – файл атын ағымдағы желілік каталогпен толықтырады;

  13. Function ExtractFileDir(const FileName: Srting):String; – файлдың толық атауынан оған кіру маршрутын шығарады (соңғы “/”символынсыз);

  14. Function ExtractFileExt(const FileName: String): String; – файлдың толық атауынан оның затын нүктесімен шығарады;

  15. Function ExtractFileName(const FileName: String): String: String; –файлдың толық атауынан оның атын затымен шығарады;

  16. Function ExtractFilePath(const FileName: String): String; – файлдың толық атауынан оған кіру маршрутын символымен қоса шығарады;

  17. Function ExtractRelativePath(const BaseName, DestName: String): String; – файлдың толық атауынан DestName–ге қатысты маршрут атын шығарады (аралық каталогтар: “/” символымен алмастырылады).

  18. Function FileDateTimeToDateTime (DataTime: Integer):TDateTime; –жүйелік форматы FileDate файлының құрылу уақытын дата-уақыт форматына түрлендіреді.

  19. Function FileExists(const FileName: String):Boolean; – егер FileName атты файл бар болса, онда True мәнін береді;

  20. Procedure FindNext(Var F:TSearchRec); – FindFirst/FindNext функциясымен файлды іздеуге бөлінген жадыны босатады;

  21. Function FindNext(Var F: TSearchRac): Integer; - F файлының каталогтағы келесі файлдың атын береді;

  22. Procedure Flash(var F); – дискідегі файлдың соңғы өзгертулерін сақтай отырып, файлдың ішкі буферін тазартады;

  23. Procedure GETDir(D:Byte; var S:String); – Ағымдағы каталогты береді: D - құрылғы нөмірі; 1 – А дискісі; 2 – В дискісі және т.б. S – String –типті айнымалы, ол көрсетілген дискідегі ағымдағы каталогқа баратын жолды көрсетеді;

  24. Function IncludeTrailingBackslash(const S:String); – “/” символымен файлға кіретін толық маршрутты береді;

  25. Function IOResult: Integer; – соңғы енгізу – шығару операциясының шартты белгісін береді;

  26. Function ISPathDelimiter(const S:String; Index:Integer):Boolean; – егер S жолындағы Index символында “/” белгісі болса, онда true мәнін береді;

  27. Function MatchesMask(const FileName, Mask: String):Boolean; – Егер FileName аты Mask топтық атауына сәйкес келсе, true мәнін береді;

  28. Procedure MKDir(Dir: String);– көрсетілген дискіде жаңа каталог құрады: Dir каталогты іздеу маршруты. Бұрын құрылған каталогтар атауы қайталанбауы тиіс;

  29. Procedure Rename(var F; NewName:String);–F файлының атын өзгертеді; NewName - файлдың жаңа атынан тұратын жолдық өрнек. Процедураны орындамас бұрын файлды жабу қажет;

  30. Procedure Reset(Var F:File; [RecSize:World]); – бұрын құрылған файлды ашады. RecSize–дың тек типтік емес файлдар үшін ғана мағынасы бар және мәліметтер блогының өлшемін береді;

  31. ProcedureRewrite(Var F:File; [RecSize:World]); – жаңа файл құрады. RecSize-дың тек типтік емес файлдар үшін ғана мағынасы бар және мәліметтер блогының өлшемін береді.

  32. Procedure RmDir(Dir:String); – Dir каталогын өшіреді. Өшірілетін каталог бос болуы тиіс.

Файлдардың жадыдағы бейнеленуі

Файлдарды бейнелеу үш тәсілмен жүзеге асырылады.



Файлдарды құру және ашу

Алдымен файл



Function FileCreate(FileName:String):Integer;

функциясының көмегімен құрылып,



Function FileOpen(const Filename:String; Mode:LongWord): integer; функциясының көмегімен ашылады.

Екі функцияда да FileName– файл аты, файлға кіру маршруты көрсетілуі мүмкін. Mode параметрі файлға кіру режимін анықтайды және төмендегі мәндердің біреуін ғана қабылдайды: fmOpenRead - тек оқу үшін, fmOpenWrite - тек жазу үшін, fmOpenReadWrite - жазу және оқу. Or операциясының көмегімен бұл тұрақтыларды бірнеше программалар файлына бірлесе кіру мүмкіндігін реттейтін төмендегі операторлармен топтастыруға болады:

fmShareExclusive - бірлесе кіру мүмкіндігі рұқсат етілмейді; fmShareDenyWrite - басқа программаларға жазуға рұқсат етілмейді; fmShareDenyRead - басқа программаларға оқуға рұқсат етілмейді; fmShareDenyNone - бірлесе кіру шектелмеген. Егер операция ойдағыдай орындалмаса екі функцияда құрылған (ашылған) файлдың дескрипторын береді немесе 0-ге тең.

Бейнелеу объектісін құру

Екінші кезеңде жадыда бейнелеу объектісі құрылады. Ол үшін төмендегідей функция пайдаланылады:

Function CreateFileMapping(hFile:Thandle;

lpFileMappingAttributes: PsecurityAttributes; flProtect,

dwMaximumSizeHeigh, dwMaximumSizeLow: Dword;

lpName:PChar):Thandle;

Мұндағы hFile – файл дескрипторы; lpFileMappingAttributes - құрылатын объектінің ұрпақ объект құра алатындығы жөніндегі құрылымды анықтайтын көрсеткіш; flProtect - файлды бейнелеу терезесінде қолданылатын қорғау типін анықтайды; dwMaximumSizeHeigh, dwMaximumSizeLow - сәйкес үлкен және кіші 32 разрядты файл өлшемі, егер ұзындығы 4 ГБайтқа дейінгі файлды бейнелеу қажет болса, онда – ноль мәні меншіктеледі, ал dwMaximumSizeLow – файл ұзындығы, егер екі параметрде нольге тең болса, онда бейнелеу терезесінің өлшемі файл өлшеміне тең; lpName - бейнеленетін объектінің атауы.

FlProtect параметрі – файлды көру терезесіне қолданылатын қорғау типін береді және ол төмендегі мәндердің бірін қабылдауы мүмкін:



PAGE-READONLY-файл тек оқу үшін (файл fmOpenRead режимінде ашылған немесе құрылған болуы мүмкін); PAGE-READWRITE - файлды оқуға және оған жаңа мәндер жазуға болады (файл fmOpenReadWrite режимінде ашылады); PAGE-WRITECOPY - файл жазу немесе оқу үшін ашылады, бірақ жаңартылған мәліметтер жадының жеке қорғалған бөлігінде сақталады (бейнеленген файлдар программалармен бөлінуі мүмкін), бұл режимде әрбір программа жадының жеке бөлігінде өзгерісті сақтайды; файл fmOpenReadWrite немесе fmOpenWrite режимінде ашылады; қорғаудың бұл типін Windows 95/98–де пайдалануға болмайды. Or операциясының екі гімен ашылады.

у және ашун жүзеге асырылады.

а мағынасы бар және мәліметтер блогының өлшемін береді.

көмегімен flProtect параметріне төмендегідей атрибуттарды жалғауға болады:

Sec_Commit - бейнелеуге арналған физикалық жадыны бөліп көрсетеді; SEC_IMAGE - файл образын атрибуттарды бейнелеу жөнінде ақпарат алынады; SEC_NoCaSHE - бейнеленетін мәліметтерге оперативті жадыдан орын бөлінбей, тікелей дискіге жазылады; SEC_RESERVE - физикалық жадыдан орын бөлінбей, бірден бөлім беттері резервтеледі.



Көру терезесін құру

Үшінші кезеңде көру терезесі құрылады, яғни мәліметтерді программаның адрестік кеңістігінде бейнелеу:



function MapViewOfFile(hFileMappingObject: Thande; dwDesiresAccess: DWord; dwFileOffSetHigh, dwFileiffSetLow, dwNumberBytes – ToMap:DWord):Pointer.

Мұнда hFileMappingObject -объектіні бейнелеу дескрипторы, dwDesiresAccess - мәліметтерге кіру тәсілін анықтайды және төмендегі мәндердің біреуін қабылдауы мүмкін: File_Map_Write - оқуға және жазуға мүмкіндік береді, бұдан CreateFillMapping функциясында PageReadONLY немесе Page_ReadWrite атрибуты пайдаланылуы мүмкін; File_Map_All_Access атрибутының жұмысы File_Map_Write жұмысымен бірдей; File_Map_Copy - мәліметтерді оқуға және жазуға болады, бірақ жаңартылған мәліметтер жадының жеке қорғалған бөлігінде сақталады; CreateFileMapping функциясында Page_Write атрибуты пайдаланылуы тиіс; dwFileOffSetHeigh, dwFileiffSetLow - файл басынан ығысатын сәйкес үлкен және кіші разрядтарды анықтайды және сол жерден бейнелеу орындалады; dwNumberBytesToMap - бейнелеу терезесінің ұзындығын анықтайды (0 – ұзындық файл ұзындығына тең).



Бейнелеу ресурстарын босату

Бейнеленген мәліметтерді пайдаланғаннан кейін терезені бейнелеу ресурстарын

Function UnMapViewOfFile(lpBaseAdress:Pointer):Bool;

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

Бейнелеу объектісін және файлдың өзін жабу

Function CloseHandle(hObject:THandle)

функциясының көмегімен орындалады.

Файлдармен жұмыс істейтін объектілі модель

Delphi ортасында TStream абстрактылы класы пайдаланылады (мәліметтер ағыны), ол объектілермен жұмыс істегендегідей файлдар жұмысы үшін негіз болады. Объектілер жағдайында ақпарат тасымалдаушы дискілік файл, таспалық тасымалдаушы немесе оперативті жады болып табылады. TStream арнайы ұрпағында файлдық объектіге толық кіру мүмкіндігін ашатын Read, Write және Seek стандартты әдістері анықталған. Объект конструкторымен құрылып, деструкторымен өшіріледі.

Келесі мысалда Edit1.Text атауымен сақталған файл Edit2.Text файлына көшіріледі.

Procedure TForm1.CopyFileClick(Sender: TObject);

Var

Stream1,Stream2:TStream;



Begin

Stream1:=TFileStream.Create(Edit1.text, fmOpenRead or fmShareDenyWrite);

Try

Stream2:= TFileStream.Create(Edit2.text, fmOpenCreate or fmShareDenyRead);



Try

Stream2.CopyForm(Stream1, Stream1:Size);

Finally

Stream2.Free;



Finally

Stream1.Free;

End;
TStream абстрактылы Read класы Write және кілттік әдістерді хабарлайды, ол төмендегі операцияларды орындау үшін оның мұрагерлерінде жабылады:


  • TFileStream - файлдармен мәліметтер алмасу;

  • TSringStream - ұзын жолмен (жадыда) мәліметтер алмасу;

  • TMemoryStream - жадыдағы мәліметтермен алмасу;

  • TBLOBStream – BLOB типті мәліметтер өрісін оқу/жазу (Binary Large Object – үлкен екілік объект);

  • TWinSocketStream – OLE сокетті жалғанатын мәліметтермен алмасу;

  • TOLEStream – OLE форматыфндағы мәліметтермен алмасу.

Кез-келген мұрагер CopyForm әдісінің көмегімен басқа ағынның мазмұнын оқи

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

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


  • Seek - ағынның ағымдағы орнынан бастап, қажетті байт мөлшерін жібереді;

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

  • ReadComponent - ағыннан компонент қасиетін оқиды;

  • WriteBuffer - берілген ұзындықтағы буфердегі мәлімет мазмұнын ағынға жазады;

  • WriteComponent - ағынға компонент қасиетін жазады.

Келесі BbRunClick оқиға өңдеушісі mmOutput редакторына bbRun батырмасының қасиетін шығарады;

Программаға түсініктеме. Алдымен компоненттің қасиеті MemSourceStream ағынына жазылады. Осылайша алынған екілік мәліметтер оқылатын түрге келу үшін ObjectBinarryToText процедурасы пайдаланылады, ол MemSourceStream ағынынан мәліметтерді түрлендіріп MemSourceStream ағынына орналастырады. Осы екінші ағындағы мәліметтерді mmOutput терезесіне шығарады.
ТАПСЫРМА:

Тапсырма №1. 100000 кездейсоқ нақты саннан тұратын дискілік файлды құратын программа мысалын қарастырайық (файлдың ұзындығын «массив ұзындығы» редакторының мәнін өзгерту арқылы таңдауға болады). “Test.dat” атты файл файлды жадыда бейнелеу жолымен құрылады – жады батырмасы және дәстүрлі тәсілмен файл батырмасы. Екі жағдайда да уақыты көрсетіледі (процессор – 400 МГц, жады – 64 МБайт). Жиілік пен жады қаншалықты көп болса, уақыттың арасындағы айырмашылықта соғұрлым үлкен болады.

Тапсырма №2.

Memo өрісіне мәтіндік файлдың мазмұнын шығаратын программа құру.



Тапсырма №3.

Күндік температура туралы ақпараттан тұратын, мәтіндік файл түрінде құрылған “Ауа райы” мәліметтер қорына мәлімет қосатын программа жазыңдар. Датаны енгізу үшін MonthCalendar компонентін пайдаланыңдар.



Тапсырма №4.

N aдамнан тұратын оқушылардың оқу үлгерімі жөніндегі тізімдегі мәліметті файлға жазатын және одан оқитын программа құрайық. Файлдың әрбір жазуы оқушының аты-жөнінен және үш пәннен: математика, физика, химия пәндерінен алған бағаларынан тұратын болсын. Сонымен қатар, жазулар алфавиттік ретпен сұрыпталып, мәтіндік файл түрінде сақталсын.



ТАПСЫРМАНЫ ОРЫНДАУҒА ӘДІСТЕМЕЛІК НҰСҚАУЛАР:

Тапсырма №1.

Unit Unit1;

Interfase

Uses


Windows, Messages, SysUnits, Classes, Graphics, Countrols, Forms, Dialogs, StdCtrls, ComCtrls, Spin;

Type


TForm1=class(TForm)

btMem:Tbutton;

btFile:Tbutton;

se:TSpinEdit;

Label:TLabel;

Pb:TProgressBar;

Label2:TLabel;

btMem:Tlabel;

btFile:Tlabel;

Procedure btMemClick (Sender:TObject);

Procedure btFileClick (Sender TObject);

Private {Private declarations}

Public {Public declarations }

End


Var

Form1:TForm1;

Implementation {SR*.DFM}

Procedure TForm1.btMemClick (Sender:TObject);

//Бейнелеу жолымен файл құру

Type


Real=^Real;

Var HfileHMap:Thandle;

AdrBase, AdrReal:PReal;

K:integer;

Fsize:Cordinal;

BegTime:TdateTime;

Begin

BegTime:=Time; //Жіберілу уақытын тіркейміз.



//ProgressBar-ны дайындаймыз.

Pb.Max:=se.Value;

Pb.Position:=0;

Pb.Show;


Fsize:=se.Value*SizeOf(Real);//Файл ұзындығы!

HFile:=FileCreate(‘test.dat’);//Файл құрамыз!

If Hfile=0 then //қате!

Raise Exception.Create(Файл құруда қате бар!)

Try//Файлды жадыда бейнелейміз.

HMap:=CreateFileMapping(HFile, Nill, Page_ReadWrite, 0, Fsize, Nill);

If Hmap=0 then //қате!

Raise Exception.Create(‘Файлы бейнелеуде қате бар’);

Try//көру терезесін құрамыз:

AdrBase:=MapViewOfFile(Hmap, File_Map_Write, 0, 0, FSize);

IfadrBase=Nil then //қате!

Raise Exception.Create(‘Файлы көру мүмкін емес’);

//Құру терезесін дұрыс шығару үшін бастапқы адресті сақтаймыз:

AdrReal:=AdrBase;

For k:=1 to se.Value do

Begin


AdrReal^:=Random; //Файлға жаңа санды орналастырамыз!

//Ағымдағы адресті шығарудан бұрын оны Integer немесе Cardinal типіне келтіру қажет!

AdrReal”=Pointer(Integer(AddReal)+SizeOf(Real));

LbMem.Caption:=IntToStr(k);

Pb.Position:=k;

Application.ProcessMessage;

End; //Көру терезесін бостамыз!

Unmap ViewofFile(AdrBase)

Finally //Бейнелеуден босатамыз

CloseHandle(HMap) End;

Finally //Файлды жабамыз!

CloseHandle(HFile) End; //Есептеу уақытын хабарлаймыз.

Pb.Hide;

LbMem.Caption:=TimeToStr(Time_BegTime) End;

Procedure Tform1.btFileClick(Sender.TObject);

//Файлды әдеттегі әдіспен құру

var F: File of Real; K: Integer;

BegTime:TdateTime;

R:Real; //Writе операторына арналған буферлік айнымалы

Begin


BegTime:=Time; //Уақытты іске қосамыз

//ProgressBar дайындалады:

Pb.Max:=se.Value;

Pb.Position:=0;

Pb.Show; //Файл құрамыз

AssignFile(F, ‘test.dat’);

Rewrite(F);

For I:=1 to se.Value do

Begin R:=Random;

//Write операторын шақыру параметрі тек //айнымалы болуы мүмкін

Write(F,R); LbFile.Caption:=IntToStr(k);

Pb.Position:=k;

Application.ProcessMessages;

End;


CloseFile(F); Pb.Hide;

LpFile.Caption:=TimeToStr(Time_BegTime)

End; End.
Тапсырма №2.

//мәтіндік файлды көру және жөндеу

unit rd_;

interface

uses

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



Dialogs, StdCtrls, Buttons;

Type


TForm1=class(TForm)

Memo1:TMemo;

Edit1:TEdit;

Button1:TButton;

Button2:TButton;

CheckBox1:TCheckBox;

Procedure Button2Click(Sender:TObject);

Procedure Button1Click(Sender:TObject);

Procedure Edit1KeyPress(Sender:TObject; var Key:Char);

Procedure CheckBox1Click(Sender:TObject);

Private {Private declarations}

Public {Public declarations}

End;

Var


Form1:TForm1;

Implementation {SR*.dfm} //жөндеу алаңында клавишты басу

Procedure TForm1.Edit1KeyPress (Sender:TObject; var Key: Char);

Begin


If Key=#13 // клавишы

Then Button1.SetFocus;

End;

//ашу батырмасын басу



Procedure TForm1.Button1Click(Sender:TObject);

Var f:TextFile; //файл

fName:String[80]; //файл аты

buf:String[80]; //жолды оқуға арналған буфер

begin

fName:=Edit1.text;



AssignFile(f, fName);

Try Reset(f); //файлды оқу үшін ашу

except

on EInOutError do



begin

ShowMessage(‘Файлға кіруде қате бар’+ fName);

Exit; end; end; //файлдан оқу

While not EOF(f) do

Begin

Readln(f, buf); //файлдан жолды оқу



Memo1.Lines.Add(buf); //Memo1 өрісіне жол қосу

End;


CloseFile(f); //файлды жабу

end; // Сақтау батырмасын басу

procedure TForm1.Button2Click(Sender: TObject);

var


f: TextFile; // файл

fName: String[80]; // файл аты

i: integer;

begin


fName:=Edit1.Text;

AssignFile(f, fName);

try

Rewrite(f); // файлды қайта жазу үшін ашу



except

on ElnOutError do

begin

ShowMessage(‘Файлға кіруде қате бар’+fName);



exit;

end;


end;

// файлға жазу

for i:=0 to Memo1.Lines.Count do // Memo редакторындағы жолдар нөлден бастап нөмірленген

writeln(f, Memo1.Lines[i]);

CloseFile(f); // файлды жабу

MessageDlg(‘мәліметтер файлға жазылды’,mtInformation,[mbOk],0);

end;

// Тек оқу үшін ауыстырып қосқышын басу



procedure TForm1.CheckBox1Click(Sender: TObject);

begin


if not CheckBox1.Checked then

begin


Memо1.ReadOnly:=False;

Button2.Visible:=True

end

else


begin

Memo1.ReadOnly:=True; // жөндеуді шектеу

Button2.Visible:=False; // Сақтау батырмасы жұмыс істемейді

end;


end;

end.


Тапсырма №3.

unit pogoda_;

interface

uses


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

Dialogs, StdCtrls, ComCtrls;

Type

TForm1=class(TForm)



MonthCalendar1: TMonthCalendar;

Label1: TLabel;

Button1: TButton;

Edit1: TEdit;

procedure FormCreate(Sender: TObject);

procedure ButtonClick(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure Edit1KeyPress(Sender: TObject; var Key: Char);

private

{ Private declarations }



public

{ Public declarations }

end;

var


implementation

{ $R*.dfm }

const

DBNAME=’pogoda.txt’;



var

db:TextFile; //файл – мәліметтер қоры

//Жұмыстың басы. Мәліметтер қоры файлын ашамыз немесе құрамыз.

Procedure TForm1.FormCreate(sender:TObject);

var

r:integer; // пайдаланушының жауабы



begin

AssignFile(db,DBNAME);

Try

Append(db); // қате болу мүмкін



except

on E:EInOutError do

begin

r:=MessageDlg(‘(pogoda.txt)мәліметтер қоры файлы табылған жоқ.’+



#13+’Файл құру керек

?’,mtWarining,[mbOk,mbCancel],0);

if r=mrOK

then begin

Rewrite(db); //Файл құрамыз

ShowMessage(‘мәліметтер қоры файлы құрылады!’);

End

Else Application.Terminate; //Программа жұмысын аяқтау



End;

End;


Edit1.Enabled:=True;

Button1.Enabled:=True;

End;

//Температура өрісінде клавишты басу



Procedure TForm1.Edit1KeyPress(Sender:TObject; var Key:Char);

Begin


Case Key of

‘0’..‘9’,#8: ; // цифрлар және

#13: // клавишы

If Length(Edit1.Text)<>0

then Button1.SetFocus;

‘,’,’.’ begin // ондық нүкте

Key:=DecimalSeparator;

If Pos(DecimalSeparator,Edit1.Text) <> 0

then

then


else Key:=Char(0);

else Key:=Char(0); // қалған символдар рұқсат етілмейді

end;

end;


// Қосу батырмасын басу

Procedure TForm1.Button1Click(Sender: TObject);

begin

if Length(Edit1.Text)=0



then ShowMessage(‘Температураны енгіз’)

else begin

writeln(db,

FormatDateTime(‘dd/mm/yy’,MonthCalendar1.Date),

‘’,Edit1.Text);

Edit1.Text:=’’;

End;

End;


//Программа жұмысының аяқталуы

Procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

begin

CloseFile(db); //Файлды жабу



end;

end.


Тапсырма №4.

Файлдарды сақтау және оқу жұмысын SaveDialog1 және OpenDialog1 компоненттері арқылы ұйымдастырылады. Бұл компоненттер бетінде Dialogs орналасқан (ол жөнінде ІV тарауда айтылған).

Енді оқиғаны өңдеуші процедуралар құруды қарастырайық. әрбір компоненттің Name қасиетін: BitBtn1-ді -BitBtnNew, BitBtn2-ні -BitBtnOpen, BitBtn3-ті -BitBtnSort, BitBtn4-ті – BitBtnSave деп алмастырайық. Әрбір батырманы жылдам екі рет басу арқылы сәйкес оқиғаларды өңдеуші процедураларды ашып, төмендегі программа мәтінін енгіземіз.

unit Unit1;

interface

uses


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

Dialogs, StdCtrls, Spin, Buttons, Grids;

type

TForm1 = class(TForm)



StringGrid1: TStringGrid;

BitBtnNew: TBitBtn;

BitBtnOpen: TBitBtn;

BitBtnSort: TBitBtn;

BitBtnSave: TBitBtn;

SaveDialog1: TSaveDialog;

OpenDialog1: TOpenDialog;

SpinEdit1: TSpinEdit;

Label1: TLabel;

procedure FormCreate(Sender: TObject);

procedure BitBtnSortClick(Sender: TObject);

procedure BitBtnNewClick(Sender: TObject);

procedure SpinEdit1Change(Sender: TObject);

procedure BitBtnOpenClick(Sender: TObject);

procedure BitBtnSaveClick(Sender: TObject);

private


{ Private declarations }

public


{ Public declarations }

end;


var mzap:array[1..20] of zap; //жазулар массивін хабарлау

FileZap:file; // мәтіндік файлды хабарлау

FileNameZap,FileNameText:String; //жазулар файлы мен мәтіндік файлдардың атаулары

n:integer; //жазулар массивінің ағымдағы элементтер саны

//форма құру процедурасы

var


Form1: TForm1;
Implementation {$R *.dfm}

type


zap=record // жазуды хабарлау

fio:string[20];

mat, phiz, chem:integer;

end;


var mzap:array[1..20] of zap; // жазулар массивін хбарлау

fileZap:file of zap; // жазулар файлын хабарлау

fileText:textfile; //мәтіндік файлды хабарлау

filenameZap,FileNameText:string; // жазулар файлы мен мәтіндік файлдардың атаулары

n:integer; //жазулар массивінің ағымдағы элементтер саны

//форма құру процедурасы

procedure TForm1.FormCreate(Sender: TObject);

var i:integer;

begin

with stringGrid1 do



begin //StringGrid 1 ұяшықтарын толтыру

Cells[0,0]:='ғ';

Cells[1,0]:='fio';

Cells[2,0]:='matem';

Cells[3,0]:='phyzics';

Cells[4,0]:='chemstry';

end;

BitbtnSort.Hide; // батырманы жасыру



{BitbtnSave.Hide;}

end;{}


// Сұрыптауды орындайтын процедура

procedure TForm1.BitBtnSortClick(Sender: TObject);

var i,j:integer; vper:zap;

begin


for i:=1 to n do

with StringGrid1, mzap[i] do

begin

fio:=Cells[1,i];



mat:=StrToInt(Cells[2,i]);

phiz:=StrToInt(Cells[3,i]);

chem:=StrToInt(Cells[4,i]);

end; // көпіршікті сұрыптау әдісі

for i:=2 to n do

for j:=n downto i do

if mzap[j-1].fio>mzap[j].fio then

begin


vper:=mzap[j-1];

mzap[j-1]:=mzap[j];

mzap[j]:=vper;

end;


for i:=1 to n do // StringGrid1 ұяшығын жазулар массивінің өрістерімен толыру

with StringGrid1, mzap[i] do

begin Cells[0,i]:=intTostr(i);

Cells[1,i]:=fio;

Cells[2,i]:=intTostr(mat);

Cells[3,i]:=intTostr(phiz);

Cells[4,i]:=intTostr(chem);

end;


end;

// жаңа жазу файлын құру

procedure TForm1.BitBtnNewClick(Sender: TObject);

var


i:integer;

begin


if MessageDlg('Файл мазмұнының өшірілмейтініне сенімдісі

бе?',mtConfirmation, mbYesNoCancel,0)<>mrYes

Then

begin


for i:=1 to n do

with StringGrid1, mzap[i] do

begin

fio:=Cells[1,i];



mat:=StrToInt(Cells[2,i]);

phiz:=StrToInt(Cells[3,i]);

chem:=StrToInt(Cells[4,i]);

end;


with SaveDialog1 do

begin


Title:='Create file'; // сұхбат терезе тақырыбы

if Execute then

begin

FileNameZap:=Filename;



AssignFile(FileZap, FileNameZap);

Rewrite(FileZap); //файлды жазу үшін ашу

for i:=1 to n do

write(FileZap, mzap[i]); // файлға жазулар массивін жазу

end;

end;


end;

end;


// батырманың өлшемінің өзгеруін басқаратын батырма

end;


//батырманың өлшемінің өзгеруін басқаратын батырма

procedure TForm1.SpinEdit1Change(Sender: TObject);

var i,m:integer;

begin


SpinEdit1.Text:='5';

m:=StrToInt(SpinEdit1.Text); // өлшемге жаңа мән меншіктеу

with StringGrid1 do

begin


RowCount:=m+1; // жолдар санын есептеу

if m>n then

for i:=n+1 to m do

begin


Cells[0,i]:=intToStr(i);

Cells[1,i]:='';

Cells[2,i]:='';

Cells[3,i]:='';

Cells[4,i]:='';

end;


end;

n:=m;


end;

//Open батырмасының процедурасы

procedure TForm1.BitBtnOpenClick(Sender: TObject);

var i:integer;

begin

with OpenDialog1 do



begin Title:='Openfile'; // сұхбат терезе тақырыбы

if Execute then

begin

FileNameZap:=FileName;



AssignFile(FileZap,FileNameZap);

Reset(FileZap);

n:=0; while not E of (FileZap) do

begin n:=n+1;

read(fileZap,Mzap[n]);

end;


SpinEdit1.text:=IntToStr(n);

StringGrid1.RowCount:=n+1;

for i:=1 to n do

with StringGrid1, MZap[i] do

begin

Cells[0,i]:=IntToStr(i);



Cells[1,i]:='fio';

Cells[2,i]:=IntToStr(mat);

Cells[3,0]:=IntToStr(phiz);

Cells[4,0]:=IntToStr(chem);

end; clouseFile(FileZap); end; end;

BitbtnSort.Show; BitbtnSave.Show; end; end;


// мәліметтерді мәтіндік файлда сақтау процедурасы

procedure TForm1.BitBtnSaveClick(Sender: TObject);

var i:integer;

begin


with SaveDialog1 do

begin


if Execute then

begin


Filenametext:=FileName;

AssignFile(FileText, FilenameText);

Rewrite(Filetext);

for i:=1 to n do

with MZap[i] do

writeln(Filetext, i:3,fio:20,mat:5,phiz:5,chem:5);

CloseFile(FileText);

end; BitbtnSort.Hide;



end;

end;


end.



Достарыңызбен бөлісу:
1   ...   27   28   29   30   31   32   33   34   35




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет