Neit 님이 쓰신 글 :
: 질문 그대로 입니다..
:
: column 의 너비가 넓어서 한 화면을 넘어가는경우..
:
: column 뒤쪽의 내용도 보고 싶은데 방법이 없네요 ? ;;;
:
: 엑셀도 그렇고, 횡스크롤을 하면 무조건 다음 column 으로 넘어가는데..
:
: 이런 동작을 하는 grid componet 를 아시거나
:
: 기본 component 를 이용해서 구현가능한 좋은 아이디어 있으신 분들께 조언을 구하고자 합니다.
답변:
그런 Grid Component가 있는지는 잘 모르겠지만, VCL FrameWork에서 제공되고 있는 기본 클래스를 이용
하더라도 구현은 가능합니다. WMHScroll... 메세지 함수가 TCustomGrid 클래스에서 구현되어 있지만 private로
정의되어 있기때문에 TStringGrid에선 사용할 수 없죠. 그러나 다음과 같은 방법을 이용해서 기존 VCL Framework
소스코드 수정 없이 대체가 가능 합니다.
void __fastcall Vcl::Grids::TCustomGrid::WMHScroll(TWMScroll &Msg)
{
String s;
switch(Msg.ScrollCode) {
case SB_LINEUP:
s.printf(L"Code = SB_LINEUP, Pos = %d", Msg.Pos);
break;
case SB_LINEDOWN:
s.printf(L"Code = SB_LINEDOWN, Pos = %d", Msg.Pos);
break;
case SB_PAGEUP:
s.printf(L"Code = SB_PAGEUP, Pos = %d", Msg.Pos);
break;
case SB_PAGEDOWN:
s.printf(L"Code = SB_PAGEDOWN, Pos = %d", Msg.Pos);
break;
case SB_THUMBPOSITION:
s.printf(L"Code = SB_THUMBPOSITION, Pos = %d", Msg.Pos);
break;
case SB_THUMBTRACK:
s.printf(L"Code = SB_THUMBTRACK, Pos = %d", Msg.Pos);
break;
default:
s.printf(L"Code = Unknown, Pos = %d", Msg.Pos);
}
Form1->Caption = s;
}
런타임 패키지를 사용하지 않도록 프로젝트 옵션을 설정하고 컴파일 하면 위에서 정의한 코드가 TCustomGrid
클래스에서 정의하고 있는 WMHScroll()을 대체 해버리게 됩니다. 나머지 로직은 TCustomGrid 소스를 참조해서
구현하면 되겠죠.
static link 로 컴파일 할땐.. 위와 같은 방법을 이용하면 되고, 런타임패키지를 이용할 때는 RTTI를 이용해서
메소드를 후킹해주면 됩니다.
...