Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
конспект_укр.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.07 Mб
Скачать

1. Використання підпрограм в оброблювачах подій

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

Чесно кажучи, створювані нами раніше програми так і будувалися. Це були тестові додатки, єдиним завданням яких було показати можливості різних компонентів. Але справжній додаток так проектувати не можна. Безсистемно створений додаток, навіть дуже гарний, через якийсь час стає незрозумілим і самому розроблювачу, не говорячи вже про проблеми супроводу такого додатка кимось із колег. Подібний додаток, якщо виникає необхідність його доробки, простіше створити заново, чим розбиратися в його хітросплетіннях.

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

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

 

2. Звертання до активного компонента не за ім’ям

Для створення універсальних підпрограм-оброблювачів подій однією з умов є звертання до компонентів не не за ім’ям. Наприклад: нехай є форма реєстрації із чотирма полями й кнопкою.

 

 

Потрібно написати оброблювач, який при введенні пароля переводить курсор на наступне поле, якщо в поточному полі введено 5 символів.

 

Для першого поля в події Onchange напишемо код:

 

procedure tform1.edit1change(sender: tobject);

begin

    //якщо в перше поле введено 5 символів

    if length(edit1.text)=5 then

        //то переходимо в друге поле

        edit2.setfocus;

end;

 

Для другого поля в події Onchange напишемо код:

 

procedure tform1.edit2change(sender: tobject);

begin

    //якщо в друге поле введено 5 символів

    if length(edit2.text)=5 then

        //то переходимо в третє поле

        edit3.setfocus;

end;

 

Для третього поля в події Onchange напишемо код:

 

procedure tform1.edit3change(sender: tobject);

begin

    //якщо в третьому полі введено 5 символів

    if length(edit3.text)=5 then

        //то переходимо в четверте поле

        edit4.setfocus;

end;

 

Для четвертого поля в події Onchange напишемо код:

 

procedure tform1.edit4change(sender: tobject);

begin

    //якщо в четвертому полі введено 5 символів

    if length(edit4.text)=5 then

        //то переходимо на кнопку

        button1.setfocus;

end;

 

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

 

Звертання до поточного компонента

Для звертання до поточного компонента можна використовувати запис:

 

tтип_компонента(activecontrol)

 

де тип компонента – це назва компонента на панелі компонентів. Якщо ви не пам'ятайте назву компонента, наведіть покажчик миші на його кнопку на панелі й у підказці прочитайте його назву.

 

Наприклад:

 

tedit(activecontrol) – звертання до поточного компонента як до текстового поля;

tbutton(activecontrol) - звертання до поточного компонента як до кнопки;

tlistbox(activecontrol) - звертання до поточного компонента як до списку;

 

Перехід між компонентами

Для переходу на потрібний компонент існує стандартний метод:

 

ім'я_компонента.setfocus; //не рекомендується

 

Але цей метод потребує зазначення імені компонента, що не рекомендується робити в універсальних процедурах. В Delphi існує метод для переходу на наступний компонент відносно поточного:

 

selectnext(activecontrol,true,true);

 

Створення універсального коду для форми реєстрації

Повернемося до нашої форми реєстрації і спробуємо написати універсальний код для пролів форми.

Для першого поля у події OnChange введіть код:

 

procedure TForm1.Edit1Click(Sender: TObject);

begin

    //якщо довжина тексту поточного поля=5

    if length(tedit(activecontrol).Text)=5 then

        //перейти на наступний компонент

        selectnext(activecontrol,true,true);

end;

 Для того, щоби для інших полів виконувався такий самий код, виділіть ці поля і у події OnChange виберіть зі списку подію Edit1Change.

  

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]