компоненти delphi

Використання компонентів

Компонент TCheckBox служить для представлення користувачеві елементи вибору - прапорця, який можна відзначити або зняти з нього позначку. Найбільш важливою властивістю компонента TCheckBox є властивість Checked. яке визначає, чи встановлений прапорець. Обробник події OnClick найбільше підходить для приміщення в нього коду, який повинен виконуватися при зміні стану прапорця.







Зараз ми подивимося, яким чином можна використовувати компонент TCheckBox. щоб дозволити користувачеві показувати / приховувати і активізувати / блокувати всі кнопки на формі.

компоненти delphi

Реалізувати задумане можна, щонайменше, трьома способами. Перший спосіб є найпростішим, але менш досконалим, більш схильним до помилок і більш трудомістким. Він полягає в тому, щоб модифікувати властивості Enabled і Visible кожної кнопки на формі.

Другий, більш відповідний, спосіб роботи з великою кількістю компонентів полягає в використанні імен компонентів, прийнятих за замовчуванням, і методу FindComponent. Як правило, вікно Designer Surface генерує такі імена компонентів, які будуть зрозумілі тільки їй, але не нам з вами; якщо ви хочете, щоб ваш код був більш зрозумілим, ці імена слід змінити. Проте, стиль іменування компонентів, що додаються у вікно Designer Surface. який визначається як Імя_Компонента + Унікальний_Індекс. в даному випадку виявиться вельми корисним. Він дозволяє без особливих зусиль посилатися на необхідні компоненти, викликаючи метод FindComponent всередині циклу.

Метод FindComponent використовує параметр AName для пошуку властивості Components та повернення компонента з поєднаним ім'ям. Якщо компонент не буде знайдений, функція поверне nil. Властивість Components являє список всіх компонентів, що належать конкретній компоненту.

На прикладі коду нижче показано, як можна дізнатися, що формі належить компонент з ім'ям MyButton.

Щоб показати / приховати або активізувати / заблокувати всі кнопки на формі, необхідно викликати метод FindComponent в циклі і скористатися лічильником циклу для генерації імені необхідного компонента. Оскільки метод FindComponent завжди повертає тип TComponent. потрібно привести отриманий компонент до типу TButton. перш ніж посилатися на властивості Enabled і Disabled.

Операція is в Delphi

Третій спосіб роботи з великою кількістю компонентів під час виконання полягає в тому, щоб переглядати властивість Components вручну і з'ясовувати, чи має компонент тип TButton або будь-який інший необхідний тип. Для з'ясування типу компонента під час виконання служить операція is. Синтаксис операції is показаний нижче:

Операція is повертає True. якщо об'єкт є екземпляром типу Клас. чи примірником одного із спадкоємців класу. Наприклад, наступна перевірка в будь-якому випадку буде оцінена як True. оскільки головна форма є спадкоємцем класу TForm.

Компонент TRadioButton використовується подібно компоненту TCheckBox. Властивість Checked визначає, чи встановлений перемикач, а властивість OnClick дозволяє виконати код відразу після установки перемикача.

Давайте скористаємося компонентом TRadioButton при створенні програми, за допомогою якого можна буде змінювати діалогове вікно повідомлення, що формується функцією MessageDlg. Функція MessageDlg зазвичай застосовується для відображення чотирьох стандартних вікон повідомлень: діалогового вікна попередження, помилки, інформаційного вікна і вікна підтвердження.

компоненти delphi
компоненти delphi
компоненти delphi
компоненти delphi

Створіть наступне діалогове вікно

компоненти delphi

Тип вікна повідомлення визначається перерахуванням TMsgDlgType. яке оголошено в модулі Dialogs:

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

Змінити тип вікна повідомлення можна також шляхом об'єднання коду існуючих обробників подій в одному обробнику події. В об'єднаному обработчике ми можемо використовувати параметр Sender для ідентифікації перемикача, який викликав обробник події, і відповідної зміни типу вікна повідомлення. По-перше, видаліть повністю обробники події OnClick перемикачів Error. Information і Confirmation і помістіть наступний код в обробник події OnClick перемикача Warning:

