- •Тема 1. Поняття про об’єктно-орієнтоване програмування. Поняття про об’єктно-орієнтоване програмування
- •Інструмент прискореної розробки програм
- •Список файлів проекту.
- •Деякі важливі принципи візуального програмування.
- •Вікна інспектора об'єктів, форми, модуля.
- •Лабораторна робота №1 «Робота в середовищі Delphi»
- •Тема 2. Основи об’єктно-орієнтованого програмування.
- •Лабораторна робота №2 «Створення типового вікна Windows-додатку. Властивості об’єктів форми.»
- •Теоретичні відомості:
- •I. Властивості об’єкту Форма.
- •Теоретичні питання:
- •Тема 3. Особливості ооп: основні концепції
- •Лабораторна робота №3 Робота з формою та компонентами Panel, Label, Edit, Button.
- •Лабораторна робота №4 Робота над проектом «Альбом картинок» (компонент Image вкладки Additional)
- •Тема 4. Структура програми Структура програми складається з:
- •Структура проекту
- •Структура модуля
- •Елементи програми
- •Елементи мови Алфавіт
- •Лексеми
- •Теоретичні питання
- •Лабораторна робота №5 Робота над проектом «Текстовий редактор»
- •Тема 5. Типи даних. Введення та виведення числових даних. Функції перетворення. Математичні функції
- •Прості типи
- •Порядкові типи
- •Цілі типи
- •Введення та виведення числових даних
- •Допомога 1.
- •Допомога 2.
- •Лабораторна робота №6. «Створення програм лінійної структури. Створення програми «Калькулятор»
- •В аріант завдання для вибору:
- •Тема 6. Оператори мови Delphi
- •Лабораторна робота №7 Створення найпростішого Windows-Додатка в Delphi, з використанням умовного оператора та оператора вибору.
- •1 Спосіб розв’язку квадратного рівняння
- •2 Спосіб розв’язання квадратного рівняння
- •Створити додатки за вказаним варіантом та записати блок-схему алгоритму:
- •Лабораторна робота № 8 «Створення програм з використанням операторів циклів»
- •Лабораторна робота № 9 «Розробка графічного інтерфейсу програми. Основні керуючі елементи.»
- •1. Програмування об’єкту – перемикач (tRadioButton).
- •Програмування об’єкту – прапорець (tCheckBox).
- •Тема 7. Масиви
- •Лабораторна робота № 10 «Структуровані типи даних»
- •Тема 8. Робота з файлами
- •Лабораторна робота №11 «Файлові типи даних»
- •Тема 9. Допоміжні алгоритми
- •Лабораторна робота № 12 «Створення програм з використанням процедур та функцій»
- •Тема 10. Работа з графікою та мультимедіа
- •Реалізація мультимедійних технологій. Відтворення відеокліпів
- •Внимание!
- •Лабораторна робота № 13 «Створення проекту «Побудова графіка функцій»»
- •Тема 11. Створення анімації в Delphi
- •Лабораторна робота № 14 «Створення проекту «Графічний конструктор»»
- •Лабораторна робота № 15 Створення багатовіконного проекту «Тест з географії»
- •Форма «Тестування» — модуль f_Test
- •Форма «Результат» — модуль fRes
- •Форма «Домопога» — модуль fInstr unit f__lnstr;
- •Тема 12. Організація роботи з таблицями та базами даних. Лабораторна робота №16. Розробка проекту «Рейтинг країн за результатами олімпійських змагань»
- •Лабораторна робота № 17 Створення проекту «Довідник по країнах»
- •Лабораторна робота № 18 Створення проекту «Телефонна книга»
- •Лабораторна робота № 19 Створення проекту «Довідник по тваринах»
- •Лабораторна робота № 20 Створення довідкової системи
- •Хід роботи
Тема 8. Робота з файлами
Копіювання файлів
Для копіювання файлів застосовується функція CopyFile. Формат її такий:
CopyFile(вхідний _файл, вихідний _файл, прапорець_перезапису); де: вхідний _файл – повний шлях і назва файлу, який копіюється; вихідний _файл – повний шлях і назва файлу, куди копіюється початковий файл; прапорець_перезапису – буде чи ні перезаписаний файл, якщо такий вже існує (true - не буде, false - буде перезаписаний).
CopyFile є функцією, яка повертає прапор успішною чи ні операції копіювання.
Наприклад, наступний рядок:
if not CopyFile('c:\command.com','c:\1.com',true) then ShowMessage('Помилка копіювання'); скопіює файл command.com у файл 1.com тільки в тому випадку, якщо останнього немає, інакше видаватиметься повідомлення про помилку копіювання.
Переміщення файлів
Для переміщення файлів застосовується функція MoveFile. Вона має наступний формат: MoveFile(вхідний _файл, вихідний _файл);
Її параметри аналогічні вищерозглянутій команді за винятком відсутності прапора перезапису.
Приклад:
if not MoveFile('c:\1.com','c:\2.com') then ShowMessage('Помилка переміщення');
Перейменування файлів
Функція RenameFile
if not RenameFile('c:\2.com','c:\3.com') then ShowMessage('Помилка перейменування');
У всіх вищесказаних командах параметри початкового і кінцевого файлу має тип PChar. Це рядковий тип з нулем, що завершується. У таку змінну можна занести рядок дуже великої довжини. Її розмір обмежується наявністю нульового байта в кінці. Теоретично така змінна може мати нескінченний розмір. На практиці вона обмежується розмірами пам'яті, що виділяється, для програми.
Перетворення звичайної строкової змінної, типу String в PChar проводиться функцією:
PChar(рядкова змінна). При цьому, для команд файлових операцій можливі об'єднання рядків. Наприклад:
procedure TForm1.Button1Click(Sender: TObject);
Var InDir,OutDir:String; // оголошення рядкових змінних
begin
InDir:='c:\1\'; // каталог початкових файлів
OutDir:='c:\2\'; // каталог записуваних файлів
CopyFile(PChar(InDir+'1.txt'),PChar(OutDir+'1.txt'),false);
CopyFile(PChar(InDir+'2.txt'),PChar(OutDir+'2.txt'),false);
end;
Тут в наявності операція з'єднання двох рядкових змінних. У результаті цієї процедури буде копіювання файлів c:\1\1.txt і c:\1\2.txt у каталог c:\2. Файли копіюються під тими ж іменами.
Видалення файлів
Функція DeleteFile
if not DeleteFile('c:\3.com') then ShowMessage('Помилка видалення');
Робота з текстовими файлами. Читання з текстового файлу
Процес завантаження і запису текстового файлу за допомогою компоненти Memo робився таким чином:
Memo1.Lines.LoadFromFile(Імя_файла); // завантаження
Memo1.Lines.SaveToFile(Імя_файла); // збереження
Все це завдяки властивості Lines, в якій зберігаються рядки. Але на практиці іноді необхідно прочитати тільки певний рядок або зробити операцію додавання рядка у вже існуючий файл.
Приклад обробки текстового файлу
procedureTForm1.Button1Click(Sender: TObject);
Var f:TextFile; // оголошення файловій змінній
st:String; // рядкова змінна
begin
AssignFile(f,'c:\1.txt'); // прив'язка назви файлу до файлової змінної
{$I-} // відключення контролю помилок введення-виводу
Reset(f); // відкриття файлу для читання
{$I+} // включення контролю помилок введення-виводу
If IOResult<>0 then // якщо є помилка відкриття, то
begin
ShowMessage('Помилка відкриття файлу C:\1.TXT');
Exit; // вихід з процедури при помилці відкриття файлу
end;
While not EOF(f) do // поки не кінець файлу робити цикл:
begin
ReadLn(f,st); // читати з файлу рядок
ShowMessage(st); // виводити рядок користувачеві
end;
CloseFile(f); // закрити файл
end;
Команда AssignFile здійснює прив'язку рядка шляху файлу до файлової змінної. Всі подальші операції з файловою змінною автоматично здійснюються з вказаним файлом. Для уникнення плутанин, вказуйте повний шлях до файлу.
{$I-} і {$I+} є директивами компілятору, що в цьому місці відповідно слід відключити і включити контроль помилок введення-виводу. В даному випадку при невдалій спробі відкриття файлу c:\1.txt (файл відсутній або відкритий для запису іншою програмою) наша програма не видасть аварійної помилки і продовжить виконання даної процедури. Ця властивість корисна для обробки всіх можливих випадків в роботі програми.
IOResult – змінна, яка зберігає в собі код помилки останньої операції введення-виводу. Якщо вона дорівнює нулю, то остання операція була успішно виконана.
EOF(Файл) – функція, що повертає ознаку кінця файлу. Тобто вона показує, досягнутий чи ні кінець відкритого файлу.
ReadLn(Файл, Змінна) – процедура прочитування змінної з файлу. На відміну від команди Read проводить прочитування рядка з символом перекладу рядка, що завершується, під кодами 13 і 10 (клавіша Enter).
CloseFile(Файл) – процедура закриття раніше відкритого файлу.
Робота з текстовими файлами. Запис в текстовий файл
Розглянемо приклад:
procedure TForm1.Button1Click(Sender: TObject);
Var f:TextFile; // покажчик на текстовий файл
begin
AssignFile(f,'c:\1.txt'); // прив'язка назви до змінної
{$I-}
Append(f); // відкрити файл для додавання
if IOResult<>0 then // якщо помилка відкриття (напр. файлу немає)
begin {$I-}
Rewrite(f); // створити новий файл
{$I+}
if IOResult<>0 then // помилка створення файлу
begin
ShowMessage('Помилка створення файлу C:\1.TXT');
Exit; end; end;
WriteLn(f,'Привет'); // запис у файл рядка з символами перекладу рядка
CloseFile(f); end; // закрити файл
Процедура Append(Файл) відкриває файл для запису і встановлює покажчик запису в кінець файлу, тобто всі рядки, що додаються до файлу, будуть записані в кінець файлу.
У нашому випадку на самому початку файлу 1.txt може не опинитися на диску, тому команда відкриття файлу для додавання викличе помилку. В цьому випадку спрацьовує наш власний контроль помилок і виконується команда створення файлу.
Запис і читання з файлу не текстових даних
Приклад, в якому програма при виході зберігає свої розміри і положення вікна на екрані у файл і при подальшому запуску відновлює стан, який був при виході. Програма складається з двох процедур OnShow і OnClose для вікна Form1 програми.
procedure TForm1.FormShow(Sender: TObject);
Var
f:file of Integer; // файлова змінна, тип integer
i:Integer; // цілочисленна змінна
begin
AssignFile(f,'pos.ini'); {$I-}
Reset(f); {$I+}
if IOResult<>0 then Exit;
Read(f,i); //зчитати з файлу значення
Form1.Top:=i; // верхнє положення вікна
Read(f,i);
Form1.Left:=i; // ліве положення вікна
Read(f,i);
Form1.Width:=i; // ширина вікна
Read(f,i);
Form1.Height:=i; // висота вікна
CloseFile(f); end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
Var f:file of Integer;
begin
AssignFile(f,'pos.ini'); {$I-}
Rewrite(f); {$I+}
if IOResult<>0 then Exit;
Write(f,Form1.Top);
Write(f,Form1.Left);
Write(f,Form1.Width);
Write(f,Form1.Height);
CloseFile(f); end;
Ім'я файлу, в якому зберігаємо змінні стани вікна, вказані без шляху, просто pos.ini.
В цьому випадку файл створюється і відкривається в поточному каталозі. За умовчанням це каталог, з якого була запущена програма.
Робота з файлами Приклад «Вгадай число!» Програма використовує файл rezlt.txt для фіксування часу гри під час кожного запуску. Вікно рейтингу гри може показати наявні результати і, за бажанням користувача, видалити рядки, починаючи з 4-й позиції. Запис у файл проводиться з урахуванням сортування результатів за часом у порядку зростання.
Лістинг програми. Модуль unit1.pas unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, Mask, ExtCtrls; type TForm1 = class (TForm) Memo1: TMemo; bbOk: TBitBtn; bbCls: TBitBtn; Label1: TLabel; Ed: TEdit; Label2: TLabel; Timer1: TTimer; procedure FormCreate (Sender: TObject); procedure FormActivate (Sender: TObject); procedure bbOkClick (Sender: TObject); procedure Timer1Timer (Sender: TObject); private (Private declarations) x: integer; t: LongInt; s: string; public (Public declarations) max: integer; // значення передається другому формою додатка end; var Form1: TForm1; implementation uses Unit2; ($ R *. dfm) var f: TextFile; // оголошуємо файлову змінну nm, tm: Array [1 .. 1000] of String; // робочі масиви для зберігання інформації з файлу i: integer; procedure TForm1.FormCreate (Sender: TObject); begin Form1.Color: = 10342143; // задаємо довільний колір формі t: = 0; repeat s: = InputBox ( 'реєстрація', 'Введіть ім'я',''); if s ='' then ShowMessage ('зареєструйтеся'); until s <>''; Timer1.Enabled: = false; t: = 0; Label2.Caption: = s +','; Label1.Caption: = 'Введіть число:'; Randomize;
x: = Random (21);
AssignFile (f,'rezlt.txt'); //пов'язуємо файлову змінну Delphi з фізичним файлом Rezlt.txt розташов. в каталозі проекту reset (f); // відкриваємо файл для читання max: = 0; // Підраховуємо кількість рядків у файлі while not EoF (f) do begin readln (f); inc (max); end; CloseFile (f); // Переводимо загальна кількість рядків у файлі на число попередніх гравців на кожного по 2 max: = max div 2; запису: ім'я та час гри end;
procedure TForm1.FormActivate (Sender: TObject); begin Ed.SetFocus; end; procedure TForm1.bbOkClick (Sender: TObject); var msg: TModalResult; y: integer; t1, k: integer; begin Timer1.Enabled: = True; // включаємо таймер (Палітра компонентів / System / Timer) if Ed.Text ='' then begin msg: = MessageDlg ( 'немає введення числа!', mtError, [mbCancel], 0); Ed.SetFocus; end; y: = StrToInt (Trim (Ed.Text)); Ed.Text :=''; Ed.SetFocus; if y <x then Memo1.Lines.Add('x> '+ IntToStr (y)); if y> x then Memo1.Lines.Add ( 'x <' + IntToStr (y)); if y = x then // Користувач вгадав число begin Timer1.Enabled: = false; / / зупиняємо таймер memo1.Lines.Add (Ви вгадали! Час гри: '+ IntToStr (t) +' сек. '); memo1.Lines.Add ( 'x =' + IntToStr (y)); AssignFile (f, 'rezlt.txt'); // Зчитуємо дані з файлу попередніх результатів у робочі масиви reset (f); for i: = 1 to max do begin readln (f, nm [i]); readln (f, tm [i]); end; CloseFile (f); i: = 1; // Вставляємо новий результат у відповідні масиви, з урахуванням сортування t1: = StrToInt (tm [1]); while (t> t1) and (i <= max) do begin inc (i); if i <= max then t1: = StrToInt (tm [i]); end; max: = max 1; k: = i; for i: = max downto k +1 do begin nm [i]: = nm [i-1]; tm [i]: = tm [i-1]; end; nm [k]: = s; tm [k]: = IntToStr (t);
AssignFile (f, 'rezlt.txt'); // Перезаписує файл результатів rewrite (f); // відкриваємо файл на запис for i: = 1 to max do begin writeln (f, nm [i]); writeln (f, tm [i]); end; CloseFile (f); msg: = MessageDlg (s + ", ви вгадали! '+ # 10 # 13 'X =' + IntTostr (y) + # 10 # 13'Час ігри: '+ IntToStr (t) +' сек. '+ # 10 # 13'Хочите подивитися рейтинг гри? ', mtInformation, [mbOk, mbNo], 0); if msg = mrNo then Close; if msg = mrOk then form2.Show; end; end; // Команди процедури виконується періодично з частотою властивості Interval таймера при значенні властивості Interval = 1000 (задаємо 1 раз в секунду) procedure TForm1.Timer1Timer (Sender: TObject); begin inc (t); end; end. TTimer (таймер) - компонент Delphi, що відслідковує задані інтервали системного часу. Розташована на вкладці System Палітри компонентів. Властивість Properties / Interval задає проміжок тимчасового відліку в мілісекундах - тік таймера. За замовчуванням відлік таймера: Interval дорівнює 1000 (1 секунда) Лістинг програми. Модуль unit2.pas - вікно результатів гри unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm2 = class (TForm) m1: TMemo; m4: TMemo; m2: TMemo; m5: TMemo; m3: TMemo; m6: TMemo; Label1: TLabel; Label2: TLabel; Button1: TButton; Button2: TButton; Label3: TLabel; procedure FormActivate (Sender: TObject); procedure Button1Click (Sender: TObject); procedure Button2Click (Sender: TObject); private (Private declarations) public (Public declarations) end; var Form2: TForm2; implementation uses Unit1; ($ R *. dfm) var f: TextFile; nm, tm: Array [1 .. 1000] of String; mx, i: integer; procedure TForm2.FormActivate (Sender: TObject); begin Form2.Color: = 16702203; // фарбуємо форму в довільний колір button1.SetFocus; mx: = Form1.max; // передаємо змінну з першої форми AssignFile (f, 'rezlt.txt'); reset (f); // зчитуємо з файлу перші три місця і записуємо в Memo for i: = 1 to 3 do begin m1.Lines.Add (IntToStr (i)); readln (f, nm [i]); m2.Lines.Add (nm [i]); readln (f, tm [i]); m3.Lines.Add (tm [i]); end; // Запис в Memo інших результатів з файлу for i: = 4 to mx do begin m4.Lines.Add (IntToStr (i)); readln (f, nm [i]); m5.Lines.Add (nm [i]); readln (f, tm [i]); m6.Lines.Add (tm [i]); end; CloseFile (f); // закриваємо файл end; procedure TForm2.Button1Click (Sender: TObject); begin Form1.Close; / / закриття Form1 призводить до закриття всього програми end; procedure TForm2.Button2Click (Sender: TObject); // Очищення записів, починаючи з 4-й позиції begin for i: = 4 to mx do
begin nm [i ]:=''; tm [i ]:=''; end;
m4.Clear; m5.Clear; m6.Clear; AssignFile (f, 'rezlt.txt'); rewrite (f); for i: = 1 to 3 do begin writeln (f, nm [i]); writeln (f, tm [i]); end; CloseFile (f); end; end.