| код написан в CodeGear 2007 C++ Builder!
пытаюсь отработать нажатие клавиши ентер в едит1!
проблема в следующем! если в нормальном калькуляторе ввести с клавы первое значение 10 потом нажать минус 1 а потом ентер то с каждым нажатием ентера результирующее значение уменьшается на 1! А у меня ток один раз а потом либо 0 либо результирующее значение
привожу код:
размещение класса
ClassCalc.H
//---------------------------------------------------------------------------
#ifndef ClassCalkH
#define ClassCalkH
//---------------------------------------------------------------------------
class TCalcPressKey
{
public:
char SIMVOL;
float PERVOE_ZNACHENIE,VTOROE_ZNACHENIE,TOTAL,TEMP_BUUF;
int COUNT_PRESS_BUTTON_NUMBER, COUNT_PRESS_SIMVOL_NUMBER;
CalcPressKey();
float KALKULATOR(char SIMVOL, float PERVOE_ZNACHENIE,float VTOROE_ZNACHENIE,float TOTAL,float TEMP_BUUF);
};
//---------------------------------------------------------------------------
#endif
|
размещение методов
ClassCalc.cpp
//---------------------------------------------------------------------------
#pragma hdrstop
#include "ClassCalk.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
//---------------------------------------------------------------------------
float TCalcPressKey::KALKULATOR(char SIMVOL, float PERVOE_ZNACHENIE,
float VTOROE_ZNACHENIE,float TOTAL,float TEMP_BUUF)
{
TEMP_BUUF = PERVOE_ZNACHENIE;
switch(SIMVOL)
{
case '-':TOTAL = PERVOE_ZNACHENIE - VTOROE_ZNACHENIE; break; // Minus
case '+':TOTAL = PERVOE_ZNACHENIE + VTOROE_ZNACHENIE; break;
case '*':TOTAL = PERVOE_ZNACHENIE * VTOROE_ZNACHENIE; break;
case '/':TOTAL = PERVOE_ZNACHENIE / VTOROE_ZNACHENIE; break;
}
return TOTAL;
}
TCalcPressKey::CalcPressKey()
{
PERVOE_ZNACHENIE = 0;
VTOROE_ZNACHENIE = 0;
TOTAL = 0;
COUNT_PRESS_BUTTON_NUMBER = 0;
COUNT_PRESS_SIMVOL_NUMBER = 0;
SIMVOL = ' ';
}
|
заголовочный файл главной формы
[code]
--------------------------------------------------------------------------
//---------------------------------------------------------------------------
#ifndef CalcUnitH
#define CalcUnitH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <XPMan.hpp>
#include "ClassCalk.h"
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TEdit *Edit1;
TButton *BT0;
TButton *BTPoint;
TButton *BTEgal;
TButton *BT1;
TButton *BT2;
TButton *BT3;
TButton *BT4;
TButton *BT5;
TButton *BT6;
TButton *BT7;
TButton *BT8;
TButton *BT9;
TButton *BTPlus;
TButton *BTDelenie;
TButton *BTMP;
TButton *BTMinus;
TButton *BTUmnuj;
TButton *BTClear;
TXPManifest *XPManifest1;
void __fastcall Edit1Change(TObject *Sender);
void __fastcall Edit1KeyPress(TObject *Sender, char &Key);
void __fastcall Edit1KeyDown(TObject *Sender, WORD &Key, TShiftState Shift);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
//=========MyClass Declaration====Start=================================
TCalcPressKey CalcPressKey();
TCalcPressKey MY_CALK;
float KALKULATOR(char SIMVOL, float PERVOE_ZNACHENIE,float VTOROE_ZNACHENIE,float TOTAL,float TEMP_BUUF);
//=========MyClass Declaration====End =================================
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
[/code
Срр файл главной формы ! в нем и отрыбатываем!
[code]
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include<winuser.h> SysUtils.hpp
#include "SysUtils.hpp"
#include "CalcUnit.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
TForm1* CalcPressKey();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit1Change(TObject *Sender)
{
MY_CALK.COUNT_PRESS_BUTTON_NUMBER=1;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
//-----------------najatie ravno----------------end
if ((Key >= '0') && (Key <= '9'))
{
return ;
}
else
Key = 0;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit1KeyDown(TObject *Sender, WORD &Key,
TShiftState Shift)
{
//-----------------Najatie +,-,*,/, ----------------Start
if(Key == 189)
{
MY_CALK.COUNT_PRESS_BUTTON_NUMBER = 2;
MY_CALK.SIMVOL = '-';
MY_CALK.PERVOE_ZNACHENIE = StrToFloat(Edit1->Text);
Edit1->Text=' ';
}
//-------------------------------------------------
if(Key == 187)
{
MY_CALK.COUNT_PRESS_BUTTON_NUMBER = 2;
MY_CALK.SIMVOL = '+';
MY_CALK.PERVOE_ZNACHENIE = StrToFloat(Edit1->Text);
Edit1->Text=' ';
}
//-------------------------------------------------
if(Key == 191)
{
MY_CALK.COUNT_PRESS_BUTTON_NUMBER = 2;
MY_CALK.SIMVOL = '/';
MY_CALK.PERVOE_ZNACHENIE = StrToFloat(Edit1->Text);
Edit1->Text=' ';
}
//-------------------------------------------------
if(Key == 56)
{
MY_CALK.COUNT_PRESS_BUTTON_NUMBER = 2;
MY_CALK.SIMVOL = '*';
MY_CALK.PERVOE_ZNACHENIE = StrToFloat(Edit1->Text);
Edit1->Text=' ';
}
//-----------------Najatie +,-,*,/, ------------End
//<-------------------------------------------------------------------->
//-----------------najatie ravno--------------start
if(Key ==13)
{
int count=1;
if(MY_CALK.COUNT_PRESS_BUTTON_NUMBER ==1 && count==1)
{
MY_CALK.VTOROE_ZNACHENIE= StrToFloat(Edit1->Text);
MY_CALK.TEMP_BUUF = MY_CALK.VTOROE_ZNACHENIE;
MY_CALK.TOTAL=MY_CALK.KALKULATOR(MY_CALK.SIMVOL,MY_CALK.PERVOE_ZNACHENIE,MY_CALK.VTOROE_ZNACHENIE,
MY_CALK.TOTAL,MY_CALK.TEMP_BUUF);
Edit1->Text= FloatToStr(MY_CALK.TOTAL);
MY_CALK.PERVOE_ZNACHENIE = StrToFloat(Edit1->Text);
MY_CALK.VTOROE_ZNACHENIE = MY_CALK.TEMP_BUUF;
ShowMessage("Srabotal IF");
count=2;
}
if(MY_CALK.COUNT_PRESS_BUTTON_NUMBER ==1 && count==2)
{
ShowMessage("Srabotal else");
MY_CALK.VTOROE_ZNACHENIE = MY_CALK.TEMP_BUUF;
MY_CALK.TOTAL=MY_CALK.KALKULATOR(MY_CALK.SIMVOL,MY_CALK.PERVOE_ZNACHENIE,MY_CALK.VTOROE_ZNACHENIE,
MY_CALK.TOTAL,MY_CALK.TEMP_BUUF);
Edit1->Text= FloatToStr(MY_CALK.TOTAL);
MY_CALK.PERVOE_ZNACHENIE = StrToFloat(Edit1->Text);
count = 1;
}
}
}
//---------------------------------------------------------------------------
[/code
на событии OnChange компанента едит я инициализирую переменую счетчик (MY_CALK.COUNT_PRESS_BUTTON_NUMBER) имитирующую нажатия кнопки еденицей! ( 1= цифра. 2= символ +,-,*,/.)
далее на событии кейпрес при обработке нажатия +,-,*,/. эта же переменная получает значение 2
все остальное нужно смотреть на нажатие равно(ENTER)!
мне думается трабла в нажатии на ентер! значение переменной постоянно задается из едита! как с этим боротся! зафиксировать чтоли значения!
то что код на борланде это не смущает главное правильное решение путем С++
за ранее огромное спс!
прошу не пинать! ток начал изучать классы :) | |