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

Задача 11. Калькулятор-2

Эта программа (рис. 16) демонстрирует создание компонентов во время работы программы или, как иногда говорят, "в коде". Кнопки калькулятора — это объединенные в массив компоненты SpeedButton. Создание и настройку кнопок выполняет конструктор формы, он же определяет (задает) процедуру обработки события click.Следует обратить внимание, что объявление массива компонентов speedButton и функции обработки события click находится в объявлении типа формы, в заголовочном файле.

Рис 16

Вывод: При выполнении этого задания мы выяснили, что создание и настройку кнопок может выполнять конструктор формы, им же можно задать процедуру обработки события click.

Листинг

// о&ьявление формы - фрагмент h-файла c l a s s TForml : p u b l i c TForm published: TStaticText *StaticTextl; //индикатор 44 Часть 1.Примерыи задачи p r i v a t e : // ** эти объявления вставлены сюда вручную ** TSpeedButton * btn[16]; // кнопки // процедура обработки события Click на кнопке void fastcall btnClick(TObject *Sender); public: fastcall TForml (TComponent* Ownejr) ; // *** модуль формы *** float ас; // аккумулятор (первый операнд) int op; //операция int fd; /* fd == 0 - ждем первую цифру числа, например, после того, как была нажата клавиша "+"; fd = 1 - ждем ввода следующей цифры или нажатия клавиши операции*/ #define WBTN 35 // ширинакнопки #define HBTN 20 // высотакнопки #define DXBTN 6 // шаг кнопок по X #define DYBTN 6 // шаг кнопок по Y // текст на кнопке Char btnText[] = "789+456-123=00.с"; #define CM -1 // запятая #define EQ -2 // "=" ttdefine PL -3 // "+" #define MN -4 // "-" #define CL -5 // "C" t // идентификатор кнопки int btnTagU = {7,8,9,PL,4,5,6,MN,1,2,3,EQ,0,0,CM,CL} Базовые компоненты 45 // конструктор формы fastcall TForml::TForml(TComponent* Owner) : TForm(Owner) { int left, top; // положение кнопки top = 48; int к = 0; // индекс массива btn for ( int i = 0; i < 4; i++ ) // четыре ряда кнопок { left = 8; for ( int j = 0; j < 4; j++) // no 4 в каждомряду { btn [к] = new TSpeedButton{Forml),- btn[k]->Parent = Forml; // "посадить" кнопку на // форму // настройка кнопки btn[k]->Left = left; btn[k]->Top = top; btn[k]->Width = WBTN; btn[k]->Height = HBTN; //btn[k]->Flat= true; btn[k]->Font->Color = clNavy; btn[k]->Caption = btnText[k]; // текст на кнопке btn[k]->Tag = btnTag[k]; // идентификатор кнопки // задать процедуру обработки события Click btn[k]->OnClick = btnClick; // см. объявлениев // h-файле формы left = left + WBTN+ DXBTN; 46 Часть 1.Примерыизадачи top = top + HBTN + DYBTN; } / / объединитьдве кнопки "О" (btn[12] и btn[13]) в одну btn[13]->Visible = false; btn[12]->Width = 2 * WBTN + DXBTN; op = EQ; // Щелчок кнопкеbtn[i] // ( одна процедура для всех кнопок ) void fastcall TForml::btnClick(TObject *Sender) { TSpeedButton *btn; int id; // идентификаторнажатойкнопки btn = (TSpeedButton*(Sender; // свойство Tag кнопки содержит ее идентификатор id = btn->Tag; // кнопка "1" .. "9" if ( id > 0 ) { if ( fd == 0 ) { StaticTextl->Caption = btn->Tag; fd = 1; } else StaticTextl->Caption = StaticTextl->Caption + btn->Tag; return; // кнопка "О" if ( id == 0) { if ( StaticTextl->Caption != "0" ) StaticTextl->Caption = Базовыекомпоненты 47 StaticTexCl->Caption + btn->Tag; return; } / / кнопка "," if ( id == CM) { if ( StaticTextl->Caption.Pos(",") == 0 ) { StaticTextl->Caption = StaticTextl->Caption + ","; fd = 1; } return; } / / кнопка "с" if ( id == CL) { ac = 0; id = EQ; fd = 0; StaticTextl->Caption = 0; return; } // остальныекнопки: "+", "-" и "=" float op2; // операнд (числонаиндикаторе ) ор2 = StrToFloat(StaticTextl->Caption); /* гаккакнажатаклавишаоперации, тоэтозначит, чтонадовыполнитьпредыдущуюоперацию, кодкоторой находитсявпеременнойор */ switch (op) { case EQ : ас = op2; break; case PL : ac = ac + op2; break; case MN : ac = ac - op2; break; } StaticTextl->Caption = FloatToStrF(ac,ffGeneral,15,6); op = id; // запомнитьтекущуюоперацию 48 Часть 1. Примерыизадачи fd = 0; // ждемновоечисло // деструкторформы void fastcall TForml::FormDestroy(TObjееt *Sender) // уничтожитькомпоненты, созданныепрограммой for ( int i = 0; i < 16; i++) delete btn[i];