C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[47319] Re:도와주세요.. - 스크롤바 크릭한곳 바로가기
장성호 [nasilso] 1528 읽음    2006-12-06 13:23
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 처럼 마우스 클릭을 하면 해당 위치로 바로 가는것 처럼요..
: 답변 좀 주세요~  ㅠ.ㅜ
: 부탁드립니다~

+ -

관련 글 리스트
47306 도와주세요.. 허접 844 2006/12/05
47319     Re:도와주세요.. - 스크롤바 크릭한곳 바로가기 장성호 1528 2006/12/06
47330         답변 감사드립니다. 추가 질문이 있는데요... 허접 990 2006/12/07
47331             Re:답변 감사드립니다. 추가 질문이 있는데요... 허접 1228 2006/12/07
47309     Re:도와주세요.. 로리시아 961 2006/12/05
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.