
- •Розділ 1. Об’єктно-орієнтоване програмування
- •Тема 1.1. Візуальне програмування.
- •Тема 1.2. Приклади та застосування інкапсуляції, успадкування, поліморфізму.
- •Тема 1.3. Бібліотека візуальних компонентів vcl та її базові класи.
- •1. Клас tWinControl.
- •2. Клас tСustomControl.
- •3. Клас tGraphicControl.
- •Тема 1.4. Обробка виняткових ситуацій.
- •1. Використовування виняткових ситуацій.
- •2. Протоколювання виняткових ситуацій.
- •3. Коди помилок у виняткових ситуаціях.
- •4. Виняткова ситуація eAbort. Функція Assert.
- •Розділ 2. Мова програмування Object Pascal.
- •Тема 2.1. Середовище Delphi.
- •Тема 2.2. Елементи мови Object Pascal.
- •1. Коментарі.
- •2. Логічні вирази.
- •Тема 2.3. Типи даних, процедури та функції.
- •1. Вказівники та динамічна пам'ять. Динамічна пам'ять
- •Вказівники
- •Виділення і звільнення динамічної пам'яті
- •Процедури і функції для роботи з динамічною пам'яттю
- •Тема 2.4. Управляючі структури Object Pascal.
- •Розділ 3. Програмування в середовищі Delphi.
- •Тема 3.1. Застосування списків. Способи запису/читання зі списків.
- •Є списком CheckBox елементів.
- •Тема 3.2. Масиви.
- •1. Пошук мінімального (максимального) елементу масиву.
- •2. Пошук в масиві заданого елементу.
- •Тема 3.3. Робота з файлами.
- •Тема 3.4. Типи даних визначені програмістом.
- •1. Показники.
- •2. Динамічні змінні.
- •Тема 3.5. Графічні програми.
- •1. Бітові образи.
- •2. Мультиплікація.
- •Властивості компоненту Timer
- •Тема 3.6. Приклади застосування анімацій у Delphi.
- •Тема 3.7. Рекурсія.
- •1. Крива Гільберта.
- •2. Пошук шляху.|колії|
- •Значення властивостей компоненту stringGrid1
- •3. Пошук найкоротшого шляху.|колії|
- •Тема 3.8. Компоненти для інтернету. Компонента tSocketConnection
- •Розділ 4. Бази даних.
- •Тема 4.1. Види баз даних. Структура та зв’язки між таблицями. Бази даних
- •Класифікація баз даних
- •Структура бази даних
- •Модель бази даних в Delphi
- •Тема 4.2. Модифікація структури таблиці в bde.
- •1. Зміна структури таблиці.
- •2. Встановлення перевірок правильності даних.
- •3. Завдання вторинних індексів.
- •Тема 4.3. Об’єкти відображення даних бази даних Delphi.
- •1. Класифікація компонентів відображення даних.
- •2. Елемент керування тdbGrid.
- •3. Компонент tdbEdit.
- •4. Компонент tdNavigator.
- •Тема 4.4. Обчислювальні поля і поля підстановки в Delphi.
- •1. Створення поля підстановки (поля синхронного перегляду).
- •2. Обчислювальні поля.
- •Тема 4.5. Компонента tdbEdit.
- •Тема 4.6. Переміщення по записам таблиці. Набір методів і властивостей tDataSet. Огляд
- •Клас tDataSet
- •Відкриття і закриття DataSet
- •Тема 4.7. Налаштування фільтрів.|
- •Тема 4.8. Приклади застосування пошуку.
- •Тема 4.9. Поєднання різних видів пошуку.
- •Тема 4.10. Типи даних та пошук в діапазоні.
- •Список літератури
2. Клас tСustomControl.
Клас TcustomControl призначений для створення на його основі нестандартних віконних елементів управління. Процес візуалізації в ньому спрощений за рахунок використовування спеціального класу Tcanvas, що інкапсулює канву.
Доступ до канви здійснюється через властивість
property Canvas: Tcanvas;
Малювання елемента управління здійснюється методом
procedure PaintWindowfDC: HDC); override;
після отримання повідомлення WM PAINT.
Можливості цього класу успадковували класи TPanel, TGroupBox, TStringGrid і т. д.
3. Клас tGraphicControl.
Клас TGraphicControl призначений для створення на його основі візуальних компонентів, які не одержують фокус в процесі виконання додатку. Оскільки безпосереднім предком класу є клас TControl, то нащадки TGraphicControl уміють реагувати на управляючі дії мишею.
Наочний приклад елемента управління, якому не потрібно одержувати фокус, – це компонент TLabel, призначений для відображення тексту, або компонент Timage, призначений для візуалізації зображень.
Для візуалізації елементів управління на основі цього класу використовується канва, інкапсульована в класі TCanvas.
Доступ до канви здійснюється через властивість
property Canvas: TCanvas;
Малювання елемента управління здійснюється методом
procedure PaintWindow(DC: HDC); override;
після отримання повідомлення WM PAINT.
Питання для самоконтролю:
Скільки класів лежить в основі різноманіття всіх класів?
Який клас лежить в основі ієрархії класів?
Яке призначення класу TWinControl?
Що забезпечує клас TCustomControl?
Який метод викликається при створенні віконного елемента управління?
Якою властивістю визначається зовнішній вигляд віконного елемента?
Як здійснюється доступ да канви?
Яким методом здійснюється малювання елемента управління?
Тема 1.4. Обробка виняткових ситуацій.
Використовування виняткових ситуацій.
Протоколювання виняткових ситуацій
Коди помилок у виняткових ситуаціях
Виняткова ситуація EAbort. Функція Assert.
1. Використовування виняткових ситуацій.
Якщо відбулася помилка і збуджена виняткова ситуація, то вона буде оброблятися по такому алгоритму:
1. Якщо ситуація виникла усередині блоку try..except, то там вона і буде оброблена. Якщо ІС "просунута" далі за допомогою оператора raise, а також якщо вона виникла в блоці try..finally, обробка продовжується.
2. Якщо програмістом визначений обробник події Application.onException, то він отримає управління. Обробник оголошений таким чином:
TExceptionEvent = procedure (Sender: TObject; E: Exception) object;
3. Якщо програміст ніяк не визначив реакцію на ІС, то буде викликаний стандартний метод showException, який повідомить про клас і місце виникнення виняткової ситуації.
Пункти 2 і 3 реалізуються в методі TApplication.HandleException. Власне, виглядають вони наступним чином:
if not (ExceptObject is EAbort) then
if Assigned(FOnException) then
FOnException(Sender, Exception(ExceptObject))
else
ShowExceptior. (Exception(ExceptObject));
Обробник onExceptiоn потрібен, якщо вимагається виконувати одну і ту ж дію в будь-якій винятковій ситуації, що виникла у вашому додатку. Наприклад, назвати себе, вказати координати для обігу або попередити, що це ще бета-версія.
program Project1;
uses
Forms
SysUtils //додано уручну – там описаний клас Exception Dialogs
Unitl in 'Unitl.pas' {Forml};
{$R *.RES}
type
TExceptClass = class
public
procedure GlobalExceptionHandler(Sender: TObject; E:Exception);
end;
procedure TExceptClass.GlobalExceptionHandler(Sender: TObject;
E:Exception);
begin
ShowMessage('Відбулася виняткова ситуація ' + E.ClassName
+ ': ' + E.Message + #13#10'З’єднайтесь з розробниками по тел. 222-33-44');
end;
begin
with TExceptClass.Create do
begin
Application.OnException := GlobalExceptionHandler;
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
Free;
end;
end.
Тут клас TExceptClass створюється тільки для того, щоб бути носієм методу ClobalException. Обробник будь-якої події – метод, і він повинен відноситися до якого-небудь об'єкту. Оскільки він тут потрібен ще до ініціалізації форм додатку і інших його складових частин, то і об'єкт класу TExceptClass створюється першим. Тепер користувач знає, що дякувати за несподіванки потрібно по вказаному в повідомленні про помилку телефону розробників.
Є і більш простий спосіб привласнити обробник події Application.OnException. Для цього помістите на форму компонент типу TApplicationEvents (сторінка Additional Палітри компонентів), роль якого - надання "візуального" доступу до властивостей невізуального об'єкту TApplication. Серед його подій є і OnException.
Але як "помацати" переданий при винятковій ситуації об'єкт? Звичайна конструкція on EExceptionType do... указує на клас об'єкту, але не на конкретний екземпляр. Якщо під час обробки потрібний доступ до властивостей цього екземпляра, його потрібно пойменувати усередині on..do, вказавши перед ім'ям класу якийсь ідентифікатор:
on EZD: EZeroDivide do EZD.Message := 'Ділення на нуль!';
Тут виникле виключення виступає під ім'ям EZD. Можна змінити його властивості і відправити далі:
var APtr : Pointer;
Forml : TForm;
try
APtr := Forml;
with TObject(APtr) as TBitmap do;
except
on EZD: EInvalidCast do EZD.Message :=. EZD.Message + 'хa-хa!';
Raise;{ тепер обробка буде зроблена у іншому місці }
end;
Але як пойменувати виняткову ситуацію, що не потрапила ні в одну з директив on..do? Або, можливо, у вашому обробнику взагалі немає on. .do, а попрацювати з об'єктом треба? Описаний вище шлях тут не підходить. Для цих випадків є пара системних функцій ExceptObject і ExceptAddr. На жаль, ці функції ініціалізувалися тільки усередині конструкції try..except; в try..finally працювати з об’єктом – винятковою ситуацією не представляється можливим.