Тепер нам необхідно призначити цей обробник події OnClick кожного з чотирьох перемикачів. Призначити обробник одного події великій кількості компонентів швидше за все можна, якщо спочатку вибрати компоненти у вікні Designer Surface. а потім в інспекторові об'єктів Object Inspector призначити обробник відповідного події.







Більш прийнятний спосіб зміни типу вікна повідомлення пов'язаний з використанням властивості Tag. Це властивість не має спеціального призначення, не рахуючи того, що воно дозволяє зберігати цілочисельне значення і використовувати його тоді, коли це буде необхідно. В даному випадку ми можемо використовувати властивість Tag для того, щоб видалити повністю конструкцію if -then з обробника подій.

Наше завдання полягає в тому, щоб привласнити властивості Tag перемикачів цілочисельне значення, яке буде співпадати з перелічуваних значеннями констант mtWarning. mtError. mtInformation і mtConfirmation. Таким чином, ми можемо залишити властивість Tag перемикача Warning незміненим, оскільки значення Ord (mtWarning) дорівнює 0, хоча нам потрібно модифікувати властивість Tag інших трьох перемикачів. Отже, надайте властивості Tag перемикача Error значення 1, властивості Tag перемикача Information значення 2. а властивості Tag перемикача Confirmation значення 3.

Тепер, коли властивість Tag всіх чотирьох перемикачів містить відповідний тип повідомлення, нам не потрібно використовувати конструкцію if-then. щоб визначити тип вікна повідомлення. Ми повинні всього лише привести значення Tag компонента Sender до типу TMsgDlgType. Насправді ми повинні виконати два приведення до типу. По-перше, ми повинні привести об'єкт Sender до типу TComponent. оскільки властивість Tag визначено в класі TComponent. після чого привести властивість Tag до типу TMsgDlgType.

Як бачите, використання властивості Tag помітно скорочує кількість рядків коду, необхідних для зміни типу вікна повідомлення. При бажанні, ви можете також видалити змінну SenderComp і записати обидва приведення до типу в одній і тій же рядку, щоб ще більше скоротити кількість рядків коду.

Компонент TListBox відображає список елементів. Найбільш важливою властивістю цього компонента є властивість Items. яке є об'єктом типу TStrings. Клас TStrings реалізує список рядків і дозволяє маніпулювати ними. Таким чином, якщо необхідно маніпулювати елементами у вікні списку, слід викликати методи властивості Items. Наприклад, щоб додати новий елемент у вікно списку, ви повинні викликати метод Add властивості Items. Метод Add приймає єдиний параметр - строкове значення, яке буде додано в кінець списку.

компоненти delphi

У цьому розділі ми будемо використовувати компонент TListBox для створення додатка, яке дозволить переглядати всі встановлені шрифти на комп'ютері. Список встановлених шрифтів пропонується ще одним глобальним об'єктом - об'єктом Screen. Список імен шрифтів міститься у властивості Fonts. яке також оголошено як властивість типу TStrings.

компоненти delphi

Для того щоб відобразити перелік шрифтів у вікні списку, ми повинні скопіювати весь вміст списку шрифтів у вікно списку. Скопіювати елементи з одного списку в інший можна і вручну, однак найкраще використовувати метод Assign. Цей метод практично скрізь присутній в VCL і використовується для копіювання вмісту вихідного об'єкта в потрібний об'єкт. У випадку зі списком рядків метод Assign застосовується для копіювання всіх рядків з вихідного списку рядків в список призначення.

1. Додати компонент TLabel в вікно Designer Surface і привласнити йому ім'я PreviewLabel.
2. Додати обробник події OnClick компонента TListBox.

Вибір безлічі елементів

