Ноу Інти, лекція, ООП - об'єктно-орієнтоване програмування

Дуже часто буває, що в різних компонентах ми вказуємо в інспекторові об'єктів початкові значення, як би за замовчуванням, а потім під час роботи програми міняємо їх на потрібні. У програмі з втікає кнопкою, ми задали кнопці початкове положення, а потім, під час роботи програми, ми змінювали властивості Left і Top. А коли користувач вводив текст в компонент Edit. програмно змінювалося його властивість Text.

Отже, ми отримали більш-менш оформлений об'єкт людини. Ми можемо накидати цілу форму таких об'єктів, використовуючи компонент ТЧел, і створити ціле місто Челов. І у кожного заповнити наведені в прикладах властивості, так що всі об'єкти будуть різними, хоча і походять від одного загального компонента.

Повернемося до реальних компонентів. Візьмемо компонент TEdit. Якщо ми кинемо на форму такої компонент. то Delphi автоматично встановить властивість Name рівним рядку Edit1. Надалі ми будемо звертатися до цього об'єкта з цього імені. Якщо ж ми в інспектор об'єктів змінимо властивість Name з Edit1 на, скажімо, MyEdit. то звертатися доведеться вже не до Edit1. а до MyEdit. Припустимо, ми змінили цю властивість. Не забуваємо, що властивість Name - змінного типу рядок.

Далі, в компоненті TEdit нас цікавлять ще кілька властивостей. Це властивості Left і Top. які мають цілий тип, і забезпечують положення компонента на формі. Властивість Left вказує в пікселях відстань від лівої межі форми до компонента, а властивість Top - таку ж відстань від верхньої межі.

Ще є властивості Width (ширина компонента) і Height (висота компонента). Це теж цілі типи, вони вказують значення в пікселях.

Також нас цікавить властивість Text. Це строкова змінна. вона вказує, який текст відображається в цьому компоненті. Ми можемо ввести в нього текст в інспектор об'єктів, і тоді при роботі програми він відразу ж буде відображатися в полі введення. Набагато частіше його залишають порожнім. У Інспектора об'єктів просто очищають це властивість, а програмно можна привласнити компоненту порожній рядок:

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

В даному прикладі ми привласнили строкової змінної s той текст, який в даний момент зберігався в поле вводу нашого компонента Edit.

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

Ми маємо можливість програмно змінити текст в цьому об'єкті, і в даному випадку будемо вказувати змінну - властивість Text:

Тепер наш об'єкт буде відображати рядок з новим текстом. Крім того, ми програмно можемо змінювати і інші властивості. Наприклад, властивість Left - положення від лівої межі форми. Ми можемо вказати:

Якщо ми вкажемо такий текст, наприклад, в процедурі обробки натиснення кнопки, то кожен раз, коли ми натискаємо на кнопку, об'єкт MyEdit буде зрушуватися вліво на 5 пікселів. Спробуйте самі! Створіть новий додаток. встановіть на форму компонент TEdit і кнопку. Якщо Ви не змінили властивість Name. то доведеться звертатися до об'єкта по імені, яке за замовчуванням присвоїла йому Delphi:

Звичайно, якщо Ви пишете не якусь небудь жартівливу програму, то міняти положення об'єктів не варто, навіть якщо у Вас є такі можливості. Крім того, Ви маєте можливість програмно змінити властивість Name у об'єкта, але це буде грубою помилкою - як тільки програма звернеться до цього об'єкта за старим імені, тут же відбудеться помилка виконання програми - вона просто не знайде цей об'єкт. Можете спробувати в даному прикладі, дописавши рядок:

Як тільки Ви натиснете кнопку в перший раз, об'єкт слухняно зміститься вліво, і відразу ж за цим поміняє ім'я. Але спробуйте натиснути кнопку ще раз, і програма відразу зависне - вона вже не бачить об'єкт з новим ім'ям, адже в коді обробки кнопки ми як і раніше звертаємося до об'єкту по старому імені, а об'єкта з таким ім'ям вже не існує!

Не хвилюйтеся, нічого страшного не сталося. Просто виберіть в меню команду Run - Program Reset. Це змусить програму достроково припинити виконання і закритися.

Не забувайте ще ось про що: не у всіх компонентів, які виводять текст на екран, є властивість строкового типу Text. Наприклад, у компонента TLabel такою властивістю є Caption. і якщо ми хочемо в інспекторові об'єктів вписати в об'єкт якийсь текст, вписувати його потрібно саме в властивість Caption. Точно також, Якщо ми бажаємо програмно змінити текст в об'єкті Label1. то робимо присвоєння нового тексту його властивості Caption:

Однак, є об'єкти і складніша. Візьмемо, наприклад, TMemo. У нього немає властивості Text в інспекторові об'єктів, однак це властивість є програмно. Змінна - властивість Text об'єкта Memo1 містить весь текст, всі рядки, які знаходяться в даний момент в компоненті. Однак набагато частіше застосовують властивість Lines. Це властивість вже не проста строкова змінна. а цілий масив рядків, де кожен елемент містить окремий рядок тексту. Можна сказати, що Lines - це об'єкт в об'єкті, який також має свої методи, тобто функції і процедури. Найчастіше використовують методи SaveToFile () і LoadFromFile (). які відповідно, зберігають текст в файл і читають текст з файлу. Властивість Lines має тип TStrings. тобто не просто рядок, а набір рядків.

Багато компонентів мають властивості такого типу. Наприклад, компонент TListBox має властивість Items. яке належить до того ж типу TStrings. отже, має такі ж методи, як і Lines у компонента TMemo. Це означає, що викликавши потрібний метод, ми можемо, наприклад, вважати текст з файлу і в Memo. і в ListBox:

Ви неодноразово будете зустрічатися з властивостями типу TStrings в різних компонентах. Це дуже потужний інструмент, і потрібно вчитися користуватися ним.

Події - це процедури, які виконуються щоразу, коли ця подія відбувається. Наприклад, подія OnChange компонента Edit відбувається всякий раз, коли змінюється текст в поле введення. Події знаходяться на вкладці Events Інспектора об'єктів. Якщо ми нічого не створимо, то при настанні цієї події нічого і не станеться. Однак, якщо ми двічі клацнемо мишею по цій події - створиться процедура обробки цієї події. І той програмний код, який ми введемо, буде виконуватися щоразу, коли ця подія відбувається.

Подія OnChange застосовують досить часто, коли потрібно перевірити чи правильні дані вводить користувач. Хороша новина - більшість подій (а також властивостей і методів), у більшості компонентів однакові. Наприклад, практично будь-який компонент для введення користувачем тексту має подія OnChange. Чи застосовуєте ви Edit або Memo. ця подія працює однаково.

Схожі статті