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
[75420] Re:FocusRect 질문자입니다. FocusRect를 처음 그려줄때 그 때의 Rect값이 궁금합니다.
빌더(TWx) [builder] 2795 읽음    2019-05-16 13:47
테두리 님이 쓰신 글 :
: 현재 DrawFocusRect()를 호출하여 어떻게 하는지는 알았는데, 사각형이 다 지워져야 하는데, 단순하게 값 조절로는 자꾸 엇나가는 부분이 있어서 정확한 FocusRect의 Rect값을 구하고 싶습니다.
:
: TRect rectCommit = Rect;
:         rectCommit.Top +=1;
:         rectCommit.Left -=0;
:         rectCommit.Right += 2;
:         rectCommit.Bottom -=1;
:         pGrid->Canvas->DrawFocusRect(rectCommit);
:
: 현재 이런식으로 하면 (pGrid는 포인터입니다) 사각형이 있다고 가정했을 때 오른쪽 변에 해당하는 사각형 변만 안지워지고 나머지 위아래 왼쪽은 지워지게 됩니다 이 이후에도 숫자를 엄청 바꿔봤는데 완전히 사각형이 다 지워지는 경우가 없더라구요. 그래서, 시스템에서 그려주는 FocusRect의 Rect가 알고싶은데, 어디서 참조해야 될지 모르겠습니다 ㅜㅜ




답변:


엉터리로 만들어져 있는 구버전의 VCL 라이브러리를 사용하면서...
프레임웍에 의해 강제로 점선으로 그려진 테두리인 Focused Rect 를 지우기 위해 OnDrawCell() 까지 사용할 필요는 없고
불필요하게 프로그램 로직과 UI 파트를 이벤트 핸들러로 엮어서 프로그래밍 하는 것은
속된 말로... 코드를 걸레로 만들어 버리는 겁니다.

평상시 사용하던 대로... DefaultDrawing 프로퍼티 값을 true 그대로 해 놓은 상태에서
간단하게 Paint() 라는 virtual 함수를 오버라이드 하면 됍니다.

override 된 스트링그리드 Paint() 함수
         call original Paint()
         TRect R = CellRect(Col, Row);
         R.Inflate(-1, -1);  // Rect 영역 보정 값은 VCL 버전에 따라서 다를 수 있음. inflate/deflate 가 필요 없을 수도.
         DrawFocusRect(Canvas->Handle, &R);

Focused Rect는 VCL 프레임웍의 Paint() 함수에서 그려지므로
위와 같이 Paint() 함수를 오버라이드 해서 간단하게 처리할 수 있고.

Rect의 Left 값을 1 증가하면...

Cell 외곽 그리드 라인의 Rect 영역과 비교해서 상대적으로 영역을 deflate (줄이는) 하는 셈이므로
Right 값은 1 감소해줘야 맞는 것임.

+ -

관련 글 리스트
75419 FocusRect 질문자입니다. FocusRect를 처음 그려줄때 그 때의 Rect값이 궁금합니다. 테두리 2466 2019/05/16
75420     Re:FocusRect 질문자입니다. FocusRect를 처음 그려줄때 그 때의 Rect값이 궁금합니다. 빌더(TWx) 2795 2019/05/16
75423         RE: StringGrid의 Paint 함수가 어디있나요? 찾아봐도 모르겠어서 질문드립니다. 테두리 2471 2019/05/17
75422         많이 배워갑니다. 감사합니다. 테두리 2452 2019/05/17
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.