CAFE

델파이 팁

스크롤 박스 캡쳐

작성자김병건|작성시간08.11.28|조회수1,025 목록 댓글 2

프로젝트 하다가 스크롤 박스에 있는 화면전체를 캡쳐할 일이 생겨 만들었습니다.

 

자료를 여기 저기 찾아보다가 찾지를 못해서 ( 검색능력 부족 ㅠ.ㅡ;;; 좋은 사이트 좀... 굽신굽신 )

마지막으로 캡쳐프로그램을 다운받아서 기능을 관찰해보니 Scroll Capture 라는 기능들이 있더군요.

이 기능은 스크롤 바가 달린 윈도우 화면 전체를 캡쳐하는 기능이었는데

강제로 스크롤을 움직이더군요.

여기서 착안하여 그 기능을 한번 구현해 보았습니다.

 

구현하는 김에 현재화면의 일반 컨트롤도 캡쳐하는 함수도 만들어서 넣었습니다.

ClipRect에 대한 고려는 하지 않아 가려진 화면에서는 검게 나오지만 현재 제가하는 상황에서는 강제로 이동해주면 되서

그에 대한 처리는 하지 않았습니다.

TGraphicControl 등의 처리는 따로 만들어 주어야 하지만 기본 함수를 HDC로 받도록 만들었기에 확장에는 문제가 없을 겁니다.

 

 

 

주요 함수는 다음과 같습니다.

// 일반 컨트롤 윈도우를 받아서 캡쳐하는 함수

function CaptureControl( pControl : TWinControl;  enArea : TCaptureArea;  bmpOutput : Graphics.TBitmap) : Boolean;

 

// 스크롤 컨트롤 윈도우를 받아서 챕쳐하는 함수
function ScrollCapture( pControl : TScrollingWinControl; bmpOutput : Graphics.TBitmap) : Boolean;

 

캡쳐 기능은 다음처럼 그냥 윈도우 API를 사용하여 작성하였습니다.

function Capture( dc : HDC; nWidth, nHeight : Integer; bmpOutput : Graphics.TBitmap) : Boolean;
var
  hMemDC      : HDC;
  hBit        : HBITMAP;
  hOldBitmap  : HBITMAP;
begin
  ASSERT( bmpOutput <> nil );
  hMemDC := CreateCompatibleDC( dc );
  hBit := CreateCompatibleBitmap( dc, nWidth, nHeight );
  hOldBitmap := SelectObject( hMemDC, hBit );
  BitBlt( hMemDC, 0, 0, nWidth, nHeight, dc, 0, 0, SRCCOPY );
  bmpOutput.Handle := hbit;
  SelectObject( hMemDC, hOldBitmap );
  DeleteDC( hMemDC );
  Result := true;
end;

 

 


 

 

 전체화면

 

 

다음은 버튼의 핸들을 받아 캡쳐한 화면입니다.

다음과 같이 호출하면 됩니다. 간단하죠?

CaptureControl( btnCapture, CAPTURE_AREA_CLIENT, Form1.imgCaptured.Picture.Bitmap  );

 

 

 

버튼 캡쳐                                   라디오 버튼 캡쳐                           패널 캡쳐

 

 

허나.... 스크롤 박스가 있는 컨트롤은 그냥 아래와 같이 캡쳐가 되지요.

 

 스크롤 박스 캡쳐

 

 

 

요걸 전체를 캡쳐하려면 아래와 같이 호출하면 끝~~

ScrollCapture( boxCapture, Form1.imgCaptured.Picture.Bitmap ); 

 

 

스크롤 캡쳐

 

 

 뭐 소스는 어렵지 않게 보실수 있는 실력들이 있을 것이라 믿고... 20000

첨부파일 CaptureScrollControl.exe

 

 

 

 

다음검색
현재 게시글 추가 기능 열기

댓글

댓글 리스트
  • 작성자윤서재환아빠 | 작성시간 08.11.29 유용한 소스 정말 감사합니다...^.^
  • 작성자일레븐 | 작성시간 08.11.29 너무 감사합니다^.^
댓글 전체보기
맨위로

카페 검색

카페 검색어 입력폼