|
1. 예쁘게 꾸미는것은?
지난번 세미나때 tip break 에 Image을 ScrollBar의 배경으로 넣어서 하는 방법이 소개되었습니다.
뭐 원리는 간단해요 Scrollbor의 크기에 따라 bitmap 이미지를 짤라서 paint이벤트때 draw해주는것뿐...
원리는 간단하지만 고려할 사항들이 많을꺼예요
2. 스크롤바 크릭한곳 바로가기
음... MouseDown 때.. 처리해주면 되는데..
TStrollBar 의 기본 이벤트에는 MouseDown 이 없으므로 서브 클래싱해서 구현하면 됩니다.
-----샘플----
//---------------------------------------------------------------------------
TWndMethod OrigProc;
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
OrigProc=ScrollBar1->WindowProc;
ScrollBar1->WindowProc = ScrollWinProc;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ScrollWinProc(TMessage& Msg)
{
if(Msg.Msg==WM_LBUTTONDOWN)
{
if(ScrollBar1->Kind==sbHorizontal) //좌우 스크롤 Bar인경우..
{
if(Msg.LParamLo>18 && Msg.LParamLo< ScrollBar1->Width-18) //좌우 맨끝에 버튼을 클릭한 경우를 제외
{
int iScrPos=ScrollBar1->Position*(ScrollBar1->Width-36)/ScrollBar1->Max;
if(abs((Msg.LParamLo-18)-iScrPos)>9) //가운데 스크롤 버튼위에 mouse_down인경우를 제외
{
//전체 Max값에서 Mouse를 Click한 위치(Msg.LParamLo )의 좌표를 계산해 Position 값을 변경해줌
// 18 이라는 숫자는 좌우의 화살표버튼 , 가우데 스크롤 버튼의 width (Vertical인경우 Height) 입니다.
ScrollBar1->Position = (ScrollBar1->Max * Msg.LParamLo)/(ScrollBar1->Width-36);
return; //직접 scroll을 움직여 줬으므로 .. mouse_down messge처리를 끝낸다.
}
}
}
else //상하 스크롤 Bar인경우..
{
if(Msg.LParamHi>18 && Msg.LParamHi< ScrollBar1->Height-18) //좌우 맨끝에 버튼을 클릭한 경우를 제외
{
int iScrPos=ScrollBar1->Position*(ScrollBar1->Height-36)/ScrollBar1->Max;
if(abs((Msg.LParamHi-18)-iScrPos)>9) //가운데 스크롤 버튼위에 mouse_down인경우를 제외
{
//전체 Max값에서 Mouse를 Click한 위치(Msg.LParamHi )의 좌표를 계산해 Position 값을 변경해줌
ScrollBar1->Position = (ScrollBar1->Max * Msg.LParamHi)/(ScrollBar1->Height-36);
return;
}
}
}
}
//MOUSE_LBUTTONDOWN 이벤트가 Scrollbar의 scroll영역 안에서 일어난것을 제외한
// 모든 메세지는 원래(Original ) WindowProc에서 처리..
OrigProc( Msg );
}
//
허접 님이 쓰신 글 :
: 허접입니다.
: 얼마전에도 글을 올렸었는데, 아무런 답변을 안주시네요..
: 컴포넌트중에, scrollbox, checklistbox, 그리고 scrollbar..
: 이 컴포넌트들을 보면, 윈도우에서 기본으로 제공하는 style의 모양만 나오잖아요?
: 여기에 이것들을 좀 이쁘게 꾸미려고 합니다.
: 그런데 방법을 모르겠네요. html 태그도 아니고.. 쩝~
: ㅇ ㅏ.. 그리고 한 가지 더 있습니다.
: 스크롤바를 클릭하면 클릭한 곳으로 스크롤바를 바로 이동시키고 싶은데, 그게 되는지요..
: 예를 들어 winamp나 media player의 equalizer 처럼 마우스 클릭을 하면 해당 위치로 바로 가는것 처럼요..
: 답변 좀 주세요~ ㅠ.ㅜ
: 부탁드립니다~
|