|
ㅡㅡ;;
18 이라는 숫자는 좌우의 화살표 버튼, 가운데 스크롤 버튼의 width or height 값이네요.
ㅡㅡ;;
허접 님이 쓰신 글 :
: 장성호님, 로리시아님..
: 답변 정말 감사드립니다.
: 엄청나게 큰 도움이 되었습니다. ㅠ.ㅜ
: 장성호님께 더 여쭤볼게 있는데요.
: 샘플 소스에서요.
:
: if(Msg.LParamLo>18 && Msg.LParamLo< ScrollBar6->Width-18)
: 이 부분,
: if(abs((Msg.LParamLo-18)-iScrPos)>9)
: 이 부분에서
: 값을 비교하고 가감을 하는데, 저 값들의 의미가 정확하게 무엇인지 모르겠습니다.
: 값을 다른 값으로 변경하니까, 스크롤바 움직일때 변화는 생기는데,
: 커서가 위치한 곳으로 스크롤바가 이동하는 부분이 있고, 그렇지 않은 부분이 생기더라구요.
: 스크롤바는 상하로 되어 있습니다.
: 답변 부탁 드릴께요.
:
: 그리고 다시 한번 감사드린다는 말씀 드립니다. ^^
:
: 장성호 님이 쓰신 글 :
: : 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 처럼 마우스 클릭을 하면 해당 위치로 바로 가는것 처럼요..
: : : 답변 좀 주세요~ ㅠ.ㅜ
: : : 부탁드립니다~
|