728x90
안녕하세요. 슬남매맘입니다.
C++ Builder을 회사와서 배웠기 때문에, 잘 다루지는 못해요.
그리고 델파이로는 소스가 많이 있지만 C++로는 많이 되어 있지 않은듯해요.
회사에서 사용하면서 열심히 찾아서 구현한 부분,
잘 나오지 않는 부분에 대해 포스팅을 시작해보려해요.
버튼들을 무수히 많이 만들게 되고, Click 경우 동일한 일을 처리해야 할 경우
예를 들어 버튼을 누르면 해당 버튼의 글씨를 변경해야 할 경우.
2가지 방법이 있죠
1. 버튼별 함수에 각각 정의한다.
void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
SpeedButton1->Font->Color = (SpeedButton1->Font->Color == clRed) ? clBlack : clRed;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SpeedButton2Click(TObject *Sender)
{
SpeedButton2->Font->Color = (SpeedButton2->Font->Color == clRed) ? clBlack : clRed;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SpeedButton3Click(TObject *Sender)
{
SpeedButton3->Font->Color = (SpeedButton3->Font->Color == clRed) ? clBlack : clRed;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SpeedButton4Click(TObject *Sender)
{
SpeedButton4->Font->Color = (SpeedButton4->Font->Color == clRed) ? clBlack : clRed;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SpeedButton5Click(TObject *Sender)
{
SpeedButton5->Font->Color = (SpeedButton5->Font->Color == clRed) ? clBlack : clRed;
}
2. 동일한 부분을 한함수로 처리한다.(단 어떤 버튼인지 알아야함)
void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
SpeedButtonClick_TextChange(Sender);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SpeedButton2Click(TObject *Sender)
{
SpeedButtonClick_TextChange(Sender);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SpeedButton3Click(TObject *Sender)
{
SpeedButtonClick_TextChange(Sender);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SpeedButton4Click(TObject *Sender)
{
SpeedButtonClick_TextChange(Sender);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SpeedButton5Click(TObject *Sender)
{
SpeedButtonClick_TextChange(Sender);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SpeedButtonClick_TextChange(TObject *Sender)
{
TButton* btn = static_cast<TButton *>(Sender);
btn->Font->Color = (btn->Font->Color == clRed) ? clBlack : clRed;
}
이렇게 두가지로 정의가능합니다!
단지 색상만 변경해야 한다면, 첫번째 방법이 더 간결하겠지만,
그 버튼에 따라서 어떠한 행위를 해야하고,
부수적으로 소스가 늘어날 경우에는 개인적으로는 2번째 방법이 더 나을듯합니다.
그리고 색상을 변경해야할 경우에도 1번의 경우는 모든 버튼에 대하여 다 변경해야하지만
(하나라도 변경하지 않을 경우 그 버튼은 버그가 발생될 소지가 있음)
2번의 경우는 SpeedButtonClick_TextChange 함수 내용만 변경하면 되기 때문에 간결합니다.
여기에서 Sender은 어떤 컴포넌트에서 호출되었는지를 전달하는 포인터이기 때문에
이를 이용하였구요!
인터넷에 찾았을 때는 dynamic_cast으로 하라고 되어있지만,
그렇게하니 포인터가 NULL로 인식되더라구요.
static_cast로 변경하니 제대로 동작하였습니다.
728x90
'프로그래밍 > C++ Builder' 카테고리의 다른 글
C++ Builder 파일명 추출 및 파일 복사 (0) | 2023.08.25 |
---|---|
C++ Builder:) OpenDialog 알아보기 (0) | 2023.07.04 |
꿀팁:) C++ Builder 배포파일 만들기 (0) | 2023.06.29 |