알려주신거 잘 이해 했습니다.. 근데, 커서가 edt2로 이동했는데,
값이 입력이 안되는데 왜 그런지...
begin
if edt1.text > '0' then
edt1.text:=(edt1.text+bttn1.caption);
if edt1.text < '0' then
edt1.text:=bttn1.caption;
begin
if lbl1.caption = '+' then
edt2.setfocus;
if lbl1.caption = '-' then
edt2.setfocus;
if lbl1.caption = '*' then
edt2.setfocus;
if lbl1.caption = '/' then
edt2.setfocus;
if edt2.text > '0' then
edt2.text:=(edt2.text+bttn1.caption);
if edt2.text < '0' then
edt2.text:=bttn1.caption;
이렇게 하면 안되는건가????
값이 입력 되려면 어떻게 해야 되는거에여?
어떤 코드인지 전혀 이해할 수가 없네요... 그냥 간단히 한번 만들어 봤습니다....
http://my.netian.com/~leowiz/handels/Calculator.gif
(********************************************************************************)
unit uCalcMain;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ActnList;
type
TFrmMain = class(TForm)
Btn_1: TButton;
Btn_2: TButton;
Btn_3: TButton;
Btn_4: TButton;
Btn_5: TButton;
Btn_6: TButton;
Btn_7: TButton;
Btn_8: TButton;
Btn_9: TButton;
Btn_0: TButton;
Btn_Addition: TButton;
Btn_Division: TButton;
Btn_Init: TButton;
Btn_Multiplication: TButton;
Btn_Run: TButton;
Btn_Subtraction: TButton;
Edt_Value1: TEdit;
Edt_Value2: TEdit;
Edt_Result: TEdit;
Lbl_Equal: TLabel;
Lbl_Operator: TLabel;
procedure Btn_NumClick(Sender: TObject);
procedure Btn_OperationClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Btn_InitClick(Sender: TObject);
procedure FormKeyPress(Sender: TObject; var Key: Char);
procedure Btn_RunClick(Sender: TObject);
private
CurEdit: TEdit; // 현재 키입력이 되는 에디트를 가르키는 변수
end;
var
FrmMain: TFrmMain;
implementation
{$R *.DFM}
// Btn_Init(초기화버튼)의 OnClick 이벤트
procedure TFrmMain.Btn_InitClick(Sender: TObject);
begin
// 세개의 에디트 박스를 초기화한다.
Edt_Value1.Text := '';
Edt_Value2.Text := '';
Edt_Result.Text := '';
// CurEdit를 첫번째 에디트로 설정
CurEdit := Edt_Value1;
end;
// 숫자버튼들(Btn_0, Btn_1, ..., Btn_9)의 OnClick 이벤트
procedure TFrmMain.Btn_NumClick(Sender: TObject);
begin
// 입력 받는 에디트에다가 입력받은 숫자를 넣는다...
// 각각의 버튼들은 Tag속성에 표시되는 문자를 가지고 있다.
// 즉, Btn_0.Tag에는 '0'이란 문자가 들어있다.
// TFrmMain.FormCreate 메소드 참조
CurEdit.Text := CurEdit.Text + Char( TButton(Sender).Tag );
end;
// 연산자버튼들(Btn_Addition, ..., Btn_Division)의 OnClick 이벤트
procedure TFrmMain.Btn_OperationClick(Sender: TObject);
begin
// 입력받는 에디트를 두번째 에디트로 바꾼다.
CurEdit := Edt_Value2;
// 연산자 라벨에 연산자를 쓴다.
// 이것두 위에 설명 참조.
// 예) Btn_Subtraction.Tag에는 '-'문자가 들어있다.
Lbl_Operator.Caption := Char( TButton(Sender).Tag );
// 두번째 에디트로 포커스 변경
CurEdit.SetFocus;
end;
// 실행버튼(Btn_Run)의 OnClick 이벤트
procedure TFrmMain.Btn_RunClick(Sender: TObject);
var
Value1, Value2, Result: Double;
begin
// 두개의 에디트가 비어있지 않아야 연산을 한다.
if (Edt_Value1.Text = '') or (Edt_Value2.Text = '') then
Exit;
// 첫번째 에디트(Edt_Vlue1)의 문자를 숫자로 바꾼다.
Value1 := StrToFloat(Edt_Value1.Text);
// 두번째 에디트(Edt_Vlue2)의 문자를 숫자로 바꾼다.
Value2 := StrToFloat(Edt_Value2.Text);
// 연산자(Lbl_Operator.Caption)의 종류에 따라 연산한다.
Result := 0;
case Lbl_Operator.Caption[1] of
'+': Result := Value1 + Value2;
'-': Result := Value1 - Value2;
'*': Result := Value1 * Value2;
'/': Result := Value1 / Value2;
end;
// 연산된 결과를 결과에디트(Edt_Result)에 넣는다.
Edt_Result.Text := FloatToStr(Result);
end;
// 메인폼(TFrmMain)의 OnCreate 이벤트
procedure TFrmMain.FormCreate(Sender: TObject);
// 아래코드는 맨 밑줄 빼놓고는 디자인타임에 가능하지만 이해를 돕기위해 직접코딩함.
begin
// 각각의 버튼들을 구별하기 위하여 Tag필드에 숫자와 연산자를 넣는다.
Btn_1.Tag := Byte('1');
Btn_2.Tag := Byte('2');
Btn_3.Tag := Byte('3');
Btn_4.Tag := Byte('4');
Btn_5.Tag := Byte('5');
Btn_6.Tag := Byte('6');
Btn_7.Tag := Byte('7');
Btn_8.Tag := Byte('8');
Btn_9.Tag := Byte('9');
Btn_0.Tag := Byte('0');
Btn_Addition.Tag := Byte('+');
Btn_Subtraction.Tag := Byte('-');
Btn_Multiplication.Tag := Byte('*');
Btn_Division.Tag := Byte('/');
// 세개의 에디트를 읽기전용(ReadOnly)로 만들어 폼의 키입력이벤트와 에디트의
// 키입력이벤트가 서로 충돌하지 않게 만든다.
Edt_Value1.ReadOnly := True;
Edt_Value2.ReadOnly := True;
Edt_Result.ReadOnly := True;
// 마우스없이 키보드만으로도 가능하게 하기 위하여 KeyPreview속성을 True로 만든다.
// 이 경우 폼이 눌려진 키보드를 먼저 알 수 있다.
KeyPreview := True;
// 현재 입력받을 에디트를 첫번째 에디트로 설정한다.
CurEdit := Edt_Value1;
end;
// 폼의 OnKeyPress 이벤트
procedure TFrmMain.FormKeyPress(Sender: TObject; var Key: Char);
// 키보드로 눌렀을때도 마우스로 누른것과 똑같이 작동하도록 한다.
begin
case Key of
'0': Btn_0.Click; // 키보드 '0'을 눌렀을때 Btn_0('0' 버튼)을 눌러 마우스와 똑같이 작동하도록 한다.
'1': Btn_1.Click; // 이하 동문.
'2': Btn_2.Click; // "
'3': Btn_3.Click; // "
'4': Btn_4.Click; // "
'5': Btn_5.Click; // "
'6': Btn_6.Click; // "
'7': Btn_7.Click; // "
'8': Btn_8.Click; // "
'9': Btn_9.Click; // "
'+': Btn_Addition.Click; // "
'-': Btn_Subtraction.Click; // "
'*': Btn_Multiplication.Click; // "
'/': Btn_Division.Click; // "
Char(vk_Return): Btn_Run.Click; // 엔터키가 눌려졌을때 실행버튼을 누른다.
end;
end;
end.
(********************************************************************************)
object FrmMain: TFrmMain
Left = 192
Top = 133
BorderIcons = [biSystemMenu]
BorderStyle = bsDialog
Caption = 'Calculator'
ClientHeight = 154
ClientWidth = 241
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -12
Font.Name = '굴림'
Font.Style = []
KeyPreview = True
OldCreateOrder = False
OnCreate = FormCreate
OnKeyPress = FormKeyPress
PixelsPerInch = 96
TextHeight = 12
object Lbl_Operator: TLabel
Left = 56
Top = 40
Width = 6
Height = 12
Caption = '+'
end
object Lbl_Equal: TLabel
Left = 56
Top = 96
Width = 6
Height = 12
Caption = '='
end
object Edt_Value1: TEdit
Left = 8
Top = 8
Width = 109
Height = 20
ImeName = '한국어(한글)'
ReadOnly = True
TabOrder = 0
end
object Edt_Value2: TEdit
Left = 8
Top = 64
Width = 109
Height = 20
ImeName = '한국어(한글)'
ReadOnly = True
TabOrder = 1
end
object Edt_Result: TEdit
Left = 8
Top = 124
Width = 109
Height = 20
ImeName = '한국어(한글)'
ReadOnly = True
TabOrder = 2
end
object Btn_Addition: TButton
Left = 124
Top = 8
Width = 25
Height = 25
Caption = '+'
TabOrder = 3
OnClick = Btn_OperationClick
end
object Btn_1: TButton
Left = 152
Top = 8
Width = 25
Height = 25
Caption = '1'
TabOrder = 4
OnClick = Btn_NumClick
end
object Btn_2: TButton
Left = 180
Top = 8
Width = 25
Height = 25
Caption = '2'
TabOrder = 5
OnClick = Btn_NumClick
end
object Btn_3: TButton
Left = 208
Top = 8
Width = 25
Height = 25
Caption = '3'
TabOrder = 6
OnClick = Btn_NumClick
end
object Btn_Subtraction: TButton
Left = 124
Top = 36
Width = 25
Height = 25
Caption = '-'
TabOrder = 7
OnClick = Btn_OperationClick
end
object Btn_4: TButton
Left = 152
Top = 36
Width = 25
Height = 25
Caption = '4'
TabOrder = 8
OnClick = Btn_NumClick
end
object Btn_5: TButton
Left = 180
Top = 36
Width = 25
Height = 25
Caption = '5'
TabOrder = 9
OnClick = Btn_NumClick
end
object Btn_6: TButton
Left = 208
Top = 36
Width = 25
Height = 25
Caption = '6'
TabOrder = 10
OnClick = Btn_NumClick
end
object Btn_Multiplication: TButton
Left = 124
Top = 64
Width = 25
Height = 25
Caption = '*'
TabOrder = 11
OnClick = Btn_OperationClick
end
object Btn_7: TButton
Left = 152
Top = 64
Width = 25
Height = 25
Caption = '7'
TabOrder = 12
OnClick = Btn_NumClick
end
object Btn_8: TButton
Left = 180
Top = 64
Width = 25
Height = 25
Caption = '8'
TabOrder = 13
OnClick = Btn_NumClick
end
object Btn_9: TButton
Left = 208
Top = 64
Width = 25
Height = 25
Caption = '9'
TabOrder = 14
OnClick = Btn_NumClick
end
object Btn_Division: TButton
Left = 124
Top = 92
Width = 25
Height = 25
Caption = '/'
TabOrder = 15
OnClick = Btn_OperationClick
end
object Btn_0: TButton
Left = 152
Top = 92
Width = 81
Height = 25
Caption = '0'
TabOrder = 16
OnClick = Btn_NumClick
end
object Btn_Init: TButton
Left = 124
Top = 120
Width = 53
Height = 25
Caption = '초기화'
TabOrder = 17
OnClick = Btn_InitClick
end
object Btn_Run: TButton
Left = 180
Top = 120
Width = 53
Height = 25
Caption = '실행'
TabOrder = 18
OnClick = Btn_RunClick
end
end
^^ 항상 즐코하세요...
진짜왕초보! wrote:
> 알려주신거 잘 이해 했습니다.. 근데, 커서가 edt2로 이동했는데,
> 값이 입력이 안되는데 왜 그런지...
> begin
> if edt1.text > '0' then
> edt1.text:=(edt1.text+bttn1.caption);
> if edt1.text < '0' then
> edt1.text:=bttn1.caption;
> begin
> if lbl1.caption = '+' then
> edt2.setfocus;
> if lbl1.caption = '-' then
> edt2.setfocus;
> if lbl1.caption = '*' then
> edt2.setfocus;
> if lbl1.caption = '/' then
> edt2.setfocus;
> if edt2.text > '0' then
> edt2.text:=(edt2.text+bttn1.caption);
> if edt2.text < '0' then
> edt2.text:=bttn1.caption;
> 이렇게 하면 안되는건가????
> 값이 입력 되려면 어떻게 해야 되는거에여?