C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[46087] 지난번에 했던 키보드 입력 질문 ㅜㅜ
대마두 [daemadoo] 977 읽음    2006-08-08 16:07
//---------------------------------------------------------------------------

#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 이벤트를 불러서 밑에서 말씀해주신대로 스위치문을 써도 안되고

도움말에 있는 예제랑 같은 방식으로 해도 안됩니다...

어떤 코드를 넣어야 될까요??

도움 부탁드립니다.

+ -

관련 글 리스트
46087 지난번에 했던 키보드 입력 질문 ㅜㅜ 대마두 977 2006/08/08
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.