ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 22.08.2024
Просмотров: 48
Скачиваний: 0
Основна подія будь-якої кнопки - OnClick, що виникає при клацанні на ній. Саме у обробнику цієї події записуються оператори, які повинні виконуватися при клацанні користувача на кнопці. Окрім цього є ще ряд подій, пов'язаних з різними маніпуляціями клавішами і кнопками миші.
Властивість Cancel, якщо його встановити в true, визначає, що натиснення користувачем клавіші Esc буде еквівалентне натисненню на цю кнопку. Цю властивість доцільно задавати рівним true для кнопок "Відмінити" в різних діалогових вікнах, щоб можна було вийти з діалогу, натиснувши на цю кнопку або натиснувши клавішу Esc. Властивість Default, якщо його встановити в true, визначає, що натиснення користувачем клавіші введення Enter буде еквівалентне натисненню на цю кнопку, навіть якщо ця кнопка в цей момент не знаходиться у фокусі. Правда, якщо у момент натиснення Enter у фокусі знаходиться інша кнопка, то все-таки спрацює саме кнопка у фокусі.
З методів, властивих кнопкам, має сенс відмітити один - Click. Виконання цього методу еквівалентне клацанню на кнопці, тобто викликає подію кнопки OnClick. Цим можна скористатися, щоб продублювати якимись іншими діями користувача клацання на кнопці. Нехай, наприклад, ви хочете щоб при натисненні користувачем клавіші з символом "С" або "с" у будь-який момент роботи з додатком виконувалися операції, передбачені в обробнику події OnClick кнопки Button1. Оскільки невідомо, який компонент знаходитиметься у фокусі у момент цієї події, потрібно перехопити його на рівні форми. Таке перехоплення здійснюється, якщо встановити властивість форми KeyPreview в true. Тоді в обробнику події форми OnKeyPress можна написати оператор if
(key='C' or key='c') then Button1.Click;
Якщо користувач ввів символ "С" або "с", то в результаті буде виконаний обробник клацання кнопки Button1.
Компонент Label, StaticText
Для відображення різних написів на формі використовуються в основному компоненти Label, StaticText (що з'явився тільки в Delphi 3) і Panel. Перші два з цих компонентів - мітки, спеціально призначені для відображення текстів.
Тексти, що відображуються в перерахованих компонентах, визначаються значенням їх властивості Caption. Його можна встановлювати в процесі проектування або задавати і змінювати програмно під час виконання додатка. Наприклад:
Label1.Caption:= 'Новий текст';
Якщо вимагається відобразити числову інформацію, можна скористатися функціями FloatToStr і IntToStr, що переводять відповідно числа з плаваючою комою і цілі в рядок. Для формування тексту, що складається з декількох фрагментів, можна використовувати операцію "+", яка для рядків означає їх склеювання (конкатенацію). Наприклад, якщо в програмі є ціла змінна I, що відображує число співробітників деякої організації те вивести в мітку Label1 інформацію про це можна оператором:
Label1.Caption:= 'Число співробітників : '+IntToStr(I);
У усіх компонентах колір фону визначається властивістю Color, а колір напису - підвластивістю Color властивості Font.
Для мітки Label колір і шрифт - єдино доступні елементи оформлення напису. Компонент StaticText має крім того властивість BorderStyle, що визначає рамку тексту - бордюр.
Розмір міток Label і StaticText визначається також властивістю AutoSize. Якщо ця властивість встановлена в true, то вертикальний і горизонтальний розміри компонента визначаються розміром написи. Якщо ж AutoSize рівне false, то вирівнювання тексту усередині компонента визначається властивістю Alignment, яка дозволяє вирівнювати текст по лівому краю, правому краю або центру клієнтської області мітки.
У мітці Label є властивість Wordwrap - допустимість перенесення слів довгого напису, що перевищує довжину компонента, на нову строчку. Щоб таке перенесення могло здійснюватися, потрібно встановити властивість WordWrap в true, властивість AutoSize в false (щоб розмір компонента не визначався розміром написи) і зробити висоту компонента такий, щоб в нім могло поміститися декілька рядків.
У мітці StaticText перенесення довгого тексту здійснюється автоматично, якщо значення AutoSize встановлене в false і розмір компонента достатній для розміщення декількох рядків. Для того, щоб в StaticText здійснювалося перенесення при зміні користувачем розмірів вікна, потрібно здійснювати описане вище перемальовування компонента методом Repaint в обробнику події форми OnResize.
Компонент Edit
У компоненті Edit текст, що вводиться і виводиться, міститься у властивості Text. Цю властивість можна встановлювати в процесі проектування або задавати програмно. Вирівнювання тексту, як це мало місце в мітках і панелях, неможливе. Перенесення рядків теж неможливе. Текст, що не поміщається по довжині у вікно, просто зрушується і користувач може переміщатися по ньому за допомогою курсора. Властивість AutoSize у вікнах редагування має сенс відмінний від сенсу аналогічної властивості міток : автоматично підлаштовується під розмір тексту тільки висота, але не ширина вікна.
Вікна редагування забезпечені багатьма функціями, властивими більшості редакторів. Наприклад, в них передбачені типові комбінації "гарячих" клавіш : Ctrl - C - копіювання виділеного тексту в буфер обміну Clipboard (команда Copy), Ctrl - X - вирізування виділеного тексту в буфер Clipboard (команда Cut), Ctrl - V - вставка тексту з буфера Clipboard в позицію курсора (команда Paste), Ctrl - Z - відміна останньої команди редагування.
Edit можна використовувати і просто як компоненти відображення тексту. Для цього потрібно встановити в true його властивість ReadOnly і доцільно встановити AutoSelect в false. В цьому випадку користувач не зможе змінювати текст, що відображується, і вікно редагування стає подібним міткам. При використанні вікон редагування для виводу, введення і редагування чисел необхідно використовувати функції взаємного перетворення рядків і чисел. Для виводу це описані при розгляді міток функції FloatToStr і IntToStr. При введенні це функції StrToFloat - перетворення рядка в значення з плаваючою комою і StrToInt - перетворення рядка в ціле значення. Якщо текст, що вводиться, не відповідає числу (наприклад, містить неприпустимі символи), то функції перетворення генерують виключення EConvertError. Тому в програмі необхідно передбачити обробку цього виключення.
Наприклад:
var A: integer;
try
A:= StrToInt(Edit1.Text);
..{оператори, що використовують змінну
А} except on EConvertError do
ShowMessage('Ви ввели помилкове число;
повторите введення');
Цей код забезпечує повідомлення користувача про помилку введення і запобіже помилковим обчисленням. Втім, це не кращий варіант запобігти помилковому введенню, оскільки користувач дізнається про свою помилку тільки після того, як програма намагається використовувати введені дані. Краще, якщо користувач просто не зможе ввести неправильні символи. Наприклад, якщо ви хочете, щоб користувач міг вводити у вікно редагування Edit тільки цифри і символ точки ви можете в обробник події OnKeyPress цього компонента вставити оператор: if
not (Key in ['0'.'9 ', ',']) then Key:= #0;
Цей оператор підмінить усі символи, окрім цифр і коми, нульовим символом, який не занесеться в текст вікна Edit.
Властивість MaxLength визначає максимальну довжину тексту, що вводиться. Якщо MaxLength = 0, то довжина тексту не обмежена. Інакше значення MaxLength вказує максимальне число символів, яке може ввести користувач.
Властивість PasswordChar дозволяє перетворювати вікно редагування на вікно введення пароля. За умовчанням значення PasswordChar дорівнює #0 - нульовому символу. В цьому випадку це звичайне вікно редагування. Але якщо у властивості вказати інший символ (наприклад, символ зірочки "*"), то при введенні користувачем тексту у вікні з'являтимуться саме ці символи, а не ті, які вводить користувач. Тим самим забезпечується секретність введення пароля.
Компонент Image та PaintBox
Компоненти Image і PaintBox є деякою обмеженою поверхнею з канвою, на яку можна заносити зображення, як це описано в розділі 4.2. При цьому компонент PaintBox, власне кажучи, не дає нічого нового в порівнянні з малюванням на канві форми. Малювання на PaintBox замість форми не має ніяких переваг, окрім, можливо, деякого полегшення в розташуванні одного або декількох малюнків в площі вікна.
Компонент Image багато багатше по своїх можливостях і зручніше, ніж PaintBox. Компонент Image має істотну перевагу: в нім не доводиться думати про перемальовування зображення, зіпсованого із-за перекриття цього вікна іншими. Усе, пов'язане з обробкою подій OnPaint, в Image здійснюється автоматично. Крім того за допомогою Image простіше, ніж при безпосередньому малюванні на канві форми, розташувати у вікні додатка декілька зображень і управляти ними. При цьому відпадає необхідність складних і нудних розрахунків координат канви форми, що забезпечують необхідне взаємне розташування зображень, тобто повною мірою проявляються переваги візуального програмування. Отже, ймовірно, в усіх випадках краще працювати з канвою Image, чим з канвою форми.
Але окрім цих можливостей у компонента Image є властивості, що дозволяють працювати з різними типами графічних файлів.
Delphi підтримує три типи файлів - бітові матриці, піктограми і метафайли. Усі три типи файлів зберігають зображення; відмінність полягає лише в способі їх зберігання усередині файлів і в засобах доступу до них. Бітова матриця (файл з розширенням .bmp) відображує колір кожного пікселя в зображенні. При цьому інформація зберігається таким чином, що будь-який комп'ютер може відобразити зображення з роздільною здатністю і кількістю кольорів, відповідними його конфігурації.Зокрема, піктограму неможливо масштабувати, вона зберігає той розмір, в якому була створена.
Метафайли (Metafiles) зберігають не послідовність бітів, з яких складається зображення, а інформацію про спосіб створення картинки. Вони зберігають послідовності команд малювання, які і можуть бути повторені при відтворенні зображення. Це робить такі файли, як правило, компактнішими, ніж бітові матриці.
Компонент Image дозволяє відображувати інформацію, що міститься в графічних файлах усіх вказаних типів. Для цього служить його властивість Picture - об'єкт типу TPicture.
Щоб познайомитися з цією властивістю відкрийте нове застосування і перенесіть на форму компонент Image. Розтягніть його або задайте його властивість Align рівним alClient, щоб він зайняв усю клієнтську область форми. Натисніть на кнопку з багатокрапкою біля властивості Picture у вікні інспектора Об'єктів або просто зробіть подвійне клацання на Image. Перед вами відкриється вікно Picture Editor (мал. 4.3), що дозволяє завантажити у властивість Picture який-небудь графічний файл (кнопка Load), а також зберегти відкритий файл під новим ім'ям або в новому каталозі. Клацніть на Load, щоб завантажити графічний файл. Перед вами відкриється вікно відкриття графічного файлу,. У міру переміщення курсора в списку по графічних файлах в правому вікні відображуються картинки, що містяться в них, а над ними - цифри, що характеризують розмір картинки. Ви можете вибрати потрібний вам графічний файл будь-якого типу. Нагадаємо, що що поставляються з Delphi графічні файли ви можете знайти в каталозі Images. У Delphi 5 і 4 він зазвичай розташований в каталозі ..\program files\Common Files\Borland Shared. У Delphi 3 він розташований в каталозі ..\program files\Borland\Delphi 3, а в Delphi 1 - в каталозі Delphi 16. Після завантаження файлу клацніть на OK у вікні Picture Editor і у вашому компоненті Image відобразиться вибрана вами картинка. Можете запустити ваше застосування і помилуватися нею. Втім, ви і так бачите картинку, навіть не виконуючи додаток.
Компонент PageControl
Компонент PageControl (вкладкою Win32 панелі компонентів) також дозволяє створити багатосторінковий блокнот (елемент із закладка-
мі). В даному випадку він виступає як звичайний компонент, розміщений на формі. Цей компонент є контейнером і може містити в собі інші елементи або групи. При розташуванні компонента на формі на ньому немає сторінок. Додати сторінки можна за допомогою контекстного меню New Page. Кожна сторінка блокнота TabSheet розглядається як окремий компонент, її властивості аналогічні властивостям, описаним в попередніх розділах. Назва сторінки - Caption.
Основні властивості компонента представлені в таблиці. 5.7.
Таблиця 5.7. Властивості компонента PageControl