비슷한걸로 고민한적이 있는데,
모양이 이쁘진 않지만 TPanel 로 대체하는것도 한 방법입니다.
TPanel 의 BevelOuter 속성을 건드리면 눌린 버튼, 안눌린 버튼 모양을 구현할 수가 있고요,
Color 속성도 있기때문에 색도 마음대로 바꿀수가 있습니다.
(ParentBackground 를 false 로 변경해야만 색이 바뀝니다)
아래는 OnMouseEnter, OnClick, OnMouseLeave 이벤트를 땨로 정의하고,
Button1 OnClick 함수에서
동적으로 생성한 Panel에 각 이벤틀 넣어준 내용입니다.
어떤 버튼이 눌렸는지 안눌렸는지에 대한 검사는 Caption 이나 Tag 로 파악하시면 될것같습니다.
어떤 용도로 사용하실지 모르기 때문에 이 정도만 적겠습니다.
//---------------------------------------------------------------------------
void __fastcall TForm1::MyPanelOnMouseEnter(TObject *Sender)
{
if (((TPanel*)Sender)->BevelOuter==bvRaised) {
((TPanel*)Sender)->Color=clHighlight;
}else {
((TPanel*)Sender)->Color=clFuchsia;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::MyPanelOnMouseClick(TObject *Sender)
{
if (((TPanel*)Sender)->BevelOuter==bvRaised) {
((TPanel*)Sender)->BevelOuter=bvLowered;
((TPanel*)Sender)->Color=clFuchsia;
}else {
((TPanel*)Sender)->BevelOuter=bvRaised;
((TPanel*)Sender)->Color=clHighlight;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::MyPanelOnMouseLeave(TObject *Sender)
{
if (((TPanel*)Sender)->BevelOuter==bvRaised) {
((TPanel*)Sender)->Color=clBtnFace;
}else {
((TPanel*)Sender)->Color=clRed;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TPanel *A = new TPanel(Application);
A->BevelWidth=3;
A->Parent=this;
A->ParentBackground=false;
A->OnMouseEnter=MyPanelOnMouseEnter;
A->OnClick=MyPanelOnMouseClick;
A->OnMouseLeave=MyPanelOnMouseLeave;
}
//---------------------------------------------------------------------------
win 님이 쓰신 글 :
:
: 안녕하세요
: 빌더 초보가 질문 하나 드립니다.
:
: 첨부 파일을 보시면 아시겠지만..
: 현재 버튼에 포커스가 가면 버튼의 테두리 색이 하늘색으로 변합니다.
:
: 그걸 버튼 선택시, 빨간색으로 변경 시키고 싶은데..
:
: 어디서 변경을 해야되는지 아무리 찾아봐도 잘 모르겠어서요..
:
: 기본속성에서 변경을 시켜야되는 것 같긴한데..
:
: 혹시 아시는 분 계시면 도움 좀 부탁드립니다.
:
: 감사합니다.
|