|
오브젝트 인스펙터를 보시면 이벤트를 설정할때 다른 이벤트로 연결이 가능합니다. 머시기클릭(TObject* Sender,..)에서 Sender가 기본적으로 이벤트를 발생한놈의 포인터입니다.
void __fastcall TForm1::Button1Click(TObject *Sender)
이렇게 만들어질 경우 다른 버튼들의 OnClick(다른 이벤트들도 마찬가지)을 동일하게 지정하면
그 버튼들이 눌려질때마다 위의 한 함수만 동작하게 되고 눌려진 버튼의 포인터는 Sender로 넘겨집니다.
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TButton *button;
button=dynamic_cast<TButton*>(Sender);
Caption=button->Caption;
}
위처럼 하면 연결된 모든 버튼의 Caption이 Form의 Caption에 뜨겠죠...
일반적인 cast연산으로도 Sender를 원하는 모습으로 바꿀수 있으나 이경우 TButton이 아닌 다른것이 연결된 경우에도 TButton으로 변환하기에 dynamic_cast를 사용합니다. 위에는 생략했지만 dynamic_cast는 원하는 형으로 변환이 안될경우 0을 리턴합니다. if문으로 걸러주면 되겠죠
이런식으로 다른 형의 Sender도 처리 가능하고 여러 컨트롤의 이벤트를 하나로 모을수 있겠지요
궁금이 님이 쓰신 글 :
: 앞전에 한 번 글을 올렸었는데 답글이 많지 않아서 다시 올립니다..
:
: >>김시환님 글 : 타이머에 시간을 정해놓고 타이머를 가동시킨 후 일정 시간이 되면
: >> 프로그램 종료 되도록 해 놓고 다른 컴포넌트에서 클릭이벤트 발생시 타이머 시간을
: >> 다시 초기화 시키면 어떨지 좀 무식한 방법인가??
:
: 김시환 님처럼 생각했었는데 다른 컴포넌트(Edit가 좀 많고 Button, Radio Button, Check Button 등등 많은 컴포넌트가 한 창에 존재)들의 클릭이벤트를 받으려니 넘 많아서 한번에 이런 이벤트를 받는 방법이 알고 싶습니다..
: 창에서 클릭이벤트를 받으니 다른 component를 클릭할 경우에는 클릭이벤트가 먹지 않더군요..
: 어쩌면 좋을까요?? 도와주세요...
: 정말 각 component의 클릭 이벤트를 모두 다 받는 방법 밖에는 없나요???
:
:
:
:
: : Form에 아무런 작업을 수행하지 않는 상태가 지속될 경우 자동으로 창을 close하는 방법 없나요?
: :
: : 일정한 시간동안 사용자로부터 키보드나 마우스 입력이 없는 이런 상태를 어떻게 알 수 있을까요??
: :
: : 고수님도 도와주세요..
: :
: : ===========================================================================
: :
: : 폼 위에 다른 component들이 많이 있을 때..
: :
: : 각 component들 모두 클릭 작업이 없을 때를 어떻게 알 수 있나요??
: :
: : 각각의 component들의 이벤트를 받는 방법 말고 한번에 폼 자체에서 알 수 있는 방법은 없을까요??
: :
:
|