Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 Q&A
Delphi Programming Q&A
[15841] Re:TRadioButton에서 OnChange나 onSelected이벤트를 구현하고 싶은데요.
StarWagon [] 2011 읽음    2016-12-02 14:47
델파이 언어를 몰라서 빌더로 코딩한 예제를 올립니다.
아이디어만 참고하시면 될듯 합니다.
어차피 문법 자체는 비슷할테니...?

우선 헤더에서 TForm1의 클래스 앞에 아래와 같이 TRadioButton을 상속받아서 OnChange 이벤트를 추가한
TRadioButton 클래스를 만듭니다.
이 새로운 TRadioButton은 timer로 precheck와 Checked를 비교하여 값이 다르면 _OnChange를 호출하고 변한 Checked를
다시 precheck에 대입합니다.
OnChange 이벤트는 디자인타임에서 더블클릭 등으로 등록할 순 없고, 런타임시에 등록해줘야 합니다.

class TRadioButton : public Vcl::Stdctrls::TRadioButton {
	bool precheck;
	TTimer *timer;
	TNotifyEvent _OnChange;
	void __fastcall timerOnTimer(TObject *Sender) {
		if (_OnChange && precheck!=this->Checked) {
			_OnChange(this);
			precheck=this->Checked;
		}
	}
	void __fastcall	SetOnChange(TNotifyEvent onchange) {

		if (onchange==0) {
			timer->Enabled=false;
			_OnChange=0;
		}else {
			precheck=this->Checked;
			_OnChange=onchange;
			timer->Enabled=true;
		}
	}
	TNotifyEvent __fastcall	GetOnChange(void) {
		return _OnChange;
	}

public:
	__fastcall TRadioButton(TComponent* Owner) : Vcl::Stdctrls::TRadioButton(Owner) {
		_OnChange=0;
		timer = new TTimer(this);
		timer->Enabled=false;
		timer->Interval=1;
		timer->OnTimer=timerOnTimer;
	}
	__property TNotifyEvent OnChange={read=GetOnChange,write=SetOnChange};

};
#define TRadioButton ::TRadioButton


폼에 TMemo, TRadioButton, TButton을 하나씩 올리시고 아래와 같이 코딩해서 테스트 해보세요.
혹은 TRadioButton 을 두개 올리시고 키보드 방향키로 왔다 갔다 해도 OnChange 이벤트인 test함수가 호출됩니다.
도움이 되셨기를...

__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{
	RadioButton1->OnChange=test;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::test(TObject *Sender)
{
	TRadioButton *a=(TRadioButton *)Sender;
	Memo1->Lines->Clear();
	Memo1->Lines->Add(BoolToStr(a->Checked,true));
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
	RadioButton1->Checked=!RadioButton1->Checked;
}



첫눈 님이 쓰신 글 :
: Panel위에 RadioButton을 두개 올려 놓았습니다.
:
: RadioButton을 선택하면 그에 맞는 데이터를 화면에 보여주고자 하는데요.
:
: 문제는 RadioButton에 onChange나 onSelected이벤트가 없네요.
:
: 지금까지는 어쩔 수 없이 Click이벤트에서 처리를 했는데
: 키보드의 방향키로 RadioButton을 선택하는 경우에는 처리를 할 수가 없습니다.
:
: RadioButton에서 onChange나 onSelected이벤트를 처리할 수는 없을까요?

+ -

관련 글 리스트
15825 TRadioButton에서 OnChange나 onSelected이벤트를 구현하고 싶은데요. 첫눈 1634 2016/11/24
15841     Re:TRadioButton에서 OnChange나 onSelected이벤트를 구현하고 싶은데요. StarWagon 2011 2016/12/02
15826     RadioGroup1.ItemIndex 를 이용하면 어떨까요? 太郞 1756 2016/11/25
15835         Re:답변 감사합니다. 하지만 제가 원하는 것은 그게 아니라서... 첫눈 1694 2016/12/01
15837             Re:Re:답변 감사합니다. 하지만 제가 원하는 것은 그게 아니라서... kylix 1744 2016/12/01
15843                 Re:Re:Re:답변 감사합니다. 첫눈 2029 2016/12/05
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.