Форум: Форум C++Разное
Новые темы: 00
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: создание калькулятора! нажатие ентер! - запутался
 
 автор: XPyCT   (24.07.2008 в 09:28)   письмо автору
 
 

код написан в 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)!

мне думается трабла в нажатии на ентер! значение переменной постоянно задается из едита! как с этим боротся! зафиксировать чтоли значения!

то что код на борланде это не смущает главное правильное решение путем С++

за ранее огромное спс!
прошу не пинать! ток начал изучать классы :)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования