Параметри, передані обробникам

Конспект уроку з основ інформатики в 10 класі

 

Тема: Створення програмного коду. Поняття події. Процедури опрацювання подій. Оголошення процедур. Компіляція програм..

Мета: Ознайомити учнів з поняттям події та її обробки. Формувати навички роботи в середовищі програмування Delphi з оголошенням процедур. Виховувати самостійність та відповідальність.

Тип уроку: комбінований.

Обладнання: персональний комп’ютер, середовище програмування Borland Delphi7.

 

Хід уроку

I. Організаційний момент.

II. Актуалізація опорних знань.

1. Назвіть відомі вам текстові поля і мітки. Де вони знаходяться?

2. Як можна змінювати властивості об’єктів в ході виконання програми?

3. Як додати текст в компоненти Label, Edit, Memo?

4. Яка різниця між полями і мітками?

III. Мотивація навчальної діяльності учнів, оголошення теми, мети уроку.

IV. Вивчення нового матеріалу.

Події в програмуванні, як і події реального світу - це будь-які операції, що відбуваються у встановлений час. Встановлений час - це не конкретний час з точки зору годин, це просто відгуки на якісь інші дії та зміни. Події властиві об'єктно-орієнтованому програмуванню і є однією з важливих рис операційної системи Windows. Робота програм з візуальним (графічним) інтерфейсом немислима без подій. Delphi надає повний доступ для роботи з подіями і трохи спрощує програмування обробників подій. Метою уроку є ознайомлення з найбільш часто використовуваними подіями, а також з прийомами написання обробників для них.

Де знайти події?

В одному з перших уроків було згадано, що кожен об'єкт має властивості і події і все це доступно через Object Inspector. Список усіх подій, які підтримує об'єкт, знаходиться на вкладці Events Інспектора Об'єктів. Формат даних аналогічний закладці з властивостями: зліва вказується назва події, а праворуч - обробник, який привласнений події. Зверніть увагу, що всім подіям зазвичай даються назви, що починаються зі слова "On" (англ. - "на"). Це хороший тон і досить усталена традиція. Такі назви дозволяють швидко відрізнити події від властивостей. За аналогією з властивостями, подіям дають цілком логічні імена. Побачивши незнайому подію, в 95% випадків тільки по назві можна здогадатися, коли подія відбувається. Якщо ж подія не зовсім зрозуміла, або хочеться більше дізнатися про неї, можна скористатися вбудованою довідковою системою Delphi. Для цього потрібно встановити курсор на рядок з цікавою подією і просто натиснути F1 - довідкова система відкриється на сторінці з інформацією про обрану подію (якщо, звичайно, воно описано в довідці). Для всіх стандартних компонент в довідковій системі інформації предостатньо. Якщо використовується який-небудь сторонній компонент, то опис слід шукати в документації, яка йде замість з самим компонентом. Деякі компоненти (в основному - великі пакети з великого числа компонент) самостійно інтегрують свою документацію в довідкову систему Delphi при установці.

 

Автоматичне створення обробників подій

Обробник події - це набір команд, які виконуються при виклику події. Створювати обробники можна двома способами: прямо в середовищі Delphi - автоматично, і програмним шляхом, тобто під час виконання програми. Створити обробник дуже просто: достатньо двічі клацнути по полю поруч із назвою події в Інспекторі Об'єктів і відкриється редактор коду з заготовкою обробника. Залишається лише написати потрібний код між begin і end (курсор вже буде стояти у тому місці) і обробник готовий. Як бачите, все досить просто і швидко. Однак у попередніх уроках Ви бачили, що обробник створювався і просто при подвійному клацанні по об'єкту на формі ... Так, дійсно, в цьому випадку теж створюється обробник. Але цей спосіб нічим не відрізняється від тільки що описаного, просто для кожного об'єкта задано подія за замовчуванням, для якого створюється обробник при подвійному натисканні. Як правило, це самі використовувані події. Наприклад, для кнопки це звичайно ж буде клацання по ній. Для нестандартних компонент, якщо подія за замовчуванням не позначено, береться перше-ліпше з усіх, а якщо подія всього одна, то вибір тим більше очевидний.

Після того, як обробник створений, на вкладці Events поряд з назвою події з'явиться назва обробника для нього. Ця назва також може бути вписана і вручну або вибрана зі списку, в якому містяться назви всіх обробників. Імена обробникам даються також не випадково: береться ім'я об'єкта і до нього дописується назва події. Наприклад, якщо є кнопка Button1 і її подія OnClick, то обробник отримає назву Button1Click. Знов-таки, по імені оброблювача можна здогадатися про подію, до якої він відноситься.

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

Однак, зворотного заборони не існує: один обробник може бути прив'язаний до різних подій об'єкта і навіть до різних об'єктів. Для цього потрібно в рядку цікавить події в об'єкта вибрати ім'я обробника зі списку.

 

