Меню сайта
Категории раздела
Простые примеры [34] |
OpenGL [4] |
Фрактал [9] |
Windows API [2] |
Консоль [12] |
ДРУЗЬЯ САЙТА
Вызвать мастера в Красноярске
8 983 207 5474
8 902 918 9334
8 933 332 3164
---------------------------------
Запчасти бытткхники
Радиодетали
Электрика
ЗАКЛАДКИ
Поиск
Статистика
Онлайн всего: 1
Гостей: 1
Пользователей: 0
Главная » Статьи » C++ Builder » Простые примеры |
C++ BUILDER XE2 ПРОСТОЙ КАЛЬКУЛЯТОР-04 ограничение ввода в Edit
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- /* Приводим указатель Sender к типу TButton чтобы добратся до свойства Caption. Проверяем если ptButton->Caption содержит "," и Edit1->Text содержит "," то значит разделитель запятая уже в веден выходим из обработчика */ void __fastcall TForm1::Button1Click(TObject *Sender) { TButton* ptButton; ptButton=static_cast<TButton*>(Sender); if(ptButton->Caption.Pos(",") > 0 && Edit1->Text.Pos(",") > 0 ) return; Edit1->Text = Edit1->Text + ptButton->Caption; } //--------------------------------------------------------------------------- /* Если была сделана ошибка при наборе цифры очищяем её тоесть свойству Edit1->Text присваиваем пустую строку */ void __fastcall TForm1::Button17Click(TObject *Sender) { Edit1->Text = ""; } //--------------------------------------------------------------------------- /* Приводим указатель Sender к типу TButton чтобы добратся до свойства Caption. Свойство Caption содержит знаки операций, присваиваем знак операции переменной znak. Присваиваем (копируем) строку в свойстве Edit1->Text в переменную number1 первая строка цифр сформирована и готова к использованию очищяем свойство Edit1->Text подготавливая его к вводу вторй строки цифр */ void __fastcall TForm1::Button13Click(TObject *Sender) { TButton* ptButton; ptButton=static_cast<TButton*>(Sender); znak = ptButton->Caption; number1 = Edit1->Text; Edit1->Text = ""; } //--------------------------------------------------------------------------- /* Подсчитываем результат Присваиваем (копируем) строку в свойстве Edit1->Text в переменную number2 вторая строка цифр сформирована и готова к использованию Если переменные number1, number2, znak не пустые строки (!= "") то в них содержатся первая,вторая строка цифр и орефметический знак и значит можно переходить к вычислениям если переменная znak равна (==) литеральной константе "+" то будем складывать Сначяло строка цифр number2 преобразуется в вещественное число с помощью функции StrToFloat(number2); далее идёт преобразование StrToFloat(number1); после этого идёт сложение вещественных чисел Полученный результат преобразуется снова в строку с помощю функции FloatToStr */ void __fastcall TForm1::Button12Click(TObject *Sender) { number2 = Edit1->Text; if(number1 != "" & number2 != "" & znak != ""){ if(znak == "+"){Edit1->Text = FloatToStr( StrToFloat(number1) + StrToFloat(number2)); } if(znak == "-"){Edit1->Text = FloatToStr( StrToFloat(number1) - StrToFloat(number2)); } if(znak == "*"){Edit1->Text = FloatToStr( StrToFloat(number1) * StrToFloat(number2)); } if(znak == "/"){Edit1->Text = FloatToStr( StrToFloat(number1) / StrToFloat(number2)); } number2 = ""; znak = ""; number1 = Edit1->Text; return; } number2 = ""; znak = ""; number1 = ""; Edit1->Text = ""; ShowMessage("Не достаточно данных повторите ввод сначала"); } //--------------------------------------------------------------------------- /* обработчик Edit1ContextPopup срабатывает при нажатии правой кнопки мыши в окне Edit1 параметр Handled установленый в true запрещает появление контекстного меню тем самым не довая пользователю ввести что либо из буфера обмена если этого не зделать пользователь мог-бы вставить из буфера обмена любые символы буквы, знаки припенания что привело-бы к ошибке */ void __fastcall TForm1::Edit1ContextPopup(TObject *Sender, TPoint &MousePos, bool &Handled) { Handled = true; } //--------------------------------------------------------------------------- /*
обработчик Edit1KeyPress срабатывает если Edit1 находится в фокусе и пользователь нажимает оду из символьных клавиш параметр Key содержит код нажатой клавиши. Здесь в этом обработчике организована проверка на разрешение ввода допустимых символов. Допустимые символы это цифры, запятая, Backspase(забой относится к символьным клавишам). Первая строка ограничивает ввод запятой можно ввести только одну запятую. Вторая строка разрешает ввод цифр запятой и Backspase. Если не один из if() не отработал то Key присваивается ноль и вывод в Edit1 символа нажатой клавиши не происходит */
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, System::WideChar &Key) { if( Key == ',' && Edit1->Text.Pos(",") > 0 ) { Key=0; return; } if(Key >= '0' && Key <= '9' || Key == VK_BACK || Key == ',') return; Key=0; } //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- #ifndef Unit1H #define Unit1H //--------------------------------------------------------------------------- #include <System.Classes.hpp> #include <Vcl.Controls.hpp> #include <Vcl.StdCtrls.hpp> #include <Vcl.Forms.hpp> //--------------------------------------------------------------------------- class TForm1 : public TForm { __published: // IDE-managed Components TEdit *Edit1; TButton *Button1; TButton *Button2; TButton *Button3; TButton *Button4; TButton *Button5; TButton *Button6; TButton *Button7; TButton *Button8; TButton *Button9; TButton *Button10; TButton *Button11; TButton *Button12; TButton *Button13; TButton *Button14; TButton *Button15; TButton *Button16; TButton *Button17; void __fastcall Button1Click(TObject *Sender); void __fastcall Button17Click(TObject *Sender); void __fastcall Button13Click(TObject *Sender); void __fastcall Button12Click(TObject *Sender); void __fastcall Edit1ContextPopup(TObject *Sender, TPoint &MousePos, bool &Handled); void __fastcall Edit1KeyPress(TObject *Sender, System::WideChar &Key); private: // User declarations public: // User declarations // переменная number1 для хронения первой цифры UnicodeString number1; // переменная number2 для хронения второй цифры UnicodeString number2; // переменная znak для хронения арефметического действия UnicodeString znak; __fastcall TForm1(TComponent* Owner); }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endif | |
Просмотров: 4546 | Рейтинг: 0.0/0 |