За замовчуванням компонент TListBox дозволяє вибрати тільки один елемент у списку. Якщо ви хочете вибрати безліч елементів у вікні списку, ви повинні привласнити властивості MultiSelect значення True. Коли властивості MultiSelect присвоєно значення True. ви не можете користуватися властивістю ItemIndex. щоб дізнатися, які елементи були обрані. У випадку з вікном списку MultiSelect властивість ItemIndex ідентифікує тільки той елемент, який знаходиться у фокусі. Дізнатися, які елементи з вікна списку MultiSelect були обрані, можна за допомогою властивості Selected. Ця властивість є індексованих властивістю, яке дозволяє визначити, чи був обраний елемент із заданим індексом. Наприклад, за допомогою наступного коду можна з'ясувати, чи був обраний з вікна зі списком, перший елемент:

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

Давайте створимо просте додаток, за допомогою якого користувач зможе вибирати безліч елементів в одному списку і переміщати їх в інший список. Додайте в вікно Designer Surface два компонента TListBox. Компонент ListBox1 буде вихідним списком, а компонент ListBox2 -целевим.

Скопіювати елементи з вихідного вікна списку в цільове можна за допомогою стандартного циклу for. оскільки вміст вихідного вікна списку не змінюється. Однак щоб видалити вибрані елементи з вихідного вікна списку, ми повинні використовувати цикл downto. оскільки метод Delphi змінює вміст (а також індекси) вихідного вікна списку.

Якщо потрібно видалити тільки вибрані елементи, ви можете також використовувати метод DeleteSelected.

Методи BeginUpdate і EndUpdate

Зазвичай кожен раз, коли ви додаєте новий елемент у вікно списку або змінюєте його вміст, вікно списку перемальовується для того, щоб показати новий елемент. Коли ви додаєте елементи в список установок в циклі, вам слід використовувати методи BeginUpdate і EndUpdate властивості Items. оскільки вони дозволяють відключити на час перемальовування вікна списку.

Метод BeginUpdate тимчасово відключає перерисовку вікна списку, а метод EndUpdate відновлює її. Метод BeginUpdate зазвичай викликається перед циклом, що модифікує вміст вікна списку, а метод EndUpdate - після завершення циклу для перемальовування вікна списку і відображення змін у вмісті вікна списку.

Методи BeginUpdate і EndUpdate дійсно дозволяють відчути різницю в швидкості виконання операцій з вікном списку, особливо якщо мова йде про великих циклах. Так, щоб перемістити 5000 обраних елементів з одного вікна списку в інше, буде потрібно близько 2 секунд. Якщо ж використовувати методи BeginUpdate і EndUpdate. то на виконання цього ж циклу знадобиться приблизно 0,2 секунди.

Метод IndexOf дозволяє знаходити рядки в списку рядків. Цей метод приймає єдиний строковий параметр і повертає індекс переданої рядка, якщо така знайдена. Якщо передана рядок в списку рядків не існує, метод IndexOf повертає -1.

Метод IndexOf може використовуватися, наприклад, щоб дати користувачеві можливість додавати в список установок тільки унікальні значення. У наступному прикладі демонструється не тільки застосування методу IndexOf. але і функції MessageDlg для видачі запиту користувачеві. Функція MessageDlg служить для того, щоб вимагати від користувача, чи бажає він додати значення в список, якщо таке значення вже існує.

При бажанні, можете також скористатися перевагою укороченою оцінки.

Властивості Names і Values

У класі TStrings визначені ще дві властивості, які можуть використовуватися для доступу до рядків в списку рядків. Властивості Names і Values ​​є індексованими властивостями, які дозволяють звертатися до частини рядка, що містить пару ім'я-значення. За замовчуванням, символом, що розділяє частина імені від частини значення в рядку, є знак рівності (=).

За допомогою властивостей Names і Values ​​можна, наприклад, без праці створити невеликий словник. Зараз ми створимо прості англо-український та англо-український словники з допомогою властивості Values.

компоненти delphi

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







Схожі статті