Програмування на Delphi

Що дає нам використання функцій API? У першу чергу мінімальні розміри програми, що вийшла. Це може виявитися важливим при написанні таких програм, як інсталятори, створення пачтів або при роботі з графікою. Програми невеликих розмірів зручно розповсюджувати через інтернет. Також варто відзначити, що програми, написані на Win API, працюють швидше, ніж їхні "побратими", написані з використанням класів об'єктно-орієнтованих мов.

Перше знайомство з Win API почнемо із того, що створимо вікно. Просто порожнє вікно, яке надалі служитиме нам шаблоном. Поступово нарощуючи цей шаблон, ми створюватимемо більш складні програми.

Отже, почнемо. Запускаємо Delphi та створюємо новий проект. Нам необхідно забрати з проекту форму, для цього робимо таке. У меню Project вибираємо Remove from Project. у вікні виділяємо рядок Unit1 і натискаємо кнопку OK. Delphi попросить підтвердити, чи хочемо ми видалити Unit1 з проекту, дайте відповідь ствердно. Тепер потрібно відкрити файл проекту. Знову ліземо в меню Project і вибираємо View Source. Останній крок потрібно видалити кілька зайвих рядків. Наведіть файл проекту до такого вигляду.

Так, це все, що має залишитися! Перед нами "чисте полотно" і ми починаємо творити. Як вже згадувалося вище, API функції розміщуються в динамічних бібліотеках, і щоб викликати їх звідти, нам необхідно їх описати. На щастя для нас, Delphi вже є модулі, в яких описані багато API функції, нам потрібно просто згадати їх у розділі uses.

Тепер опишемо віконну процедуру.

Ця процедура займається обробкою повідомлень, отриманих нашим додатком, і поки що виглядає скромно. Коли програму намагаються закрити, вона отримує повідомлення WM_DESTROY. Отримавши цеповідомлення ми закриваємо програму. Процедура PostQuitMessage повідомляє Windows, що потік, пов'язаний з нашою програмою, зробив запит на закриття. Далі все зрозуміло. Отримавши будь-яке інше повідомлення, ми викликаємо віконну процедуру, задану за промовчанням, щоб забезпечити обробку повідомлення за промовчанням. Іншими словами, ця функція гарантує, що кожне повідомлення буде опрацьовано. DefWindowProc викликається з тими самими параметрами, отриманими віконною процедурою.

Невеликий відступ. Дія процедури PostQuitMessage аналогічна до повідомлення WM_QUIT, і описану вище процедуру можна було б написати так.

Підготовка закінчена, і тепер нам час створювати вікно. Послідовність дій буде така: описати клас об'єкта, що створюється, зареєструвати цей клас в системі, створити і показати вікно. Приступаємо.

Забігаючи трохи вперед, звертаю вашу увагу на те, що другий параметр функції CreateWindowEx має також значення, що і поле lpszClassName описуваного об'єкта. Вони мають бути однаковими, тому я використовую константу, створену раніше. Це не обов'язково, просто мені так зручніше.

Використовуючи RegisterClassEx, реєструємо описаний клас у системі. Створюємо вікно. Перший параметр CreateWindowEx – розширений стиль вікна. Далі йдуть ім'я класу та заголовок вікна. Потім описується стиль вікна. Якщо подивитися опис прапора WS_OVERLAPPEDWINDOW (воно наведено нижче), ми побачимо, що це комбінація кількох прапорів. Інакше кажучи, ми можемо визначати стиль вікна, використовуючи різні комбінації, наприклад WS_OVERLAPPED or WS_SYSMENU or WS_MINIMIZEBOX. Раджу вам поекспериментувати із цим параметром. Наступні 4 параметри відповідають за позицію та розмір вікна. Потім йде дескриптор вікна батька, його в нас немає, тожставимо 0. Меню у нас поки що теж немає, так що далі теж ставимо 0. Далі йдуть покажчик на початок даних та покажчик на структуру CREATESTRUCT. Створивши вікно, скористаємося процедурою ShowWindow, щоб показати.

Закінчується циклом обробки повідомлень. Функція TranslateMessage транслює повідомлення віртуальних клавіш символьними повідомленнями. Функція DispatchMessage посилає повідомлення віконної процедури. Цикл обробки повідомлень може змінюватися в залежності від ситуації, але ці дві процедури присутні завжди.

Наша мінімальна програма готова. Наступного разу ми вдосконалимо її, додамо меню та елементи керування, а поки що це все. До швидкої зустрічі та удачі у програмуванні.