§ 20. Стварэнне дадаткаў

20.5. Стварэнне дадатку «Калькулятар»

Стварэнне калькулятара пачнём з канструявання формы. На ёй трэба размясціць: поле Edit для ўводу/вываду лікаў, 10 кнопак з лічбамі, 4 кнопкі з арыфметычнымі дзеяннямі, кнопку «=» і кнопку «С» — ачысціць (прыклад 20.17).

Пры націску на кнопку з лічбай праграма павінна дапісаць гэтую лічбу да ліку ў поле Edit. Пры націску на кнопку з арыфметычным дзеяннем трэба запомніць лік, які ў дадзены момант знаходзіцца ў полі Edit, і ачысціць поле для уводу другога ліку. Лікі будзем захоўваць у дзвюх пераменных n1, n2 тыпу integer. Знак аперацыі будзем захоўваць у пераменнай znak тыпу char. Пераменныя апісваюцца як глабальныя. Пры націску на кнопку «=» выконваецца арыфметычнае дзеянне і выводзіцца вынік.

Для адлюстравання кнопак можна выкарыстоўваць кампанент BitBtn, тады кнопкі могуць змяшчаць малюнак на паверхні (напрыклад, малюнкі з лічбамі). Уласцівасць для размяшчэння малюнка — Glyph.

Устанавіць значэнне bsDialog для ўласцівасці BorderStyle формы. У гэтым выпадку мяжа формы не дазволіць мяняць яе памеры.

Коды функцый апрацоўшчыкаў прыведзены ў прыкладзе 20.18.

Для кожнай кнопкі на форме трэба стварыць апрацоўшчык падзеі OnClick.

Апрацоўшчыкі падзей для ўсіх лічбавых кнопак будуць ідэнтычныя.

Апрацоўшчыкі для кнопак арыфметычных дзеянняў будуць адрознівацца толькі значэннем запамінальнай аперацыі.

Асноўныя вылічэнні адбываюцца ў апрацоўшчыка кнопкі «=». Пераўтворым у лік n2 значэнне поля Edit і выконваем арыфметычную аперацыю ў залежнасці ад значэння пераменнай znak. Пасля гэтага абнуляем пераменныя.

У апрацоўшчыка кнопкі «С» (от англ. clear — ачысціць) адбываецца абнуленне пераменных і ачыстка поля Edit.

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

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

Прыклад 20.18. Апрацоўшчыкі падзей:

//апісанне глабальных пераменных

int n1, n2;

char znak;

 

void __fastcall TForm1::

Button10Click(TObject *Sender)

{

  //прыпісванне лічбы да ліку

  Edit1->Text = Edit1->Text + '0';

}

 

void __fastcall TForm1::

Button1Click(TObject *Sender)

{

  Edit1->Text = Edit1->Text + '1';

}

Для астатніх лічбавых кнопак трэба змяніць толькі '1' на адпаведную лічбу.

void __fastcall TForm1::

Button12Click(TObject *Sender)

{

  n1 = StrToInt(Edit1->Text);

  //запамінанне знака аперацыі

  znak = '+';

  Edit1->Clear();

}

Для астатніх кнопак са знакамі арыфметычных дзеянняў трэба змяніць толькі '+' на адпаведны знак.

void __fastcall TForm1::

Button16Click(TObject *Sender)

{

  n2 = StrToInt(Edit1->Text);

  switch (znak){

  case '+': {

    Edit1->Text = IntToStr(n1 + n2);

    break;

  }

  case '-': {

    Edit1->Text = IntToStr(n1 - n2);

    break;

  }

  case '*': {

    Edit1->Text = IntToStr(n1 * n2);

    break;

  }

  case '/': {

    Edit1->Text = IntToStr(n1 / n2);

      break;

  }

  }

  n1 = 0;

  n2 = 0;

  znak = ' ';

}

 

void __fastcall TForm1::

Button11Click(TObject *Sender)

{

  Edit1->Clear();

  n1 = 0;

  n2 = 0;

  znak = ' ';

}