Суббота, 18.05.2024, 20:31
Главная Регистрация RSS
Приветствую Вас, Гость
Меню сайта
Категории раздела
Форма входа
ДРУЗЬЯ САЙТА

Вызвать мастера в Красноярске

8 983 207 5474

8 902 918 9334

8 933 332 3164

---------------------------------

Запчасти бытткхники

  • Велес т.2935600
  • СЦ Близнецов т.2296595
  • Вираж
  • Красраб 110 т.2589503
  • Комплекстур Щорса30 т.2606797
  • Радиодетали

  • Якорный 9 т.2688317
  • Воронова 16 т.2202990
  • Красраб 125а т.2456544
  • Профи т.2702737
  • Дайте две т.+79237713323
  • Электрика

  • Электро +
  • Планета электрика
  • ЗАКЛАДКИ
    Поиск
    Статистика

    Онлайн всего: 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


    Категория: Простые примеры | Добавил: doka (09.03.2012)
    Просмотров: 4546 | Рейтинг: 0.0/0
    Добавлять комментарии могут только зарегистрированные пользователи.
    [ Регистрация | Вход ]