УМКД Делфи. УМК_прог_DELPHI. азастан Республикасыны Білім жне ылым Министрлігі Атбе мемлекеттік педагогикалы институты
Скачать 1.95 Mb.
|
Дәріс 5-6. Delphi ортасында файлдармен жұмыс Жоспар: Дисктік кеңістікті талдау Каталогтарды басқару Файлдарды басқару Файл типтері Файлдарды байланыстыру, ашу және жабу Мәліметтерді оқу және жазу Ақпаратты баспаға шығару 1. Дисктік кеңістікті талдау. Программист дайындайтын қосымшасына файлдық жүйені басқару мен оның күйі туралы ақпаратты жедел алу мүмкіндігімен қамтамасыз ету үшін uses бөлімінде стандартты System және SysUtils модульдерін қосуы керек. Файлдық жүйемен жұмыс жасайтын процедуралар мен функцияларды шартты түрде үш категорияларға бөлуге болады: - дисктік кеңістікті талдау құралдары; - каталогтарды басқару құралдары; - файлдарды басқару құралдары. Дисктік жинақтағыштарды белгілеу үшін латын алфавитінің әріптері қолданылады (A..Z). А және В әріптері әр түрлі форматтағы иілгіш дисктерге сәйкес келеді, ал қалған әріптер базалық қатты дискті құрайтын логикалық дисктердің аттарын анықтайды. Осылайша логикалық диск келесі параметрлері бар дисктік кеңістіктің атауы бар аумағын құрайды: - аты; - толық көлемі; - бос орын көлемі. Delphi-де логикалық дисктерді пайдалану үшін келесі нөмірлеу қабылданған. - 0 – ағымдық диск; - 1 – А дисководы; - 2 – В дисководы; - 3 – С логикалық дискісі; - 4 – D логикалық дискісі және т.с.с. Логикалық дисктің жалпы көлемін байтпен анықтау үшін DiskSize(Drive:Byte):Int64 функциясы пайдаланылады. Drive параметрі жоғарыда айтылған нөмірлеуге сәйкес, диск нөмірін анықтайды. Ал бос орын көлемін DiskFree(Drive:Byte):Int64 функциясымен табамыз. Егер параметр ретінде жоқ диск нөмірі көрсетілсе, онда бұл функциялардың мәні -1 болады. 2. Каталогтарды басқару. Файлдық жүйе құрылымының келесі деңгейі – каталог болып табылады. Каталог дегеніміз, файл аттары, олардың өлшемдері мен қасиеттері туралы ақпарат сақталатын дисктегі белгілі бір аумақ. Файл каталогта орналасқан деген сөз – файл аты онда тіркелгендігін білдіреді. Каталогтарды басқаруға байланысты амалдарды үш категорияға бөлуге болады: Каталогтармен орындалатын операциялар; Ағымдық каталогты басқару; Каталогтарды іздеу мен таңдау. Delphi-де каталогтармен екі операция орындалуы мүмкін: құру және өшіру. Олар сәйкесінше CreateDir(const Dir: string) және RemoveDir(const Dir: string) функциялары көмегімен жүзеге асырылады. Dir параметрі каталог аты мен оның толық жолын анықтайды. Әр функция true немесе false мәндерінің бірін қабылдайды. GetCurrentDir: string функциясы ағымдық каталог аты мен оның толық жолын шығарады. Ағымдық каталогты ауыстыру үшін SetCurrentDir(const Dir: string): Boolean функциясы қолданылады. Егер Directory жолдық параметрімен берілген каталог бар болса, DirectoryExists(const Directory: string): Boolean функциясының мәні true болады. 3. Файлдарды басқару. System және SysUtils модульдерінде файлдармен жұмыс жасайтын көптеген функциялары бар. Оларды келесі категорияларға бөлуге болады: Файлдармен орындалатын операциялар; Файл параметрлерін және атрибуттарын басқару; Файлдарды іздеу; Файл аттарын басқару. Файлдармен жұмыс жасайтын операцияларды орындау үшін үш функция бар: FileCreate(const FileName: string): Integer. FileName параметрімен анықталған файл құрады. Егер файл құру процесі қатесіз орындалса, онда функция құрылған файлдың енгізу-шығару операцияларын жүзеге асыру үшін қолданылатын дескрипторын қайтарады, өзге жағдайда -1 мәніне ие болады. DeleteFile(const FileName: string): Boolean. FileName атты файлды өшіреді. RenameFile(const OldName, NewName: string): Boolean. OldName атты файл атын өзерту. Егер ондай файл табылса, оған NewName жаңа аты меншіктеледі де, нәтижесінде true мәнін шығарады, басқа жағдайда – false болады. Файл атын өзгерту үшін сонымен қатар System модулінде анықталған Rename(var F; NewName: string) процедурасын қолдануға болады. Файл атрибуттарын оқу және қондыру үшін сәйкесінше FileGetAttr(const FileName: string): integer және FileSetAttr(const FileName: string; attr: integer): integer функциялары қолданылады. Файл атрибуттары SysUtils модулінде анықталған бүтін типті мәндермен беріледі: faReadOnly =$00000001; // тек оқуға арналған файл faHidden =$00000002; // жасырын файл faSysFile =$00000004; // жүйелік файл faVolumeID =$00000008; // диск идентификаторы faDirectory =$00000010; // каталог аты faArchive =$00000020; // архивтік файл faAnyFile =$0000003F; // кез-келген типті файл «Тек оқу үшін» арналған файл атрибутын өзгертіп, тексеру үшін FileSetReadOnly(const FileName: string; ReadOnly: boolean): Boolean және FileIsReadOnly(const FileName: string): boolean стандартты функцияларын қолдануға болады. Файлдың бар-жоғын тексеру үшін FileExists(const FileName: string): bollean логикалық функциясы қолданылады. 4. Файл типтері. Файлдарда сақталатын ақпарат тек мазмұны емес, құрылымы бойынша да әр түрлі болады. Delphi құралдарымен файлдық мәліметтерді өңдеу – файл типі мен ондағы ақпараттың сақталу тәсіліне байланысты. Файлдың келесі типтері бөлінген: Типтелген Текстік Типтелмеген Типтелген файлдармен жұмыс жасау үшін файлдық тип келесі синтаксиспен хабарланады: <файлдық тип аты> = file of <тип>; Бірақ, бұл категория файлдары үшін мәліметтер элементтерінің типі шектеулі. Текстік файл жолдарға бөлінген символдар тізбегінен тұрады. Текстік файлдармен жұмыс жасау үшін арнайы TextFile типті файлдық айнымалы хабарланады. Мысалы: Article: TextFile; Типтелмеген файлдар биттер тізбегі түріндегі мәліметтерден тұратын екілік файлдар. Типтелмеген файлдармен жұмыс жасау үшін файлдық айнымалыны келесі түрде хабарлаймыз: <файлдық айнымалы аты>: file; 5. Файлдарды байланыстыру, ашу және жабу. Файл мәліметтерімен жұмыс жасау үшін файлдық айнымалы нақты физикалық файлмен байланысу керек. Ол үшін AssignFile(var F; FileName: string) стандартты процедурасы қолданылады. Мұндағы F –файлдық айнымалы. Ал FileName параметрі – дисктегі физикалық файл аты. AssignFile (f1, ‘test.txt’); AssignFile (f2, OpenDialog1.FileName); Жадыда бар файлды ашу Reset процедурасының көмегімен орындалады. Reset (var f: file); Жаңа файлды ашу және құру үшін Rewrite процедурасы қолданылады. Rewrite (var f: file); Файлды жабу үшін CloseFile процедурасы қолданылады. CloseFile (var f: file); Енгізу-шығару операцияларын орындауда файл соңын тексеру үшін еof функциясы қолданылады. Егер файл соңына жеткен болса функция true мәнін қайтарады. Файлға мәліметтер жазу үшін Write немесе writeln процедуралары қолданылады. write (f, <өрнек>) Бұл жерде өрнек char, integer, real, string, Boolean типті болуы мүмкін. Мысалы: write (f, ‘сіз’, I , ‘жастасыз’); Файлдан мәліметтер оқу read және readln процедуралары қолданылады. read (f, <айнымалылар тізімі>); Мысалы: Read (f, s1, s2, i); Текстік файлдармен жұмыс істегенде Ob.Pascal тілінің процедурасын шақырмай-ақ, Tstring және TStringList кластарының LoadFromFile, SaveToFile әдістерін қолдануға болады. Мысалы, RichEdit компонентін қолданып файл мазмұнын оқу үшін, келесі түрде жазуға болады: RichEdit1.Lines.LoadFromFile (‘test.rtf’); немесе файлдарға өзгерістерді сақтау үшін: RichEdit1.Lines.SaveToFile (‘test.rtf’); 6. Мәліметтерді оқу және жазу. Файлдармен жұмыс жасаған кезде оларды оқуға немесе жазуға болады. Файлды ашқаннан кейін автоматты түрде файлдың ағымдық позициясын анықтайтын арнайы айнымалы-көрсеткіш құрылады. Яғни, осы позициядан бастап оқу-жазу операциясы орындалады. Үнсіз келісім бойынша бұл көрсеткіш файл басына көрсетеді. Тек Append процедурасы көмегімен жазу үшін ашылған текстік файлдарда файл көрсеткіші оның соңына көрсетеді. Типтелген және текстік файлдардан ақпаратты оқу үшін Read стандартты процедурасы қолданылады. Бұл процедура текстік файлдардан әр түрлі типті мәліметтерді оқи алады. Айталық, C:\workfolder\workfile.txt текстік файлының мазмұны келесі түрде болсын: Фамилия Математика Физика Ахметов 5 5 Иванов 4 3 Максатов 4 5 Аманжолов 4 3 Біздің мақсатымыз – оқушылардың орта балының массивін құру. Программа коды: Var f : textfile; S : string[16]; //фамилия ұзындығы 16 символмен шектелген Math, ph, i: integer; Average: array [1..10] of real; Begin I:=0; Assignfile(f, ‘C:\workfolder\workfile.txt’); Reset(f); Readln(f); //көрсеткішті екінші жолдыі басына көшіру While not EOF(f) do //файл соңына жеткенше Begin Inc(i); Read(f, s, math,ph); Average[i]:=(math+ph)/2; Readln(f); End; Closefile(f); End; Бұл программада қолданылған бір параметрі бар Readln процедурасын бірнеше рет шақыру арқылы файл көрсеткішін келесі жолдың басына көшіруге болады. Ал типтелген файлдардан мәліметтер элементтерін оқу үшін тек Read процедурасын қолдануға болады. Ақпаратты текстік және типтелген файлдарға шығару Write процедурасы көмегімен жүзеге асырылады. Типтелмеген файлдарға жазу немесе оқу үшін Blockwrite және Blockread процедуралары қолданылады. Blockwrite (var f: file; var Buf; count : word; var result : word) Мұндағы Buf – файлға жазылатын немесе оқылатын кез-келген айнымалы. Count – жазылатын немесе оқылатын жазбалар саны. Result – міндетті емес параметрлер нақты жазылған немесе оқылған жазбалар саны. Сонымен қатар, келесі процедуралар бар: Append (f) – файл соңына мәлімет қосу үшін оны ашады. Eoln (f) – текстік файлда жол соңын көрсетеді. Erase (f) – файлды жою. Rename (f, NewName) – файл атын өзгерту. 7. Ақпаратты баспаға шығару. Delphi-дің баспаға шығару құралдарына баспаға шығарушы құрылғылардың стандартты диалогтары мен TPrinter класы жатады. Баспаға шығарушы құрылғыларды таңдау мен баптау мүмкіндіктері стандарты диалогтар түрінде жүзеге асырылады. Оларды Dialogs компоненттер палитрасында орналасқан визуальды емес компоненттер арқылы пайдаланамыз: PrintDialog, PrinterSetupDialog, PageSetupDialog. Бұл компоненттердің әрқайсысын Execute әдісімен шақырғаннан кейін, сәйкесінше диалогтық терезелер ашылады. Ал TPrinter класы қосымша мен принтерді көрсету контексті арасында байланыстырушы ролін атқарады. Онда мәтіндік және графикалық ақпаратты баспаға шығару процесін басқару үшін қажетті қасиеттер мен әдістер жинақталған. Бұл класс экземплярларын Printer функциясы арқылы қолдануға болады. Ал бұл функцияны қолдану үшін uses бөлімінде Printers модулін қосу керек. Дәріс 7. Қосымшаның дистрибутивін құру Жоспар: Дистрибутив файлын дайындау Инсталляция процесін ұйымдастыру Жалпы қондырулар 1. Дистрибутив файлын дайындау. Программист дайындаған қосымша жалпы жағдайда өте күрделі және әр түрлі папкаларда орналасқан бірнеше файлдарды қамтуы мүмкін. Мұндай қосымшаларды инсталяциялау кезінде белгілі бір каталогтар құрылымын анықтап, оларға қажетті файлдарды көшіру керек. Бұл жұмыстар қолданушыға қиындықтар туғызуы мүмкін. Инсталяция процесін автоматтандыру үшін қосымшаның дистрибутивті вариантын құру керек. Дистрибутив файлын құруға арналған арнайы утилита-программалар бар. Солардың бірі InstallShieldExpress. Бұл программа Delphi-мен бірге құрылады, бірақ бөлек орнатылады. Ол icide.exe файлымен іске қосылады. Бұл программаның төмендегідей мүмкіндіктері бар: тәуелсіз программа өнімдері үшін Windows-қа сай қондыру мүмкіндіктері. Дистрибутивті әр түрлі қондырғылардан және желі арқылы инсталляциялану мүмкіндігі. Сериялық нөмір көмегімен дистрибутивті қорғау. Файлда автоматты түрде сығу. Жүйелік реестрді және файлдарды автоматты түрде өзгерту. Дистрибутив құрамына Windows модулін қосу. Программаны іске қосқаннан кейін InstallShieldExpress Borland Limited Edition терезесі пайда болады. Бұл жерде әрі қарай жұмыс істеуге қажетті жұмыс құжаты құрылады немесе таңдалынады. Жұмыс құжаты дегеніміз кеңеймесі .ism болып келетін проект. Бұл файлдың аты Delphi-дегі қосымша файлдың атымен бірдей болуы мүмкін. Жаңа проектіні құру Create a new project командасынан басталады. Бұл жағдайда терезенің оң жақ бөлігінде прект типін, орналасуын және атын таңдауға мүмкіндік беретін басқару элементтері пайда болады. Create батырмасын басар кезде көрсетілген екі типтің біреуін таңдаймыз (Project Wisard немесе Blank Setup Project). Бұрыннан бар проектіні ашу үшін терезенің ортаңғы бөлігінен Open a Project командасы таңдалынады, бұл кезде терезенің оң жақ бөлігінде проектілер тізімі және таңдалған проект туралы мәліметтер көрінеді. Қандай да бір проектіні белгілеп, Open батырмасын басамыз. Егер тізімде қажетті проект жоқ болса, Browse батырмасын қолданып табамыз. Жаңа проект құрып және дистрибутивтің бар проектісін ашқаннан кейін InstallShieldExpress программасының терезесі екі бөліктен тұрады. Сонымен қатар, InstallShieldExpress бір құжатты қосымша болып табылады және бір мезгілде тек бір ғана проектімен жұмыс істей алатынын айта кеткен жөн. Проект аты терезе тақырыбынан көрінеді. Терезенің сол жақ бөлігінде дистрибутив қасиеттерін көруге, оны құруға және тестілеуге арналған алты парақтар тобы орналасады. Оларды таңдау арқылы терезенің оң жағынан осы топ туралы ақпарат көре аламыз. Терезенің сол жақ бөлігінде парақты таңдау кезінде оң жақ панельде осы парақта орналасқан атаулар мен параметрлер мәндерінің тізімі шығады. Параметрлермен жұмыс жасау кезіндегі көптеген әрекеттер объектілердің жанама мәзір командаларының көмегімен орындалады. Параметрлерді тағайындағаннан кейін, парақ тақырыбының сол жағында қызыл таңбаша (галочка) пайда болады. Қосымша дистрибутивін құру үшін барлық параметрлердің мәндерін тағайындау міндетті емес. Дистрибутивтің негізгі параметрлерін толығырақ қарастырайық. 2. Инсталляция процесін ұйымдастыру Organize Your Setup қондырылатын қосымша туралы ақпаратты және инсталляциялық программаның негізгі терезесінің түрін анықтауға мүмкіндік береді. Бұл топқа келесі парақтар кіреді: General Information (Общая информация) Features (Компоненты) Setup Types (Типы инсталляции) Upgrade Paths (Модернизация путей) General Information парағында қосымша инсталляциясының негізгі параметрлері, компания және қосымша (приложение) туралы мәліметтер көрсетіледі. Келесі параметрлерді көрсетейік: Author (авторы) Product Name (название продукта) Display Icon (значок приложения) Product Version (версия) INSTALLDIR (каталог инсталляции) Publisher/Product URL (интернет-адрес производителя и продукта) Publisher (производитель) Readme (информационный файл) Support Contact (адрес организации, сопровождающей приложение) Support Phone number (телефон организации, сопровождающей приложение) Product code (код приложения) Product Upgrade Code (код для обновлений приложения) DATABASEDIR (расположение базы данных) Product Name параметрі қосымшаның Windows-та белгіленетін атын білдіреді және де дистрибутивтен инсталляциялау немесе Add/Remove Programs (Установка и удаление программ) панелі көмегімен өшіру кезінде көрінетін атын білдіреді. INSTALLDIR параметрі инсталляцияланатын қосымшаның файлдарының орналасатын каталогын көрсетеді. Бұл каталогты беру үшін параметрлерді (квадрат жақша ішіндегі параметр аты), нақты мәндерді (мысалы, D:\BookStore), сонымен қатар параметрлер мен нақты мәндер комбинациясын (мысалы, [ProgramFilesFolder]\abc) қолдануға болады. Windows-та қабылданған келісімдер бойынша қосымша Program Files каталогында орналасуы керек, сондықтан үнсіз келісім бойынша INSTALLDIR үшін [ProgramFilesFolder]\[Company Name]\[Product Name] мәні ұсынылып тұрады. Қосымшаны инсталляциялау кезінде параметр атының орнына сәйкес мән қойылады, мысалы, мекеме аты. Features бетінде дистрибутив компоненттерін (құрама бөліктерін) анықтауға болады. Олар файлдардың жеке топтарын біріктіреді және қосымшаның қандай да бір мүмкіндіктерін ұсынады (бұл компоненттер Delphi компоненттеріне ешқандай қатысы жоқ). Файл топтарын компоненттерге біріктіру қосымшаны инсталляциялаудың әр түрлі режимдерін ұйымдастыруға мүмкіндік береді. Компоненттерді құруға, атын өзгетуге, өшіруге, сонымен қатар олардың орналасу ретін өзгертуге болады. Бұл әрекеттер компоненттің жанама мәзіріндегі сәйкес командалар көмегімен орындалады, ал оны құру кезінде Features параметрінің жанама мәзірі пайдаланылады. Сонымен бірге Features бетінде тек компоненттердің өздері анықталып, ал олардың құрама файлдары Files және Files and Features беттерінде беріледі. Үнсіз келісім бойынша проектте қандай жағдайда болмасын қондырылатын файлдардан құралған Allways Install бір компоненті болады. Setup Types бетінде компоненттерді инсталляцияның келесі типтері бойынша бөлуге болады: Typical (Типовая) Minimal (Минимальная) Custom (По усмотрению пользователя (выборочная)). Типтердің аттары Setup Types тізімінде көрінеді. Атаудың сол жағында қосымшаны инсталляциялау кезінде нұсқаның ағымдық (доступность) болуын басқаратын белгіше (флажок) тұрады. Үнсіз келісім бойынша барлық белгішелер белгіленіп тұрады. Қандай да бір нұсқаның болмауын қаласақ, сәйкес белгішені алып тастасақ жеткілікті. Setup Types тізімінен инсталляция типін таңдау кезінде оң жақтағы тізімнен барлық компоненттердің тізімі көрінеді. Мұнда да белгішелердің көмегімен оларды инсталляциялауға қосуды, не қоспауды басқаруға болады. 3. Жалпы қондырулар Specify Application Data (Определить данные приложения) тобы қосымша құрамына енетін файлдарды көрсету үшін қызмет етеді. Бұл топқа келесі беттер кіреді: Files (Файлы); Files and Features (Файлы и компоненты); Objects/Merge Modules (Объекты/добавляемые модули); Dependencies (Зависимости). Files беті қосымша дистрибутивіне енгізілетін файлдарды таңдауға мүмкіндік береді. Программа құрушы өз компьютерінде файлдар мен олар орналасқан каталогтарды, сонымен қатар қосымша қондырылатын компьютерде осы файлдардың орналасуын көрсетуі тиіс. Source computer’s folders ағашынан каталогты көрсеткеннен кейін, Source computer’s files тізімінен бастапқы файл таңдалып, тышқан көмегімен Destination computer’s folders тізімінде көрсетілген инсталляция каталогына көшіріледі. Destination computer’s files тізімі таңдалынған инсталляция каталогының файлдарын көрсетеді. Программа құрушы Destination Computer (Компьютер размещения) элементінің жанама мәзіріндегі Show Predefined Folder (Показать предопределенную папку) командасын орындау арқылы кейбір жүйелік каталогтарды көрсетіп немесе жасырып қоюына болады. Терезенің жоғарғы жағында орналасқан Feature тізімі каталогтармен олар үшін таңдалынған файлдардың қатысы бар компонентті анықтайды. Үнсіз келісім бойынша бұл компонент – Allways Install. Files and Features бетінде қандай да бір компонентке тиісті файлдар тізімдерін қарауға болады. Сонымен қатар, файлдарды өшіруге және компоненттер арасында оларды ауыстыруға болады. Objects/Merge Modules беті қосымшаның жұмысына қажетті жүйелік модульдерді көрсетуге мүмкіндік береді. Егер модульді баптау қажет болатын болса, онда оны таңдау кезінде керек параметрлерді беруге болатын қосымша терезелер ашылады. Практикалық жұмыс тапсырмалары №1 Практикалық жұмыс Delphi ортасында функциялар графигін салу Мақсаты: Негізгі графиктік мүмкіндіктерді қолдана отырып функциялар графигін салуға үйрету. Методикалық нұсқаулар Функциялар графигін тұрғызу үшін математикалық координаттан графиктік координатаға көшеміз және графиктік экранға сәйкес масштаб анықталады. Графиктерді тұрғызу үшін Pixels қасиетңн қолдануға болады. Формула бойынша есептеу негізінде график салынады. Функция аргументінің өзгеру орнының шекарасы берілгені болып есептелінеді; функция мәнінің өзгеру орны есептелген болуы мүмкін. Осы берілгендер бойынша графикті барлық аймақты қамтитындай етіп шығаруды мүмкін ететіндей масштабты анықтауға болады. Мысалы, кейбір функциялар 0-ден 1000-ға дейінгі мәндер қабылдайтын болса және оның графигін тұрғызу үшін биіктігі 250 пиксель болатындай аймақ қолданылады, онда у осінің масштабы m=250/1000 формуласымен есептеледі. Осылайша f(x)=1000 мәні координатасы y=0 болатын нүктелер аймағына сәйкес келеді, өйткені y=250-f(x)*m=250-1000*(250/1000), ал f(x)=70 мәні координатасы y=233 болатын нүктеге сәйкес келеді, өйткені y=250-70*(250/1000) (мәні дөңгелектелген, қасиетінің Pixels индекстері тек бүтін сандар сандар болуы мүмкін). Мысал. X мәні [a,b] интервалында анықталатын y=sin(x) функциясының графигін тұрғызалық. Формаға Panel1 компонентін оң жағына орналастырамыз және оған Edit1, Edit2, Button1 компоненттерін a (Label1), b (Label2) мәндерін Edit1, Edit2 компоненттерінің жанына енгіземіз. Button1 компонентінің OnClick оқиғасын құрамыз. Коды: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Panel1: TPanel; Edit1: TEdit; Edit2: TEdit; Button1: TButton; Label1: TLabel; Label2: TLabel; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} function f(var x:real):real; begin f:=sin(x); end; procedure TForm1.Button1Click(Sender: TObject); var x1, x2, y1,y2,x,y,dx,mx,my:real; l,b,w,h,x0,y0,lx,ly,kx:integer; begin form1.Canvas.FillRect(rect(0,0,clientwidth, clientheight)); lx:=form1.Width div 2; ly:=form1.Height div 2; form1.Canvas.TextOut(lx,ly,'y=sin(x)'); l:=10; b:=form1.ClientHeight-20; h:=form1.ClientHeight-20; w:=form1.Width-40; x1:=strtofloat(edit1.Text); x2:=strtofloat(edit2.Text); dx:=0.01; lx:=0; ly:=10; y1:=f(x1); y2:=f(x2); x:=x1; kx:=10; repeat y:=f(x); if y if y>y2 then y2:=y; x:=x+dx; until(x>=x2); my:=h/abs(y2-y1); mx:=w/abs(x2-x1); x0:=1; y0:=b-abs(round(y1*my)); with form1.Canvas do begin moveto(l,b); lineto(l,b-h); moveto(x0,y0); lineto(x0+w,y0); textout(l+5,b-h,floattostrf(y2,ffgeneral,6,3)); textout(l+5,b,floattostrf(y1,ffgeneral,6,3)); x:=x1; repeat y:=f(x); pixels[x0+round(x*mx),y0-round(y*my)]:=clred; x:=x+dx; until(x>=x2); end; end; end. Өзіндік жұмыс тапсырмалары Есеп қойылымы. [a, b] интервалында Y=f(x) функциясының графигін тұрғызыңыз, функцияның y=f(a), y=f(b) мәндерін экранға шығарыңыз.
№2 Практикалық жұмыс Delphi ортасының графикалық және мультимедиялық мүмкіндіктері Жұмыстың мақсаты: Image Editor сурет салу редакторымен жұмыс жасау, компоненттердің Image, PaintBox, BitMap, Canvas (канва) қасиеттерін пайдаланып, графикалық кескіндер, анимациялар, функцияның графиктерін тұрғызуды үйрену. Теориялық мағлұмат: Image Editor редакторы Delphi-дің құрамына кіретін Image Editor сурет салу редакторын Tools менюінен жүктеуге болады. Ол – мүмкіндіктері аз, өте қарапайым редактор. Бұл жерде жасалған суреттерді тек файлдарда сақтап қана қоймай, бірден қосымшаның ресурстар файлына қосуға болады. Редактор терезенің жоғарғы жағында меню қатары, сол жағында инструменталды құрылғылар панелі және төменгі бөлігінде түстер палитрасы орналасқан. Image Editor редакторының көмегімен ресурстар файлын, биттік матрица файлын, пиктограмма файлын, курсорды бейнелеу файлын құруға болады. Канва және пиксельдер Delphi-де көптеген компоненттер мысалы, Image, PaintBox, BitMap, Canvas (канва) қасиетіне ие. Бұл қасиет компонент облысына сурет салуға немесе дайын суреттерді жүктеуге мүмкін болады. Канваның қасиеттері мен әдістері Delphi-дегі графиканы қолдануға жеңілдетеді. Канваның әрбір нүктесі X жәнеY координаталарына ие. Координаталар басы канваның сол жақ жоғарғы бұрышынан басталады. X осі оң жаққа, Y осі төмен қарай өседі. Координаталар өлшемі пиксельмен беріледі. Пиксель дегеніміз суреттің ең кіші элементі. Пиксельдің ең негізгі қасиеті – оның түсі. Түсті сипаттауға TColor типі қолданылады. Канваға сурет салудың бір тәсілі – пиксельдер бойынша салу. Ол үшін Pixels қасиеті қолданылады. Мультимедия және анимация Delphi программасының көмегімен қарапайым анимацияларды жүзеге асыруға болады. Бейнені қозғалысқа келтіру деген, бір-бірінен сәл ғана айырмашылығы бар бейнелерді топтастыру. Ол бізге қозғалыс көрінісін береді. Кадрлардың ауысу қарқынын беруге Timer компоненті қолданылады (интервалдар миллисекундпен есептеледі). Тапсырма: «Бильярд» ойынының программасын құру керек. Ойын шарты: «Старт» (Button1) батырмасын басқанда (Timer1 іске қосылады) үлкен шар (Shape1) алға қарай домалайды. Ортасында орналасқан кедергі (Shape12) домалап келе жатқан шар жақындағанда кішірейеді де, (Timer2 іске қосылады) үлкен шар қалған 10 шарға (Shape2-Shape11) соқтығысады. «Молодец!» (Label2) жазуы көрінеді. Содан соң «Хочешь еще?» (Label1) деген сөз бен «Новая игра» (Button2) батырмасы көрінеді. Программа коды: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Button1: TButton; Timer1: TTimer; Timer2: TTimer; Shape1: TShape; Shape2: TShape; Shape3: TShape; Shape4: TShape; Shape5: TShape; Shape6: TShape; Shape7: TShape; Shape8: TShape; Shape9: TShape; Shape10: TShape; Shape11: TShape; Shape12: TShape; Label1: TLabel; Button2: TButton; Label2: TLabel; procedure Button1Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure Timer2Timer(Sender: TObject); procedure Button2Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin button1.Visible:=false; timer1.Enabled:=true; timer1.Interval:=50; end; procedure TForm1.Timer1Timer(Sender: TObject); begin if shape1.Left>=shape12.Left-shape1.Width then begin timer2.Enabled:=true; timer2.Interval:=50; shape1.Visible:=false; timer1.Enabled:=false; end else begin shape1.Left:=shape1.Left+10; shape12.Height:=shape12.Height-9; end; end; procedure TForm1.Timer2Timer(Sender: TObject); begin if shape7.Left>=672 then begin shape1.Left:=11; shape1.Top:=212; shape1.Visible:=true; label1.Visible:=true; button2.Visible:=true; timer2.Enabled:=false; shape2.Left:=520; shape2.Top:=208; shape3.Left:=496; shape3.Top:=248; shape4.Left:=496; shape4.Top:=200; shape5.Left:=496; shape5.Top:=224; shape6.Left:=448; shape6.Top:=224; shape7.Left:=472; shape7.Top:=232; shape8.Left:=472; shape8.Top:=208; shape9.Left:=520; shape9.Top:=232; shape10.Left:=520; shape10.Top:=184; shape11.Left:=520; shape11.Top:=256; shape12.Left:=416; shape12.Top:=56; shape12.Width:=9; shape12.Height:=337; label2.visible:=false; end else begin shape2.Visible:=true; shape3.Visible:=true; shape4.Visible:=true; shape5.Visible:=true; shape6.Visible:=true; shape7.Visible:=true; shape8.Visible:=true; shape9.Visible:=true; shape10.Visible:=true; shape11.Visible:=true; shape2.Left:=shape2.Left+10; shape2.Top:=shape8.Top+6; shape3.Left:=shape3.Left+10; shape3.Top:=shape8.Top-8; shape4.Left:=shape4.Left+10; shape4.Top:=shape4.Top+8; shape5.Left:=shape5.Left+10; shape5.Top:=shape5.Top+4; shape6.Left:=shape6.Left+10; shape6.Top:=shape6.Top+0; shape7.Left:=shape7.Left+7; shape7.Top:=shape7.Top+7; shape8.Left:=shape8.Left+7; shape8.Top:=shape8.Top-7; shape9.Left:=shape10.Left+10; shape9.Top:=shape9.Top-6; shape10.Left:=shape10.Left+10; shape10.Top:=shape10.Top-5; shape11.Left:=shape11.Left+10; shape11.Top:=shape11.Top+5; shape12.Height:=shape12.Height+15; label2.visible:=true; end; end; procedure TForm1.Button2Click(Sender: TObject); begin label1.Visible:=false; label2.visible:=false; timer1.Enabled:=true; timer1.Interval:=50; shape1.Visible:=true; shape1.Left:=0; label2.visible:=false; end; procedure TForm1.FormCreate(Sender: TObject); begin shape1.Visible:=true; timer1.Enabled:=false; timer2.Enabled:=false; button2.Visible:=false; label1.Visible:=false; label2.visible:=false; end; end. Өз бетімен орындауға арналған тапсырмалар: Тышқанның сол жақ батырмасымен суретті шерткенде ұпай жинауға болатын ойынның программасын құру керек. Сонымен қатар, мысалы атыс саны он болса, оның нешеуі тиетінін анықтау керек. Формаға теңізде жүзіп бара жаткан кемені бейнелейтін программа құру керек (кеме қозғалуы тиіс). Ұшып бара жатқан ұшақты бейнелеу керек. «Крестики-нолики» ойынының программасын құру керек. «Теңіздегі ұрыс» (Морской бой) ойынының программасын құру керек. №3-4 Практикалық жұмыс Анықтамалық жүйе құру Мақсаты: Анықтамалық ақпаратты (RTF-файл) файл жобасына енгізуді, жобаны компиляциялауды үйрену. Теориялық мағлұмат: Анықтамалық ақпарат файл жобасына қосу үшін Files батырмасын диалогтық терезесінен Add батырмасын шертеміз. Нәтижесінде ашылатын Открытие файла стандартты терезесінен керекті RTF-файлын таңдау қажет. Осының нәтижесінде жоба терезесінде анықтамалық ақпарат файлының аты көрсетілетін [FILES] бөлімі пайда болады. Егер анықтамалық ақпарат бірнеше файлдарға бөлінген болса, онда файлды қосу операциясын қайталау керек. Анықтамалық жүйе терезесінің сипаттамасы Анықтамалық жүйенің негізгі терезесінің сипаттамасын беру үшін жоба терезесіндегі Window батырмасын шертеміз, ашылатын Create a Window терезесіндегі Create a Window named өрісіне main сөзін енгізу керек. OK батырмасын шерту нәтижесінде Window Properties шығатын терезеден general парағындағы Title bar text өрісіне құрылатын анықтамалық жүйенің негізгі терезесінің тақырыбын енгіземіз. Window Properties Windows диалогтық терезесіндегі Position парағын қолдана отырып анықтамалық жүйе терезесінің орналасуы мен өлшемін беруге болады. Position парағындағы Auto-Sizer батырмасын шерткеннен кейін Help Window Auto-Sizer терезесі ашылып, оның орналасуы мен өлшемі Position парағындағы өрістермен анықталады. ОК батырмасын шерткеннен кейін Help Window Auto-Sizer терезесінің өлшемі мен координаттары Position парағындағы өрістерге жазылады. Color парағын қолдана отырып анықтама бөліміндегі тақырып аймағының (Noscrolling area color) түсін және анықтама мәтін аймағының (Topic area color) түсін беруге болады. Ол үшін сәйкесті change батырмасын шертіп және түс стандартты терезесінен керекті түсті таңдау. Тапсырма: Анықтама бөлімінің идентификаторларына сандық мәндерді тағайындап, дайын болған жобаны компиляциялау керек. 1. Анықтамалық жүйенің жоба терезесінен МАР батырмасын басыңыз, нәтижесінде МАР диалогтық терезесі ашылады. 2. Осы терезе ADD батырмасын шертіңіз және ADD MAP ENTRY ашылған диалогтық терезесі Topic Id өрісіне анықтама бөлімінің идентификаторын, ал Mapped Numeric Value өрісіне идентификаторға сәйкес сандық мәнді енгізу керек. Comment өрісіне идентификатор сәйкес келетін анықтамалық жүйенің бөлім атауын-түсіндірмесін енгізуге болады. Жоғарыдағы суретте бөлім идентификаторына сандық мәндер тағайындау және анықтамалық жүйенің негізгі терезесінің мінездемесін орнату, RTF файлын қосқаннан кейінгі анықтамалық жүйе жобасының терезесі келтірілген. 3. Жобаны компиляциялау. Жоба файлы дайын болғаннан кейін оны компиляциялауға болады. Компиляцияны орындау үшін жоба терезесіндегі Save and Compile батырмасын шерту керек. Бірақ та ең алдымен анықтамалық жүйе жобасының компиляциясын меню жолындағы File => Compile командасы орындағаннан кейін Compile a Help File диалогтық терезесін ашамыз. 4. Бұл терезе Automatically display help file in winhelp when done жалаушасын орнатып, Compile батырмасын басу керек. Компиляция аяқталғаннан кейін экранда комипиляция нәтижесі туралы ақпараттық хабарлама терезесі пайда болады. Егер де компиляция сәтті орындалса, құрылған анықтамалық жүйе терезесі шығады. Компилятормен құрылған анықтамалық жүйе жоба файлы орналасқан бумаға орналастырылады. 5. Анықтамалық ақпаратқа рұқсат алу үшін қосымшаның негізгі терезесінің helpfile құрылымының құрамында анықтамалық жүйе файлының атын, ал helpcontext құрылымының құрамында керекті бөлімнің сандық идентификаторы бар екенін тексеру керек. Анықтамалық жүйе идентификаторлары анықтамалық жүйе жобасының [MAP] файл бөлімінде жазылғанын еске түсіру керек. Қосымшаның анықтамалық жүйе файлын орындалатын программа файлы орналасқан бумаға орналастырған жөн. Форманың әр компонентіне өзінің анықтама бөлімін беруге болады, мысалы, енгізу өрісіне. Анықтама бөлімі пайда болып, егер оның фокусы компонент үстінде орналасса және қолданушы F1 пернесін басса, онда осы компоненттің құрылымы мәнімен анықталады. Егер helpcontext құрылымының басқа элементінің мәні 0-ге тең болса, онда F1 пернесін басқанда қосымша формасына берілген анықтама бөлімі пайда болады. Егер диалогтық терезеде Анықтама батырмасы болса, онда анықтамалық ақпарат басқаша шығады – батырма үшін onclick оқиғасының өңдеу процедурасы құрылады, бұл Winhelp функциясына өңдеу кезінде Windows help (winhelp 32.exe) программасын іске қосады. Winhelp функциясын шақырғанда параметрлер ретінде анықтамалық информацияны сұрайтын терезе идентификаторы, анықтамалық жүйенің файл аты; Windows және нақтылайтын параметр орындайтын іс-әрекетті анықтайтын константа көрсетіледі. Егер нақты анықтама бөлімін шығару керек болса, онда іс-әрекетті анықтайтын параметр ретінде help_context константасы қолданылады. Бұл жағдайда нақтылайтын параметр экранға шығарылатын анықтама бөлімін береді (запускает). Төменде мысал ретінде квадрат теңдеуді шешу программасының диалогтық терезесінің Справка батырмасы үшін onclick оқиғасын өңдеу процедурасы келтірілген. // Анықтама батырмасына шерту procedure Tform1. Button Click (Sender: Tobject); begin winhelp (form 1. Handle, ‘справка о программе.hlp’, help_context,1); end. №5 Практикалық жұмыс Мәліметтерді файлдан оқу және файлға жазу. Тест құру. Мақсаты: Delphi ортасында файлды қолдану. Тестілеу программасын құру. Теориялық мағлұмат: Delphi ортасында мәліметтерді компонентке тексттік файлдан оқуға және компоненттен тексттік файлға жазуға болады. Файлды сипаттау: < идентификатор > : textfile; f: textfile; assignfile(f,fname) - логикалық файлы физикалық файлмен байланыстырады; reset(f)- файлды оқуға ашады; rewrite(f)-файлды мәлімет жазуға ашады; readln(f,buf)- файл компонентінің мәнін buf айнымалысына оқиды; writeln(f,buf)- buf айнымалысының мәнін f файлына жазады; closefile(f)- файлды жабады. Мәліметтерді тексттік файлдан оқуға Loadfromfile(const FileName:string) және тексттік файлға жазуға Savetofile(const Filename:string) әдістері қолданылады. Тапсырма 1. Memo1 компонентіне тексттік файл мазмұнын шығаратын және оны редакциялап қайта сақтайтын программа жазыңыз. Есеп шешімі: A(3,3) бүтін сандар массивінің элементтерін Zad1.txt тексттік файлына сақтаңыз және оны Lab14 бумаңызда сақтаңыз. Формаға Memo1, button1, button2 компоненттерін орналастырамыз. Button1 компонентінің caption қасиетіне «файлдан оқу», Button2 компонентінің caption қасиетіне «файлға сақтау» деп жазыңыз. Memo1 көп жолды редакторына Zad1.txt тексттік файлының мазмұнын шығарамыз. Button1 компонентінің Onclick оқиғасын құрамыз. Коды: var Form1: TForm1; f:textfile; buf:string[80]; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin assignfile(f,'zad1.txt'); reset(f); while not eof(f) do begin readln(f,buf); Memo1.lines.Add(buf); end; Closefile(f); Memo1.ReadOnly:=false;{редакциялауға рұқсат береді } end; |