|
//---------------------------------------------------------------------------
#include <vcl.h>
#include <math.h>
#include <stdlib.h>
#pragma hdrstop
#include "Main.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfrmMain *frmMain;
double Pre_Num; //처음 입력한 숫자를 기억하는 변수
double Mem_Num = 0; //메모리기능을 위해 숫자를 기억하는 변수
bool Dot_Check; // 소수점 입력을 체크하는 변수
bool InNew; // 처음 숫자 입력인자를 체크하는 변수
AnsiString Operator; // 선택한 연산자를 기억하는 변수
//---------------------------------------------------------------------------
__fastcall TfrmMain::TfrmMain(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::FormCreate(TObject *Sender)
{
Pre_Num = 0;
Dot_Check = false;
InNew = true;
Operator = "";
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btn7Click(TObject *Sender)
{
if (InNew) {
Sign->Caption = "";
InNew = false;
}
if (Sign->Caption == "0")
Sign->Caption = "7";
else
Sign->Caption = Sign->Caption + "7";
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btn8Click(TObject *Sender)
{
if (InNew) {
Sign->Caption = "";
InNew = false;
}
if (Sign->Caption == "0")
Sign->Caption = "8";
else
Sign->Caption = Sign->Caption + "8";
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btn9Click(TObject *Sender)
{
if (InNew) {
Sign->Caption = "";
InNew = false;
}
if (Sign->Caption == "0")
Sign->Caption = "9";
else
Sign->Caption = Sign->Caption + "9";
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btn4Click(TObject *Sender)
{
if (InNew) {
Sign->Caption = "";
InNew = false;
}
if (Sign->Caption == "0")
Sign->Caption = "4";
else
Sign->Caption = Sign->Caption + "4";
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btn5Click(TObject *Sender)
{
if (InNew) {
Sign->Caption = "";
InNew = false;
}
if (Sign->Caption == "0")
Sign->Caption = "5";
else
Sign->Caption = Sign->Caption + "5";
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btn6Click(TObject *Sender)
{
if (InNew) {
Sign->Caption = "";
InNew = false;
}
if (Sign->Caption == "0")
Sign->Caption = "6";
else
Sign->Caption = Sign->Caption + "6";
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btn1Click(TObject *Sender)
{
if (InNew) {
Sign->Caption = "";
InNew = false;
}
if (Sign->Caption == "0")
Sign->Caption = "1";
else
Sign->Caption = Sign->Caption + "1";
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btn2Click(TObject *Sender)
{
if (InNew) {
Sign->Caption = "";
InNew = false;
}
if (Sign->Caption == "0")
Sign->Caption = "2";
else
Sign->Caption = Sign->Caption + "2";
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btn3Click(TObject *Sender)
{
if (InNew) {
Sign->Caption = "";
InNew = false;
}
if (Sign->Caption == "0")
Sign->Caption = "3";
else
Sign->Caption = Sign->Caption + "3";
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btn0Click(TObject *Sender)
{
if (InNew) {
Sign->Caption = "";
InNew = false;
}
// 새로운 숫자 데이터 입력이면 Label1에 표시된 문자열을 지운다.
if (Sign->Caption == "0")
return;
// 현재 Label1에 표시된 문자열이 "0"이면 이벤트 처리 함수를 종료한다.
else
Sign->Caption = Sign->Caption + "0";
// 현재 Label1에 표시된 문자열이 "0"이 아니면 문자열 "0"을 더한다.
// 예를 들어 "1"이 표시되어 있으면 Label1에 표시된 문자열을 "10"으로 만든다.
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btnCClick(TObject *Sender)
{
Sign->Caption = "0";
FormCreate(this);
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btnCEClick(TObject *Sender)
{
Sign->Caption = "0";
Dot_Check = false;
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btnDotClick(TObject *Sender)
{
if (InNew) {
Sign->Caption = "";
InNew = false;
}
if (Dot_Check) return;
// "." 입력이 있었으면 함수를 종료한다.
Sign->Caption = Sign->Caption + ".";
// "."가 입력되어 있지 않으면 Label1의 속성에 입력되어 있는 문자열에 "."를 더한다.
Dot_Check = true;
// "."를 Label1의 Caption 문자열에 더한 후 "." 문자를 입력했다는 표시를
// Dot_Check 변수에 저장한다.
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btnMulClick(TObject *Sender)
{
Pre_Num = StrToFloat(Sign->Caption);
InNew = true;
Dot_Check = false;
Operator = btnMul->Caption ;
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btnDivClick(TObject *Sender)
{
Pre_Num = StrToFloat(Sign->Caption);
InNew = true;
Dot_Check = false;
Operator = btnDiv->Caption ;
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btnMinusClick(TObject *Sender)
{
Pre_Num = StrToFloat(Sign->Caption);
InNew = true;
Dot_Check = false;
Operator = btnMinus->Caption ;
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btnPlusClick(TObject *Sender)
{
Pre_Num = StrToFloat(Sign->Caption);
InNew = true;
Dot_Check = false;
Operator = btnPlus->Caption ;
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btnEqualClick(TObject *Sender)
{
AnsiString Temp = Sign->Caption;
if (Operator == "/") {
Sign->Caption = FloatToStr((Pre_Num / StrToFloat(Temp)));
} else if(Operator == "*") { // 나누기 연산 결과를 출력한다.
Sign->Caption = FloatToStr((Pre_Num * StrToFloat(Temp)));
} else if(Operator == "+") { // 곱하기 연산 결과를 출력한다.
Sign->Caption = FloatToStr((Pre_Num + StrToFloat(Temp)));
} else if(Operator == "-") { // 더하기 연산 결과를 출력한다.
Sign->Caption = FloatToStr((Pre_Num - StrToFloat(Temp)));
}
FormCreate(this);
// 모든 변수를 초기화 한다.
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btnsqrtClick(TObject *Sender)
{
Pre_Num = StrToFloat(Sign->Caption);
if (Pre_Num >= 0)
Sign->Caption = FloatToStr(sqrt(Pre_Num));
else
Sign->Caption = "이 함수에 맞는 입력이 아닙니다.";
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btnPMClick(TObject *Sender)
{
Pre_Num = StrToFloat(Sign->Caption);
if (Pre_Num == 0)
Sign->Caption = FloatToStr(Pre_Num);
else
Sign->Caption = FloatToStr(Pre_Num * -1);
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btn1perxClick(TObject *Sender)
{
Pre_Num = StrToFloat(Sign->Caption);
if (Pre_Num == 0)
Sign->Caption = "0으로 나눌 수 없습니다.";
else
Sign->Caption = FloatToStr(1 / Pre_Num);
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btnPerClick(TObject *Sender)
{
if (Operator=="*") {
Sign->Caption = FloatToStr(Pre_Num * (StrToFloat(Sign->Caption) / 100));
FormCreate(this);
}
else
Sign->Caption = FloatToStr(Pre_Num * (StrToFloat(Sign->Caption) / 100));
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btnMSClick(TObject *Sender)
{
if (Sign->Caption == "0")
return;
else {
Mem_Num = StrToFloat(Sign->Caption);
Msign->Caption = "M";
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btnMRClick(TObject *Sender)
{
Sign->Caption = FloatToStr(Mem_Num);
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btnMCClick(TObject *Sender)
{
Msign->Caption = "";
Mem_Num = 0;
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btnMPClick(TObject *Sender)
{
Mem_Num += StrToFloat(Sign->Caption);
}
//---------------------------------------------------------------------------
지금 짜고 있는 윈도우에 포함된 계산기와 같은 계산기의 소스 입니다...
여기서 도움좀 받구 해서 키보드 입력과 백스페이스만 빼고 거의 완성된 상태인데요.....
키보드 입력이 죽으라고 안되네요...
만약 숫자 0을 키보드에서 누르면 btn0Click 함수를 부르고
1을 누르면 btn1Click 함수를 호출하면 될꺼라고 생각하여 해보았는데....
OnKeyDown 이벤트를 불러서 밑에서 말씀해주신대로 스위치문을 써도 안되고
도움말에 있는 예제랑 같은 방식으로 해도 안됩니다...
어떤 코드를 넣어야 될까요??
도움 부탁드립니다.
|