Печатать книгуПечатать книгу

§ 3. Праектаванне інтэрфейса аконнага дадатку з выкарыстаннем элементаў кіравання

Сайт: Профильное обучение
Курс: Інфармацыйныя тэхналогіі. 11 клас (Базавы ўзровень)
Книга: § 3. Праектаванне інтэрфейса аконнага дадатку з выкарыстаннем элементаў кіравання
Напечатано:: Гость
Дата: Пятница, 29 Март 2024, 11:26

3.1. Асноўныя элементы кіравання

Элементамі кіравання называюцца аб'екты, якія выкарыстоўваюцца для адлюстравання даных ці выканання аперацый з данымі. Дзеянні з элементамі кіравання можна ажыццяўляць з дапамогай мышы ці клавіятуры. Кіраванне рознымі праграмамі больш-менш аднастайнае, таму што ў складзе АС ёсць набор элементаў кіравання: тыпавых кнопак; палёў, якія рэдагуюцца; спісаў выбару; флажкоў, пераключальнікаў і да т. п. Усе элементы кіравання сабраны ў спецыяльныя бібліятэкі кампанентаў. Асяроддзе распрацоўкі праграм Delphi выкарыстоўвае бібліятэку VCL (Visual Component Library) — бібліятэку візуальных кампанентаў.

Кампаненты бібліятэкі VCL змяшчаюцца на розных старонках палітры кампанентаў (прыклад 2.7.). Кожная старонка мае сваю назву. На старонках  Standard (прыклад 3.1.) і Additional (прыклад 3.2.) змешчаны найбольш ужываемыя кампаненты.

Размяшчэнне кампанентаў па старонках палітры кампанентаў запамінаць неабавязкова. Можна выкарыстаць пошук (прыклад 3.3.).

Кожнаму элементу кіравання ў асяроддзі Delphi адпавядае адзін ці некалькі кампанентаў.

Прыклад 3.1. Палітра кампанентаў Standard:

Прыклад 3.2. Палітра кампанентаў Additional:

Прыклад 3.3. Пошук кампанента Button:

3.2. Элемент кіравання Button (кнопка)

Кампанент Button (кнопка) належыць да элементаў кіравання. На панэлі кампанентаў Standard кнопка адлюстравана ў выглядзе , імя аб’екта — Button. Кнопка, змешчаная на форму, атрымлівае імя — ButtonN, дзе N — нумар 1, 2, 3… (прыклад 3.4). Пры неабходнасці кнопку можна перамясціць у любое месца формы. Ключавыя пункты дазволяць устанавіць патрэбны памер кнопкі.

Некаторыя ўласцівасці кампанента Button пералічаны ў табліцы (прыклад 3.5).

Як бачна з табліцы, шмат якія ўласцівасці кнопкі супадаюць па імёнах і прызначэннях з уласцівасцямі формы, таму ў далейшым для кампанентаў будуць паказвацца толькі тыя ўласцівасці, якія адрознiваюцца ад ужо апісаных для іншых кампанентаў.

Асноўнай падзеяй кампанента Button з'яўляецца падзея OnClick. Для стварэння апрацоўшчыка падзеі OnClick для кнопкі можна паступіць такім жа чынам, як і пры стварэнні аналагічнага апрацоўшчыка для формы: выбраць падзею на ўкладцы Events і выканаць двайную пстрычку ў полі насупраць падзеі OnClick. Можна проста выканаць двайную пстрычку па кнопцы. (Для формы асноўнай падзеяй з'яўляецца падзея OnCreate, таму пры двайной пстрычцы па форме ствараецца апрацоўшчык падзеі OnCreate.) Для кампанентаў будуць паказвацца толькі тыя ўласцівасці, якія адрозніваюцца ад ужо апісаных для іншых кампанентаў.

Прыклад 3.6. Стварыць праект, змясціўшы на форме дзве кнопкі. Пры націсканні на адну з іх колер формы павінен змяніцца на сіні, а пры націсканні на іншую — павінен аднавіцца зыходны колер.

