안녕하세요. 천리안 프로그래머포럼 C++Builder 담당자 임펠리테리입니다.
리스트뷰의 선택된 아이템을 이동하려면 LVM_SETITEMPOSITION 나
LVM_SETITEMPOSITION32 메시지를 주면 되지만, 이 메시지들은 ViewStyle이 vsReport
일때는 먹히지 않습니다.
이때는 다음과 같은 방법을 써볼 수 있겠군요.
void __fastcall TForm1::UpButtonClick(TObject *Sender)
{
ListView->Items->[ItemListView->Selected->Index-1]->Selected = true;
SendMessage(ListView->Handle, LVM_ENSUREVISIBLE,
ItemListView->Selected->Index, false);
}
void __fastcall TForm1::UpButtonClick(TObject *Sender)
{
ListView->Items->[ItemListView->Selected->Index+1]->Selected = true;
SendMessage(ListView->Handle, LVM_ENSUREVISIBLE,
ItemListView->Selected->Index, false);
}
(인덱스가 0 이하로 내려가거나 전체 갯수 이상으로 넘어갈때의 에러처리를 하지
않았습니다.)
각 함수의 첫번째 줄로서, 현재 선택된 아이템의 위, 혹은 아래 아이템이 선택됩니다.
두번째 줄이 중요합니다.
LVM_ENSUREVISIBLE은 wparam으로서 넘겨준 인덱스의 아이템이 현재 리스트뷰에
보이지 않는 상태라면 보일 만큼만 스크롤을 해줍니다.
그럼, 도움되시길 바라면서, 이만..
독립문에서 임펠리테리였습니다.
(cbuilder, cbuilder@thrunet.com)
|