|
사공엽 님이 쓰신 글 :
: 페이제 컨트롤이 color 속성을 변경하면 클라이언트 영역은 색이 바뀌는데, 페이지 이름이 있는 탭의 색은 안바뀝니다.
: 어떻게 바꾸죠?
: OwnerDraw 속성을 true로 하면 색은 바뀌는데 글자는 안나옵니다.
: 어떻게 글자도 보면서 색도 바꿀 수 있나요?
임펠리테리입니다.
페이지컨트롤에는 Color 속성이 없는데... 다른 컨트롤과 혼동한 것이 아닌지...?
그리고 페이지컨트롤의 탭 부분의 컬러는 탭을 직접 그려주기 전에는 바뀌지 않습니다.
탭을 직접 그려주려면, OwnerDraw 속성을 true로 설정한 후, OnDrawTab 이벤트의 핸들러를 작성해야
합니다. 다음과 같이 하면 되죠.
void __fastcall TForm1::PageControl1DrawTab(TCustomTabControl *Control,
int TabIndex, const TRect &Rect, bool Active)
{
Control->Canvas->Brush->Color = clYellow;
Control->Canvas->FillRect(Rect);
Control->Canvas->TextRect(Rect, Rect.Left+8, Rect.Top+3, ((TTabControl *)Control)->Tabs->Strings[TabIndex]);
}
이렇게 하면 탭 부분만 노란색으로 나옵니다.
참고로, 이 코드는 일부러 탭컨트롤과 페이지컨트롤에서 공통으로 사용할 수 있도록 꾸며봤습니다.
TextRect()를 호출하면서 마지막에 Tabs 속성을 억세스하기 위해 강제로 TTabControl로 캐스팅을 한 것이
그런 이유에서입니다. 사실 페이지컨트롤과 탭컨트롤은 둘 다 TCustomTabControl로부터 상속을 받으므로
Tabs 속성이 있기는 합니다만, 이 속성이 protected로서 억세스가 되지 않아 강제로 임시로 TTabControl로
캐스팅을 해봤습니다. 물론 반드시 이렇게 해야 할 필요는 없습니다. 그냥 재미로 해봤습니다.
그럼 참고하시길...
|