Обробник з точки зору програмного коду

Тепер подивимося, що з себе представляє обробник в програмному коді. А представляє він собою процедуру, тобто набір команд і є міні-програмою.

Оброблювач містить розділ реалізації - він розташований між begin і end. У цьому блоці, як Ви вже знаєте, слід писати код, який і буде виконаний.

Самий верхній рядок обробника - це його заголовок. Елементи заголовка:

- Ключове слово procedure (процедура);

- Ім'я об'єкта, якому належить дана процедура (в даному випадку вона належить формі - тому TForm1);

- Ім'я обробника;

- Передані параметри.

Між ім'ям об'єктам (TForm1) і ім'ям обробника (Button1Click) знаходиться крапка - це символ вказівки на те, що Button1Click належить TForm1. При роботі з будь-якими структурами крапка вказує на приналежність елемента цій структурі.

Розділ описів тут теж присутній, просто він є порожнім. Як і належить, розташований він між заголовком обробника і розділом реалізації, тобто між першим і другим рядком. При необхідності оголошення змінних або констант цей розділ описується звичайним чином - додавання ключового слово var або const і описом змінних або констант.

Приклад обробки подій № 1

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

Наша мета: на формі буде 3 кнопки і по натисканню на кожну з них повинно з'являтися повідомлення про те, яка кнопка натиснута.

Перший спосіб: для кожної кнопки створюємо обробник OnClick і пишемо код для виведення повідомлення (ShowMessage ('текст') - виводить віконце з кнопкою ОК і зазначеним текстом):

 

procedure TForm1.Button1Click(Sender: TObject);

Begin

ShowMessage('Нажата Button1')

end;

procedure TForm1.Button2Click(Sender: TObject);

Begin

ShowMessage('Нажата Button2')

end;

procedure TForm1.Button3Click(Sender: TObject);

Begin

ShowMessage('Нажата Button3')

end;

Звичайно, працювати буде ... Але справжні програмісти так не роблять ... Судіть самі: а якби було 100 кнопок - що тоді? 100 обробників? Звичайно ні!

Можна створити один обробник відразу для всіх кнопок. Вище було сказано, що це можна зробити, якщо вибрати в Інспекторі Об'єктів обробник події зі списку ... Але у випадку, якщо 100 кнопок, такий спосіб теж непридатний - піде багато часу. Є ще один: якщо вибрати на формі відразу кілька об'єктів, то в Інспектора Об'єктів серед властивостей і подій залишаться тільки ті, які є у всіх вибраних об'єктів. Цим і слід скористатися.

Отже, вибираємо на формі всі 3 кнопки (окреслюючи область мишею, або утримуючи Shift), далі переходимо на вкладку Events в ІО і створюємо обробник події OnClick. Що відбувається: відкривається редактор коду, але створюється тільки один обробник, хоча він присвоюється всім трьом кнопкам.

Висновок повідомлення також реалізується одним рядком, в який підставляється ім'я кнопки, яка була натиснута.

procedure TForm1.Button1Click(Sender: TObject);

Begin

ShowMessage('Нажата '+(Sender as TButton).Name)

end;

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

 

Параметри, передані обробникам

У подій є параметри. У багатьох подій параметр один, але в деяких їх буває і більше - залежить від типу події. З переданих параметрів можна дізнатися додаткові дані та умови, за яких відбулася подія. Наприклад, якщо ми знаємо, що користувач пересунув курсор миші, це ще ні про що не говорить і корисної інформації практично не несе. А от якщо ми знаємо, що курсор був пересунутий в точку екрану з деякими відомими координатами (x; y) - це вже щось.

Параметр, який зустрічається практично у всіх подіях - Sender. Він вказує на об'єкт, який дана подія ініціювала. Використовувати його зручно у випадку з декількома об'єктами, у яких встановлений один обробник одної і того ж події (як у нашому прикладі № 1).

 

Події

Ось тепер, коли ми досить багато знаємо про події, можна нарешті розглянути стандартні і найбільш часто використовувані з них.

 

OnClick - клацання мишею по об'єкту. У кнопки подія також спрацьовує, якщо натиснути Enter або Пробіл в той момент, коли фокус уведення знаходиться на кнопці.

OnDblClick - подвійне клацання мишею.

OnContextPopup - при виклику контекстного меню об'єкта, тобто при клацанні правою кнопкою миші. Серед параметрів є MousePos - координати курсора в момент клацання. Координата по X доступна як MousePos.X, а по Y - як MousePos.Y.

OnEnter - момент, коли об'єкт отримує фокус введення (фокус введення звичайно зображується пунктирною рамкою на об'єкті; в полі введення - це курсор; фокус один на весь додаток, тобто працювати одночасно можна лише з одним об'єктом).

OnExit - момент, коли об'єкт втрачає фокус введення.

