Q&A

  • 비베처럼 인덱스를 이용한 버튼이벤트 간략처리 질문...
밑에 질문을 했었지만... 제가 질문시 설명을 잘 못하였는지 원하는 답이 아닌듯 싶어서 질문 드립니다...
아.. 그전에 밑에 질문에 답변주신분들 감사합니다 ^^!

지금 계산기를 만들어볼까 하는데..
비쥬얼 베이직을 공부할때 만들어 보았기 때문에 델파이를 공부하는데 있어 처음 프로그래밍 시작하기에 적합한것 같아서 선정 했습니다..

제가 비베에서 계산기를 만들시에 여러개의 버튼이벤트를 간략화 하기위해,
0~9까지의 버튼객체 네임을 btnNum으로 통일... 인덱스만을 0~9로 설정후,
btnNum의 클릭이벤트에서 인덱스값을 넘김으로써 어떤숫자의 버튼이 눌렸는지를 판단했었습니다

델파이에서 인덱스를 찾아보니 인덱스라는것이 없더군요...
그래서 객체네임을 동일하게 하려했지만 그것도 할 수 없었습니다
어떤분께서 태그를 다르게 설정하라는 답변에 태그를 다르게 설정후 해보았지만 마찬가지더군요..

만약 인덱스 기법처럼 한개의 이벤트프로시져로 0~9까지의 버튼을 판단할 수 없다면 0~9까지의 버튼이벤트를 만들어야하는...

어떤분의 답변에 의해 간추려 보건데...
객체를 배열로 생성시에 한개의 이벤트 프로시져로 0~9까지의 버튼값을 넘길 수 있나요?

위의 방법이 아니라도 한개의 프로시져로 0~9까지의 버튼을 판단, 값을 처리할 수 있는 방법이 있다면 가르쳐 주시면 감사하겠습니다.

약간의 예제코딩을 해주시면 더욱 감사드리겠지만^^;;;

그럼 항상 즐코하시길 바랍니다!
5  COMMENTS
  • Profile
    열심히 2003.02.20 07:01
    그냥 9개 생성하시고 하나의 이벤트를 가지고 9개의 버턴에

    넣어주는 건 하셨죠??

    그렇게만 되면 간단합니다..

    이벤트에 넘어오는 것중에 Sender 라는 넘이 있습니다..

    이놈이 바로 언넘이 이 이벤트를 호출해주는지 분간해 주는것이지요..

    그래서 코딩을 하면

    if (Sender as TButton).Name = 'Button1' then
      어쩌구 저쩌구
    else if (Sender as TButton).Name = 'Button2' then
      어쩌구 저쩌구
    else if (Sender as TButton).Name = 'Button3' then
      어쩌구 저쩌구
    ..
    ..
    ..
    ..
    ..
    else if (Sender as TButton).Name = 'Button9' then
      어쩌구 저쩌구;

    이런식으로 짜는거지요..그럼 즐푸~~~

    P.S. 각 버턴클릭 이벤트에는 위에서 만든 이벤트를 넣어주는거 알죠?

  • Profile
    이승수 2003.02.20 18:20
    우선 답변주셔서 감사합니다

    제가 드린 질문은,

    폼에 아무것도 없는 상태에서 버튼콤포넌트를 더블클릭으로 10개를 생성한 후,

    버튼클릭 이벤트를 하나로 사용할 수 없을까요? 라는 질문입니다
    (버튼0 클릭이벤트, 버튼1 클릭이벤트... 버튼9 클릭이벤트 가 아니라
    버튼클릭 이벤트 > 0~9중 어떤 버튼이 눌렸는지 판단후 caption값을 보냄 > tmp에 값을 추가 > 레이블에 표시... 라는 알고리즘 입니다)

    비베의 예를들면 0~9까지의 버튼객체 네임을 btnNum으로 통일, 속성중 인덱스만 0~9로 구분 > btnNum의 클릭이벤트 생성 > 인덱스를 tmp에 추가라는 방법으로 하였습니다

    이런 방법이면 버튼클릭 *이벤트 하나로 조건문 없이* 값을 처리할 수 있지만,
    아니라면 버튼 10개의 이벤트를 필요로 하기때문에 어떻게든 줄이고 싶군요..


  • Profile
    우소 2003.02.20 19:06
    우선 버튼을 10개 만든 후 ...
    버튼 하나의 클릭 이벤트를 만들어요..

    그런 다음 다른 버튼들의 이벤트 속성에서 onclick이벤트의 콤보 박스 버튼을 클릭 하면 버튼1의 클릭 이벤트가 보일겁니다 ..
    그렇게 모든 버튼 클릭 이벤을 같이 설정 할수 있어요...

    그리고 참고로 갭션으로 무슨 버튼 인지는 아는 것보다는 tag값이 더 좋을듯 싶고요..

    case TButton(Sender).Tag  of
         1:  ;
         2:  ;
         3:  ;
      ...
         10:  ;
    end;
  • Profile
    구창민 2003.02.20 18:54
    음.. 우선 버튼명을 같이 할수는 없습니다.

    그러나 님이 말씀하시는 것이 가능합니다.

    버튼의 속성중 Tag 라는 것이있지요.

    Tag 에 각기 다른 숫자를 부여하시고,

    버튼의 이벤트를 동일하게 연결해주시고,

    이벤트에서 그 버튼의 태그를 비교해서 처리하심 됩니다.

    그럼~ 즐거운 프로그래밍 하시길~




  • Profile
    남양원 2003.02.21 12:24
    예제 소스 코드입니다.
    저도 첨에 이런거 할려고 무지하게 애먹었었는데... 알고 나니까 써먹을때가
    많더라구요... 님도 즐푸하세요....

    ps :

    unit Unit1;

    interface

    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls;

    type
      TForm1 = 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;
        procedure btn_0Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;

    var
      Form1: TForm1;

    implementation

    {$R *.DFM}
    // -------------
    // | 1 | 2 | 3 |
    // -------------
    // | 4 | 5 | 6 |
    // -------------
    // | 7 | 8 | 9 |
    // -------------
    // | 0 |
    // -----

    // 각 버튼의 Oject Inspector 창의 Tag 속성을 각각
    // 아래와 같이 해당 숫자로 지정합니다.
    // btn_1.tag := 1;
    // btn_2.tag := 2;
    // btn_3.tag := 3;
    // btn_4.tag := 4;
    // btn_5.tag := 5;
    // btn_6.tag := 6;
    // btn_7.tag := 7;
    // btn_8.tag := 8;
    // btn_9.tag := 9;
    // btn_0.tag := 0;
    //
    // 그리고 나서 btn_0의 Events 중 OnClick 이벤트를 생성... 아래와 같이
    // 하고 다른 버튼들을 btn_1, btn_2, ... btn_9 의 OnClick 이벤트에 btn_0Click을
    // 복사합니다.
    procedure TForm1.btn_0Click(Sender: TObject);
    begin
      // 하나의 btn_0Click 이벤트로 묶어 놨으니..
      // Case 문으로 각 버튼의 .Tag 속성값으로 구분합니다. 아래와 같이
      // 구분된 begin .. end 문내에서 계산기에 사용할 코드를 작성하시면 되겠네여...
      //
      Case TButton(Sender).Tag of
        0:
          begin

          end;
        1:
          begin

          end;
        2:
          begin

          end;
        3:
          begin

          end;
        4:
          begin

          end;
        5:
          begin

          end;
        6:
          begin

          end;
        7:
          begin

          end;
        8:
          begin

          end;
        9:
          begin

          end;
      end;
    end;

    end.