Q&A

  • EditBox간에 커서 이동 후 입력이 안됩니다.
알려주신거 잘 이해 했습니다.. 근데, 커서가 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;

이렇게 하면 안되는건가????

값이 입력 되려면 어떻게 해야 되는거에여?

1  COMMENTS
  • Profile
    최용일 2001.04.02 23:54
    안녕하세요. 최용일입니다.



    어떤 코드인지 전혀 이해할 수가 없네요... 그냥 간단히 한번 만들어 봤습니다....



    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;

    > 이렇게 하면 안되는건가????

    > 값이 입력 되려면 어떻게 해야 되는거에여?