OnMouseDown - при натисканні кнопки миші (не обов'язково лівою). Параметр Button - натиснута кнопка (mbLeft - ліва кнопка, mbRight - права, mbMiddle - середня). Shift - безліч, яке вказує, які функціональні клавіші були затиснуті при клацанні. Таким чином можна відстежувати, наприклад, натискання при затиснутих Ctrl + Alt і т.п. X, Y - координати курсора під час натискання (щодо лівого верхнього кута самого компонента, а не форми!).

OnMouseUp - подія, аналогічне OnMouseDown. Відбувається при відпуску кнопки миші. Приклад комбінації цих двох подій - графічний редактор: коли кнопка миші натиснута, відбувається малювання, а коли відпущена - не відбувається.

OnMouseMove - ще одна подія миші, що відбувається при переміщенні курсору над об'єктом. X, Y - координати нового положення, Shift - безліч натиснутих функціональних клавіш.

OnKeyDown - при натисканні будь-якої клавіші клавіатури в той момент, коли фокус уведення знаходиться на об'єкті. Key - код натиснутої клавіші, Shift - все той же безліч функціональних клавіш (цей параметр зустрічається у багатьох подіях).

OnKeyUp - при відпусканні клавіші (антипод OnKeyDown).

OnKeyPress - при натисканні клавіші, яка друкує символ (буква, цифра, знак). Key - вже не код клавіші, а сам символ (тип даних: Char - один символ).

OnResize - при зміні розмірів об'єкта.

OnPaint - при відображенні об'єкта на екрані (наприклад, форми).

 

У самої форми також є безліч подій. Відзначимо деякі з них:

OnCreate - при створенні форми. Зазвичай в обробник цієї події поміщають дії, які повинні відбутися при запуску програми. Але при запуску це виконається тільки якщо форма є головною в додатку та за умови, що форма створюється автоматично. Якщо в додатку одна форма - вона і є головною.

OnClose - при закритті форми.

OnCloseQuery - при спробі закрити форму. Цю подію можна використовувати, якщо потрібно заблокувати закриття форми. У обробнику присутній параметр CanClose (англ. - "можна закрити"): логічне значення, тип даних - Boolean. Якщо після виконання обробника значення змінної CanClose виявиться False, то закриття форми вироблено не буде. Значення цієї змінної встановлюється програмно. Приклад використання цієї події - текстовий редактор. Якщо користувач ввів текст, але не зберіг його у файл, при виході з програми потрібно запитати, чи варто зберегти зміни.

 

Приклад обробки подій № 2

Мета: заборонити "пряме" закриття форми, а питати, чи дійсно користувач хоче закрити програму. Використовуємо подію форми OnCloseQuery. У обробнику виведемо діалогове вікно і, якщо користувач відповість "Ні", заблокуємо закривання. Для виведення вікна діалогу скористаємося функцією MessageDlg. Наш обробник:

procedure TForm1.FormCloseQuery (Sender: TObject; var CanClose: Boolean);

begin

if MessageDlg ('Ви дійсно хочете вийти?', mtWarning, [mbYes, mbNo], 0) = mrNo then

CanClose: = False

end;

Перевіряється умова - чи натиснута кнопка "Ні". Якщо вона натиснута, блокуємо закриття присвоєнням змінної CanClose значення False. В результаті при закритті побачимо наступне:

 

OnDestroy - при знищенні форми (після закриття форма знищується і звільняється зайнята їй пам'ять).

OnShow - при показі форми на екран.

OnHide - при приховуванні форми з екрану.

OnActivate - момент, коли форма стає активною, тобто коли їй передається фокус введення (наприклад, коли користувач клацнув по формі).

 

OnDeactivate - відповідно, коли форма втрачає фокус.

OnChange - при зміні будь-чого (наприклад, у поля введення TEdit це подія спрацьовує, коли змінюється текст в цьому полі).

OnDragDrop, OnDragOver, OnEndDock, OnEndDrag, OnStartDock, OnStartDrag - всі ці події пов'язані з технологією Drag & Drop (тобто коли об'єкт "захоплюється" мишею і переноситься в інше місце), а також з Dock-технологією. Суть цієї (Dock) технології у вбудовуванні одних об'єктів в інші. Наприклад, якщо взяти Object Inspector за заголовок і перемістити на нижню частину Object TreeView, а потім відпустити, то вікна об'єднаються, а якщо перемістити його в центр Object TreeView, то закладок стане 3 (Object TreeView стане третьою закладкою).

Як бачите, подій безліч і описувати їх всі просто безглуздо - їх назви розкривають зміст самих подій. Достатньо знати про те, які події взагалі існують.


Дата добавления: 2023-01-08; просмотров: 40; Мы поможем в написании вашей работы!

Поделиться с друзьями:




Мы поможем в написании ваших работ!