русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Обробка групи компонентів


Дата додавання: 2014-10-07; переглядів: 836.


Звертання до довільного компоненту за його номером

Кожний компонент на формі має порядковий номер (нумерація починається з 0). Для звертання до компонента по його номеру використовують властивість:

 

tтип_компонента(controls[i])

 

де i – номер компонента. Наприклад:

 

tedit(controls[0]) – звертання до першого компонента, який є текстовим полем;

tbutton(controls[3]) – звертання до четвертого компонента, який є кнопкою;

tlistbox(controls[4]) – звертання до п'ятого компонента, який є списком.

 

Розпізнавання типу компонента

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

 

tedit(controls[0]).text:=’’;

 

Якщо першим компонентом виявиться не текстове поле, а, наприклад, кнопка button, то видається помилка. Це відбувається тому, що кнопка не має властивості text. Для вирішення цієї проблеми необхідно перш ніж звертатися до компоненту, перевірити його тип за допомогою команди:

 

if controls[i].classname='TТип_компонента' then

 

Зверніть увагу, що верхній регістр при зазначенні типу компонента обов'язковий.

 

В нашому прикладі для звертання до поля можна ввести код:

 

if controls[0].classname='TEdit' then

tedit(controls[0]).text:=’’;

 

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

 

Обробка набору полів у циклі

При написанні коду часто доводиться обробляти декілька компонентів на формі. В цьому випадку можна використовувати цикл:

 

for i:=0 to controlcount-1 do

. . .controls[i]. . .

 

У циклі використовується властивість форми controlcount, яка зберігає кількість усіх компонентів на формі. Так як компоненти на формі нумеруються з 0, то цикл виконується до controlcount-1.

Наведений цикл пройде по всіх компонентах на формі, але серед компонентів може бути багато різнотитпних: написи, текстові поля, прапорці і т.і. Тому, якщо треба пройти по всіх компонентах, але обробити тільки компоненти потрібного класу, то у циклі використовують оператор if.

 

for i:=0 to controlcount-1 do

if controls[i].classname='ТТип_компонента' then

. . .controls[i]. . .

 

Приклад. Нехай є форма вигляду:

 

 

Для кнопки "Очистити" напишемо код, який очищае всі текстові поля на формі.

 

procedure TForm1.Button1Click(Sender: TObject);

var i:integer;

begin

for i:=0 to controlcount-1 do

if controls[i].classname='TEdit' then

tedit(controls[i]).Text:='';

end;

 

Помітка компонентів

Іноді при написанні універсального коду треба серед однотипних компонентів відокремити деякі з них. Наприклад, нехай на попередній формі поле з результатом очищати не потрібно. Для цього це поле треба якось помітити. Для помітки можна використовувати властивість Tag, яку має кожний компонент. Ця властивість може зберігати довільне ціле значення і за замовченням завжди дорівнює 0. Якщо у цю властивість вводити значення, відмінне від 0, і потім перевіряти значення властивості у коді, то відповідний компонент можна виключати із обробки.

Для звернення до цієї властивості у коді використовують запис:

 

controls[i].tag

 

В нашому випадку можна для поля з результатом у властивості Tag зазначити значення 1. Тоді код для кнопки "Очистити" буде мати вигляд:

 

procedure TForm1.Button1Click(Sender: TObject);

var i:integer;

begin

for i:=0 to controlcount-1 do

if controls[i].classname='TEdit' then

if controls[i].tag<>1 then

tedit(controls[i]).Text:='';

end;

 


<== попередня лекція | наступна лекція ==>
Звертання до активного компонента не за ім’ям | Обробка компонентів як масиву


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн