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
[54500] Re:스코롤박스 영역밖으로 , 컨트롤을 이동시켜도 스크롤 바가 생기지 않는경우?
장성호 [nasilso] 1438 읽음    2008-09-06 22:39
음....
지난번 질문에 대한 답변은 제가 잘못 쓴것 같네요
저는 Parent와 Owner의 개념에 대해 설명하려 했는데...

이번에는 제대로 전달해야 될텐데...

[ 컨트롤을 이동시켜도 스크롤바가 생기지 않습니다]

    코딩을 보니 Control을 이동하는 방법이 2가지네요
    첫번째는 Control의 Left , Top 등의 값을 바꿔서 움직였구
    두번째는 WM_SYSCOMMAND로 움직였네요

    첫번째방식을 컨트롤이 ScrollBox영역을 벗어나면 자동으로 scrollbar가 생기죠
    그런데 두번째 방식은 ScrollBar가 안생깁니다.

    첫번재와 두번째 방식의 차이점을 찾으면 되겠죠

@설명   
    VCL의 모든 Control의 Left , Right , Width , Height를 조절하면
    SetBound라는 함수가 호출됩니다.

    SetBound라는 함수를 따라가보면..

    Parent.AlignControl 이 호출됩니다.

    즉 ScrollBox 안에 있는 Panel의 위치를 조절하면
    ScrollBox.AlignControl이 호출되는것이죠
    AlignControl 함수안에서 ScrollBar 의 크기라던가.. 뭐 그런것이 조정됩니다.

    그런데 SysCommand로 하면 AlignControl 함수가 호출되지 않으니..
    scrollbar가 나타나지 않는것입니다.

@해결책
    SYSCOMMAND로 Panel을 움직이면서 ScrollBar가 나타나게 하려면?
    SYSCOMMAND후에 ScrollBox의   AlignControl 을 호출해 주면 되겟죠
    그런데 AlignControl 함수는 private 함수라서 접근이 쉽지 않습니다.

    그래서 꼼수로...
    SYSCOMMAND 뒤제 Panel의 위치를 살짝 움직였다가 원래대로 오면 .. ㅋㅋ 됩니다.
    아래와 같이

void __fastcall TForm3::Panel1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
    ReleaseCapture();
    Panel1->Perform(WM_SYSCOMMAND,0xf012,0);
    Panel1->Left=Panel1->Left+1;
    Panel1->Left=Panel1->Left-1;

}




[SCROLLBOX영역을 이미지로 저장 가능한가요?]

문론 가능합니다.
님께서 하신 방식으로 해도 잘 될텐데 질문올리신것을 보면


ScrollBox의 안보이는 영역까지 이미지로 저장하고 싶으신것인가요?
만약 그런것이라면 쪼금 고생해야 합니다.


TForm에 보면 GetFormImage라는 함수가 있습니다
이함수는 Form의 Client영역의 이미지를 캡쳐해주는 함수입니다.
단 scroll영역까지는 아니구요

이함수의 vcl소스를 잘 살펴보시면 원리가 나옵니다.

TWinControl에 보면 WM_PAINT 메세지에 WParam에 dc를 넘겨주면
넘겨준 dc에다가 컨트롤의 이미지를 그려줍니다.
이원리를 이용한것이지요

좀 까다로우니...  구현은 직접함 해보세요

참조
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tip&no=753


그럼..





linuxman 님이 쓰신 글 :
: 안녕하세요.
: 장성호님 덕분에... control과 콤포넌트의 차이점을 알았습니다..(거듭 감사 합니다 )
:
: 스코롤박스 영역밖으로 , 컨트롤을 이동시켜도 스크롤 바가 생기지 않습니다.((첨부된 화일 참조 )
: 그리고 스코롤 박스 영역을 이미지로 저장한가요?
:
:
:
: 수고하세요...

+ -

관련 글 리스트
54478 스코롤박스 영역밖으로 , 컨트롤을 이동시켜도 스크롤 바가 생기지 않는경우? linuxman 994 2008/09/04
54500     Re:스코롤박스 영역밖으로 , 컨트롤을 이동시켜도 스크롤 바가 생기지 않는경우? 장성호 1438 2008/09/06
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.