DELPHI/Sample Source

[delphi / Calculator] 델파이 기반 제작 계산기 Sample Source

Kim.Sung 2021. 1. 16. 13:42
728x90

※ 2017년도에 이유는 모르지만 제작 했던 델파이 기반 계산기 입니다.

※ 당시에 Delphi2008로 코딩 했던것 같다.

 

1. 실행 화면

※ 당시에 윈도우 계산기와 비슷하게 제작 하려고 했던 것 같다.

 

2. 계산기 부분 Sample Source 

※ 필요 하신 부분이 있으시면 참고용으로 봐주시면 될 듯 하다.

※ 혹시 전체적인 Source 가 필요하신분은 댓글을 달아 주시면 전달 드릴 수 있도록 하겠습니다.

 

// 숫자 클릭했을 때
function TForm_calc.NumberClick(Temp:Integer):Integer;
begin
  // 계산 한번 끝나고 숫자입력시 All Clear
  if Calc_Seq = 20 then
  begin
    Btn_CClick(nil);
  end;


  // 소수점 없음
  if Dot = False then
  begin
    if Result_new = 0 then
    begin
      Result_new := Temp;
    end else
    begin
      Result_new := Result_new * 10 + Temp;
    end;
    Label_Result.Caption := FloatToStr(Result_new);
  end else

  // 소수점 있음
  if Dot = True then
  begin
    if Result_new = 0 then
    begin
      Result_new := Temp * 0.1;
      Dot_Num := Dot_Num * 0.1;
    end else
    begin
      Result_new := Result_new + Temp * (Dot_Num*0.1);
      Dot_Num := Dot_Num * 0.1;
    end;
    Label_Result.Caption := FloatToStr(Result_new);
  end;

  Edit_Focus.SetFocus;
end; 

 

procedure TForm_Calc.Timer1Timer(Sender: TObject);
begin

  Case Calc_Seq of
    0: // 숫자입력
    begin
      // 라벨 수식 초기화
      Label_Old.Caption := '';

      if Calc_var <> 0 then
      begin
        Calc_Seq := 1;
      end;
    end;

    1: // 사칙연산
    begin
      if Result_old = 0 then
      begin
        Result_old := Result_new;
      end else
      begin
        //
      end;
      Result_new := 0;
      Dot := False;
      // 라벨 수식 표시
      Label_Old.Caption := Label_Old.Caption + FloatToStr(Result_old);
      if Calc_var = 1 then Label_Old.Caption := Label_Old.Caption + '+';
      if Calc_var = 2 then Label_Old.Caption := Label_Old.Caption + '-';
      if Calc_var = 3 then Label_Old.Caption := Label_Old.Caption + '*';
      if Calc_var = 4 then Label_Old.Caption := Label_Old.Caption + '/';

      Calc_Seq := 10;
    end;

    10: // 계산하기
    begin

      // 계산이 하나다
      if Equal_Click = True then
      begin
        Calc_Seq := 11;
      end;

      // 계산이 여러개
      if Calc_Add = True then
      begin
        Calc_Seq := 12;
      end;

    end;

    11: // 실제 계산 부분 - 계산이 한개
    begin
      Label_Old.Caption := Label_Old.Caption + FloatToStr(Result_new);
      // +
      if Calc_var = 1 then
      begin
        Result_new := Result_old + Result_new;
        Result_old := Result_new; // 다음 계산을 위한 저장
      end;

      // -
      if Calc_var = 2 then
      begin
        Result_new := Result_old - Result_new;
        Result_old := Result_new; // 다음 계산을 위한 저장
      end;

      // *
      if Calc_var = 3 then
      begin
        Result_new := Result_old * Result_new;
        Result_old := Result_new; // 다음 계산을 위한 저장
      end;

      // div
      if Calc_var = 4 then
      begin
        Result_new := Result_old / Result_new;
        Result_old := Result_new; // 다음 계산을 위한 저장
      end;
      //
      Label_Result.Caption := FloatToStr(Result_new);
      Result_new := 0;
      Dot := False;
      Calc_var := 0;
      Equal_Click := False;

      Calc_Seq := 20;
    end;

    12: // 계산이 여러개
    begin
      // 라벨 수식 표시
      Label_Old.Caption := Label_Old.Caption + FloatToStr(Result_new);
      if Calc_var = 1 then Label_Old.Caption := Label_Old.Caption + '+';
      if Calc_var = 2 then Label_Old.Caption := Label_Old.Caption + '-';
      if Calc_var = 3 then Label_Old.Caption := Label_Old.Caption + '*';
      if Calc_var = 4 then Label_Old.Caption := Label_Old.Caption + '/';

      // +
      if Calc_var_old = 1 then
      begin
        Result_new := Result_old + Result_new;
        Result_old := Result_new; // 다음 계산을 위한 저장
      end;

      // -
      if Calc_var_old = 2 then
      begin
        Result_new := Result_old - Result_new;
        Result_old := Result_new; // 다음 계산을 위한 저장
      end;

      // *
      if Calc_var_old = 3 then
      begin
        Result_new := Result_old * Result_new;
        Result_old := Result_new; // 다음 계산을 위한 저장
      end;

      // div
      if Calc_var_old = 4 then
      begin
        Result_new := Result_old / Result_new;
        Result_old := Result_new; // 다음 계산을 위한 저장
      end;
      //
      Label_Result.Caption := FloatToStr(Result_new);
      Result_new := 0;
      Dot := False;
      //Calc_var := 0;
      //Equal_Click := False;
      Calc_Add := False;

      Calc_Seq := 10;
    end;

    13:
    begin
      // 계산이 하나다
      if Equal_Click = True then
      begin
        Calc_Seq := 11;
      end;

      // 계산이 여러개
      if Calc_Add = True then
      begin
        Calc_Seq := 12;
      end;
    end;

    20: // 계산 한번 끝나고 대기
    begin
      if Calc_var <> 0 then
      begin
     // 라벨 수식 표시
        Label_Old.Caption := Label_Old.Caption + FloatToStr(Result_old);
        if Calc_var = 1 then Label_Old.Caption := Label_Old.Caption + '+';
        if Calc_var = 2 then Label_Old.Caption := Label_Old.Caption + '-';
        if Calc_var = 3 then Label_Old.Caption := Label_Old.Caption + '*';
        if Calc_var = 4 then Label_Old.Caption := Label_Old.Caption + '/';
        Calc_Seq := 21;
      end;
    end;

    21:
    begin
      if Equal_Click = True then
      begin
        Calc_Seq := 22;
      end;
    end;

    22:
    begin
      // +
      if Calc_var = 1 then
      begin
        Result_new := Result_old + Result_new;
        Result_old := Result_new; // 다음 계산을 위한 저장
      end;

      // -
      if Calc_var = 2 then
      begin
        Result_new := Result_old - Result_new;
        Result_old := Result_new; // 다음 계산을 위한 저장
      end;

      // *
      if Calc_var = 3 then
      begin
        Result_new := Result_old * Result_new;
        Result_old := Result_new; // 다음 계산을 위한 저장
      end;

      // div
      if Calc_var = 4 then
      begin
        Result_new := Result_old / Result_new;
        Result_old := Result_new; // 다음 계산을 위한 저장
      end;
      //
      Label_Result.Caption := FloatToStr(Result_new);
      Result_new := 0;
      Dot := False;
      Calc_var := 0;
      Equal_Click := False;

      Calc_Seq := 20;
    end;
  end;
end;

728x90