Этапы выканання задання

  1. Змясціць на форму дзве кнопкі.
  2. Змяніць уласцівасць Caption у кнопкі Button1 на «Змяніць колер».
  3. Змяніць уласцівасць Caption у кнопкі Button2 на «Аднавіць колер».
  4. Стварыць апрацоўшчык падзеі OnClik для кнопкі Button1, у якім змяніць колер формы. Каманда Form1.Color := clBlue;
  5. Стварыць апрацоўшчык падзеі OnClik для кнопкі Button2, у якім змяніць колер формы на першапачатковы (назва колеру формы паказана ў полі Color інспектара аб'ектаў). Каманда
    Form1.Color := clBtnFace;
  6. Захаваць змяненні ў праекце.

Прыклад 3.4. Кампанент Button на форме:

Прыклад 3.5. Уласцівасці кампанента Button.

Уласцівасць

Прызначэнне

Caption

Загаловак (знешняе імя) кнопкі, тэкст, які адлюстроўваецца на кнопцы. Па змоўчанні — Button1

Font

Уласцівасці шрыфту для подпісу загалоўка. Уласцівасць Font з'яўляецца складанай, пра што сведчыць значок  . Пры націсканні на гэты значок раскрываюцца ўсе ўласцівасці шрыфту. Націсканне на кнопку   выкліча стандартнае акно ўстаноўкі ўласцівасцей шрыфту

Height

Вышыня кнопкі

Weight

Шырыня кнопкі

Left

Гарызантальная каардыната становішча верхняга левага вугла кнопкі на форме выкліча стандартнае акно ўстаноўкі ўласцівасцей шрыфту

Top

Вертыкальная каардыната становішча верхняга левага вугла кнопкі на форме

Name

Імя (унутранае) кнопкі. Выкарыстоўваецца ў праграмным кодзе для звароту да аб'екта. З'яўляецца ідэнтыфікатарам

Enable

Значэнне True гэтай уласцівасці забяспечвае даступнасць кнопкі для мышы ці клавіятуры

Visible

Значэнне True гэтай уласцівасці забяспечвае бачнасць кнопкі ў час выканання дадатку

Прыклад 3.6. Знешні выгляд формы ў рэжыме канструктара дызайну:

Знешні выгляд формы пры выкананні:

Акрамя кнопак Button у Delphi выкарыстоўваюцца кнопкі  і , змешчаныя на палітры кампанентаў Additional.

Кнопкі BitBtn — кнопкі з відарысам. Уласцівасць Kind дадзенага аб'екта дазваляе выбраць кнопку з адным са стандартных відарысаў.

Кнопкі SpeedBtn (кнопкі з фіксацыяй і графікай) ужываюцца  тады, калі патрабуецца фіксацыя націснутага стану.

Уласцівасць Glyph дазваляе ўставіць відарыс з файла на кнопках BitBtn і SpeedBtn.

3.3. Элемент кіравання Label (метка)

Кампанент Label (метка) прызначаны для адлюстравання тэксту на форме. На панэлі кампанентаў Standard метка адлюстравана ў выглядзе  , імя аб'екта — Label. Метка, змешчаная на форме, атрымлівае імя — LabelN, дзе N — нумар 1, 2, 3… (прыклад 3.7).

Некаторыя ўласцівасці кампанента Label (меткі), якія адрозніваюцца ад уласцівасцей кампанента Button (кнопкі), пералічаны ў табліцы  (прыклад 3.8).

Асноўнай падзеяй для кампанента Label з'яўляецца падзея OnClick.

Прыклад 3.9. Стварыць праект, у якім рэалізаваць наступнае дзеянне: пры пстрычцы мышы па кнопцы «Прывітанне» з'яўляецца паведамленне «Прывітанне, свет».

Этапы выканання задання

  1. Змяніць уласцівасць Caption формы на «Працуем з кнопкай і меткай».
  2. Дабавіць на форму кнопку Button1.
  3. Змяніць уласцівасць Caption кнопкі на «Прывітанне».
  4. Дабавіць на форму метку Label1.
  5. Змяніць уласцівасці шрыфту для кампанента Label1. Націснуць кнопку  у полі Font (колер шрыфту — сіні, памер — 20, стыль — тлусты курсіў).
  6. Ачысціць поле Caption у меткі.
  7. У апрацоўшчык падзеі OnClick для кнопкі Button1 упісаць каманду
     Label1.Caption := 'Прывітанне, свет';

Прыклад 3.7. Кампанент Label на форме:

Прыклад 3.8. Уласцівасці кампанента  Label:

Уласцівасці

Прызначэнне

Caption

Адлюстроўвае ўведзены тэкст на форме

Color

Устанаўлівае колер фону меткі. Працуе, толькі калі ва ўласцівасці Transparent устаноўлена значэнне false

Alignment

Гарызантальнае выраўноўванне тэксту адносна меж меткі: taCenter (па цэнтры), taLeftJustify (па левым краі), taRightJustify (па правым краі)

AutoSize

Значэнне True гэтай уласцівасці прыводзіць да аўтаматычнага змянення памераў меткі ў адпаведнасці з даўжынёй тэксту

LayOut

Вертыкальнае выраўноўванне тэксту адносна меж меткі: tlCenter (па цэнтры), tlBottom (па верхнім краі), tlTop (па ніжнім краі)

Transparent

Значэнне True (устаноўлена па змоўчанні) задае празрысты фон меткі

WordWrap

Значэнне True гэтай уласцівасці забяспечвае аўтаматычны перанос слоў па радках

Прыклад 3.9. Форма на этапе канструявання:

Дадатак у час работы:

 

3.4. Элемент кіравання Edit (тэкставае поле)

Edit (тэкставае поле) — кампанент, які прызначаны для ўводу і вываду тэкставай інфармацыі. На панэлі кампанентаў Standard тэкставае поле адлюстравана ў выглядзе  , імя аб’екта  — Edit.

Кампанент Edit, змешчаны на форму, атрымлівае імя — EditN, дзе N — нумар  1, 2, 3… (прыклад 3.10).

У адрозненне ад іншых разгледжаных кампанентаў Edit не валодае ўласцівасцю Caption. Некаторыя ўласцівасці кампанента Edit прыведзены ў табліцы (прыклад 3.11).

Значэнне ўласцівасці Text можна задаць на этапе канструявання, змяніўшы яго ў інспектары аб'ектаў. Пры выкананні праграмы карыстальнік, які ўводзіць тэкст у кампанент Edit, змяняе значэнне ўласцівасці Text. Таксама ўласцівасць Text кампанента Edit можа змяняцца праграмна. Асноўнай падзеяй кампанента Edit з'яўляецца падзея OnChange, якая адбываецца пры змяненні кампанента. Найбольш часта праграміруюць падзею OnKeyPress, якая дазваляе вызначыць, што за клавіша была націснута.

Прыклад 3.12. Стварыць праект, у якім карыстальніка папросяць увесці яго імя (напрыклад, Лізавета), а потым, пасля націскання клавішы Enter, будзе выдадзена паведамленне «Лізавета, прыемна з Вамі пазнаёміцца!».

Этапы выканання задання

  1. Змяніць уласцівасць Caption у формы на «Знаёмства».
  2. Змясціць на форме дзве меткі і тэкставае поле.
  3. Змяніць уласцівасць Caption у Label1 на «Увядзіце сваё імя і націсніце клавішу Enter».
  4. Ачысціць поле ўласцівасці Caption у Label2.
  5. Ачысціць поле ўласцівасці Text у Edit1.
  6. Напісаць апрацоўшчык падзеі OnKeyPress для кампанента Edit1, які будзе правяраць націсканне клавішы ўводу (код клавішы Enter — 13), і калі клавіша націснута, то памяняць уласцівасць Caption у  Label2:

  if key = #13 then
Label2.Caption := Edit1.Text +
', прыемна з Вамі пазнаёміцца';

Тэкставае поле Edit выкарыстоўваецца таксама і для ўводу і вываду лікаў. Пры гэтым неабходна выкарыстоўваць функцыі для ператварэння радкоў у лікі і лікаў у радкі. Гэтыя функцыі прыведзены ў табліцы (прыклад 3.13).

У PascalABC выкарыстоўваюцца гэтыя ж функцыі для ператварэння радковых даных у лікавыя і наадварот.

У рускамоўнай версіі Windows у якасці раздзяляльніка цэлай і дробавай часткі ліку па змоўчанні выкарыстоўваецца коска. Калі пры ўводзе лікаў у тэкставыя палі выкарыстоўваць кропку, то будзе ўзнікаць памылка ператварэння тыпаў.

Прыклад 3.14. Стварыць праект, у якім карыстальнік зможа ўвесці лік і атрымаць значэнне ліку ў квадраце і квадратны корань з гэтага ліку.

Этапы выканання задання

  1. Змяніць уласцівасць Caption у формы на «Квадрат і корань».
  2. Змясціць на форме тры меткі, тры тэкставыя палі і кнопку.
  3. У кампанентаў Edit1, Edit2, Edit3 ачысціць поле ўласцівасці Text.
  4. Змяніць уласцівасць Caption у Label1 на «Увядзіце неадмоўны лік». Для змяшчэння тэксту ў два радкі трэба ўстанавіць значэнне True ва ўласцівасці WordWrap.
  5. Змяніць уласцівасць Caption у Label2 на «Квадрат ліку».
  6. Змяніць уласцівасць Caption у Label3 на «Корань з ліку».
  7. Змяніць уласцівасць Caption у Button1 на «Разлік».
  8. Напісаць апрацоўшчык OnClick для кнопкі.

Прыклад 3.10. Кампанент Edit (тэкставае поле) на форме:

Прыклад 3.11. Уласцівасці кампанента Edit:

Уласцівасць

Прызначэнне

BorderStyle

Вызначае мяжу вакол тэкставага поля: bsNone (няма мяжы), bsSingle (ёсць мяжа). Выгляд мяжы можна змяняць з дапамогай ўласцівасцей  BevelInner, BevelKind, BevelOuter

MaxLength

Абмяжоўвае колькасць сімвалаў, якія можна ўвесці ў  Edit

ReadOnly

Значэнне True забараняе рэдагаванне тэксту, які адлюстроўваецца ў  Edit

Text

Змяшчае тэкст, які ўводзіцца і выводзіцца

Тэкставае поле часта называюць аднарадковым рэдактарам, паколькі яно забяспечана такімі функцыямі, як:

  • капіраванне вылучанага тэксту ў буфер абмену (камбінацыя клавіш Ctrl+З);
  • выразанне вылучанага тэксту ў буфер абмену (камбінацыя клавіш Ctrl+Х);
  • устаўка тэксту з буфера абмену ў пазіцыю курсора (камбінацыя клавіш Ctrl+V);
  • адмена апошняй каманды рэдагавання (камбінацыя клавіш Ctrl+Z).

Прыклад 3.12. Форма на этапе канструявання:

Дадатак у час работы:

Прыклад 3.13. Функцыі ператварэння лікаў і радкоў:

Назва функцыі

Дзеянне

Увод з дапамогай Edit

StrToInt

Ператварэнне радка ў цэлы лік

StrToFloat

Ператварэнне радка ў значэнне з плаваючай коскай (адпавядае тыпу экспаненцыяльны ў Excel)

Вывад з дапамогай Edit

IntToStr

Ператварэнне цэлага ліку ў радок

FloatToStr

Ператварэнне рэчаіснага ліку ў радок

FloatToStrf

Ператварэнне рэчаіснага ліку ў радок па зададзеным фармаце. Напрыклад, FloatToStrf(d, ffFixed,5,2) дазволіць вывесці лік, што займае 5 пазіцый, з якіх 2 адводзяцца для дробавай часткі ліку

Прыклад 3.14. Форма на этапе канструявання:

Апрацоўшчык падзеі OnClick для Button1.

procedure TForm1.Button1Click(Sender: TObject);

var a, b: integer;

    c: real;

begin

  a := StrToInt(Edit1.Text);

  b := a * a;

  c := sqrt(a);

  Edit2.Text := IntToStr(b);

  Edit3.Text := FloatToStrF(c,
              FFfixed,
7, 3 );

end;

Дадатак у час работы:

Замест двух кампанентаў Label і Edit можна выкарыстоўваць адзін LabeledEdit, што спалучае ў сабе ўласцівасці абодвух кампанентаў. Знаходзіцца кампанент на палітры Additional: .

3.5. *Элементы кіравання CheckBox (флажок) і RadioButton (пераключальнік)

Кампанент CheckBox (флажок) выкарыстоўваецца ў дадатках для ўключэння ці выключэння якіх-небудзь опцый. На панэлі кампанентаў Standard флажок адлюстраваны ў выглядзе, імя аб'екта — CheckBox. Флажок, змешчаны на форму, атрымлівае імя — CheckBoxN, дзе N — нумар 1, 2, 3… (прыклад 3.15). Некаторыя ўласцівасці кампанента CheckBox прыведзены ў табліцы (прыклад 3.16).

Кампанент RadioButton (пераключальнік, радыёкнопка) выкарыстоўваецца ў дадатках для ўключэння ці выключэння якіх-небудзь опцый. На панэлі кампанентаў Standard радыёкнопка адлюстравана ў выглядзе , імя аб'екта — RadioButton. Пераключальнік, змешчаны на форму, атрымлівае імя — RadioButtonN, дзе N — нумар 1, 2, 3… (гл. прыклад 3.15).

Уласцівасці Caption, Alignment і Checked у радыёкнопкі супадаюць з аналагічнымі ўласцівасцямі флажка.

Звычайна радыёкнопкі ўтвараюць групы ўзаемазвязаных пераключальнікаў, якія дазваляюць выбраць толькі адзін з некалькіх магчымых варыянтаў. Пры змяшчэнні на форме некалькіх пераключальнікаў уключаным павінен быць толькі адзін з іх (кампанент RadioGroup).

Прыклад 3.17. Стварыць праект для вылічэння дзелі ад дзялення аднаго цэлага ліку на іншы. Лікі задаюцца ў тэкставых палях. Вынік вылічваецца пры націсканні на кнопку «Падзяліць» і змяшчаецца ў трэцяе тэкставае поле. У залежнасці ад стану флажка ў выніку выдаецца цэлае ці рэчыўнае значэнне дзелі.

Этапы выканання задання

  1. Змясціць на форму тры тэкставыя палі, тры надпісы, флажок і кнопку.
  2. Ачысціць палі Text ва ўсіх кампанентаў Edit.
  3. Для кампанента Edit3, у якім будзе выводзіцца адказ, устанавіць значэнне True для ўласцівасці ReadOnly.
  4. Змяніць уласцівасць Caption у кампанентаў Label («Дзеліва», «Дзельнік», «Дзель»).
  5. Змяніць уласцівасць Caption кампанента Button1 на «Падзяліць».
  6. Змяніць уласцівасць Caption кампанента CheckBox1 на «Цэлалікавае дзяленне».
  7. Напісаць апрацоўшчык падзеі OnClick для кампанента Button1.
    7.1. Праверыць, што палі кампанентаў Edit1 і Edit2 не пустыя, калі гэта не так, то вывесці паведамленне «Адно з палёў не запоўнена».
    7.2. Праверыць стан пераключальнiка CheckBox. Калі ён уключаны, то выканаць цэлалікавае дзяленне, інакш звычайнае дзяленне.
    7.3. Вывесці вынік.
  8. Выканайце праграму для розных значэнняў. Праверце работу дадатку, калі адно з палёў Edit1 ці Edit2 (ці абодва палі) пустыя.

Прыклад 3.15. Кампаненты CheckBox (флажок) і RadioButton (радыёкнопка) на форме:

Прыклад 3.16. Уласцівасці кампанента CheckBox (флажок):

Уласцівасць

Прызначэнне

Checked

Значэнне True у гэтай уласцівасці паказвае, што кампанент вылучаны (устаноўлена птушка  — ), пры значэнні False кампанент не вылучаны (пустое акно індыкатара  — )

AllowGrayed

Значэнне False у гэтай уласцівасці (устаноўлена па змоўчанні) дапускае два станы флажка: вылучаны і не вылучаны, значэнне True дапускае тры станы флажка: вылучаны, не вылучаны і прамежкавае

State

Дазваляе выбраць адзін з трох станаў флажка: cbChecked (вылучаны), cbGrayed (прамежкавае значэнне — ) і cbUnchecked (не вылучаны) пры значэнні True ва ўласцівасці AllowGrayed

Caption

Надпіс каля кампанента CheckBox

Alignment

Вызначае, з якога боку кнопкі змяшчаецца надпіс: taLeftJustify (злева), taRightJustify (справа)

Прыклад 3.17. Форма на этапе канструявання:

Апрацоўшчык падзеі OnClick для Button1.

procedure TForm1.Button1Click(Sender: TObject);
var a, b, c : integer;
    d : real;
begin
  if (Edit1.Text <> '') and
     (Edit2.Text <> '') then
  begin
    a := StrToInt(Edit1.Text);
    b := StrToInt(Edit2.Text);
    if CheckBox1.checked then
    begin
      c := a div b;
      Edit3.Text := IntToStr(c);
    end
    else
    begin
      d := a / b;
      Edit3.Text := FloatToStrF(d, ffFixed, 5, 2);
    end;
  end
  else
    ShowMessage('Адно з палёў
                не запоўнена');

end;

Дадатак у час работы:

Дзяленне цалкам

Рэчыўны вынік дзялення

Палі не запоўнены

Пытанні да параграфа

1. Якія кампаненты залічваюць да элементаў кіравання?

2. Як змясціць кампанент на форму?

3. Якія ўласцівасці кампанента Button вы можаце назваць?

4. Якая падзея з'яўляецца асноўнай для кампанента Button?

5. Для чаго прызначаны кампанент Label?

6. У якіх выпадках выкарыстоўваецца кампанент Edit?

7. Для чаго прызначаны кампаненты CheckBox і RadioButton?

Практыкаванні

   

1. Адкрыйце праект з прыкладу 3.9 і дапоўніце яго кнопкай «Ачысціць». Кнопка «Ачысціць»[1]  павінна выдаляць тэкст меткі (Уласцівасці Caption прысвоіць значэнне пустога радка: ""). Зрабіце выпадковым выбар колеру і памеру шрыфту ў меткі.


[1] Пажадана перад змяненнем скапіраваць праект у новую папку.

2. Адкрыйце праект з прыкладу 3.12 і дабаўце на форму тры меткі і дзве кнопкі.

    1. Змяніце ўласцівасці кампанентаў наступным чынам.

Кампанент

Уласцівасць

Значэнне ўласцівасці

Button1

Caption

Так

Button1

Visible

False

Button2

Caption

Не

Button2

Visible

False

Label3

Caption

Вы хочаце працаваць у IT?

Label3

Visible

False

Label4

Caption

Выдатна! Поспехаў у вывучэнні інфарматыкі! Яна Вам спатрэбіцца!

Label4

Visible

False

Label5

Caption

Іншыя прафесіі таксама патрабуюць ведання інфарматыкі.

Label5

Visible

False

2. Дабаўце ў апрацоўшчык падзеі KeyPress каманду,  якая робіць надпіс Label3 і кнопкі бачнымі.

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if key = #13 then
  begin
    Label2.Caption := Edit1.Text + ', прыемна з Вамі пазнаёміцца!';
    Label3.Visible := True;
    Button1.Visible := True;
    Button2.Visible := True;
  end;
end;

3. Напішыце апрацоўшчыкі OnClick для кнопак Button1 і Button2. Зрабіце бачнымі адпаведныя надпісы.

Форма на этапе праектавання

Дадатак, які працуе, пасля запуску

Дадатак, які працуе, да адказу на пытанне

Дадатак, які працуе, пасля адказу на пытанне

4*. Дабаўце ў дадатак яшчэ адно пытанне. Форму адказу выберыце самастойна.

3. Стварыце праект Калькулятар. Змясціце на форме тры тэкставыя палі і тры надпісы: «Першы лік», «Другі лік», «Вынік». Дабавіць кнопкі для вылічэння сумы, рознасці, здабытку і дзелі. Забараніце рэдагаванне ў полі з адказам. * Дабаўце праверку дзялення на нуль.

Форма на этапе праектавання

Дататак у час работы

4. Стварыце праект, у якім вылічваецца даход па ўкладзе. Праграма павінна забяспечваць разлік грашовых сум для простых ці капіталізаваных укладаў. Калі ўклад просты, то кожны месяц налічваецца аднолькавая працэнтная стаўка ад зыходнай сумы. Пры капіталізаваным укладзе налічэнне выконваецца штомесячна ад сумы ўкладу ў папярэднім месяцы.

Спіс кампанентаў

Форма на этапе праектавання

Дадатак у час работы

Праверце, ці запоўнены палі з зыходнымі данымі. Калі не, то выведзіце адпаведнае паведамленне.

5. Рэалізаваць «кнопку, якая ўцякае», г. зн. пры навядзенні паказальніка мышы на кнопку кнопка павінна выпадковым чынам памяняць месца.

6. Дабавіць у практыкаванне 5 кнопку «Дамоў», якая павінна перамясціць «кнопку, якая ўцякае» у верхні левы вугал формы.