연구개발 이야기
[연구] 리스트뷰에서 클릭과 마우스다운, 키업이벤트(ListView, MouseDown, KeyUp)
금메달.아빠
2010. 12. 16. 21:49
리스트뷰(ListView)에 항목을 표시하고나서 항목을 클릭함으로 관련 내용을 표시하는 경우가 많다. 예를 들면 메일
프로그램에서 건명(타이틀)을 선택하면 메일 본문을 표시하는 것이 그것이다.
대개는 리스트뷰의 항목클릭(ItemClick) 이벤트 프로시저에 세부처리를 할당한다. 그랬을 경우 마우스 클릭이 아닌 키보드의 화살표에 의해 리스트를 이동할 경우 연타에 의한 클릭발생이 화면 갱신 처리에 OS의 처리가 따라가지 못한다.
(돌미끄럼틀: 매끄러운 돌미끄럼틀은 아이들이 아주 좋아하는 놀이기구다. 만약 이 미끄럼틀이 최속강하곡선으로 만들어졌다면, 미끄럼은 기가막힌 놀이경험이 될 것이다. 물론 안전성도 생각해야겠지만.)
리스트뷰 항목 클릭으로 하는 일
이러한 단순한 처리지만 어떤 이벤트 핸들러(Event Handler)에서 세부처리를 하는가에 따라 처리속도의 차이를 가져온다. 결국 처리속도의 차이가 전체의 성능과 사용자 경험(UX)에 영향을 준다.대개는 리스트뷰의 항목클릭(ItemClick) 이벤트 프로시저에 세부처리를 할당한다. 그랬을 경우 마우스 클릭이 아닌 키보드의 화살표에 의해 리스트를 이동할 경우 연타에 의한 클릭발생이 화면 갱신 처리에 OS의 처리가 따라가지 못한다.
항목 클릭의 성능설계
이런 기본적인 처리라도 성능설계가 필요하다. 세부처리의 이벤트 핸들러는 마우스와 키보드의 두가지 경로를 고려해야 한다.- 마우스처리: 마우스를 눌렀을 때 처리(MouseDown Event)
- 키보드처리: 키보드를 뗐을 때(KeyUp Event)
항목클릭이벤트 한가지로 표시를 제어하지 말고 마우스를 누를때 화면이 갱신되면 자연스럽게 변화를 감지할 수 있다. 그리고 마우스를 뗄 때보다 효과적이다. 왜냐하면 마우스를 눌렀을 때 바뀌어야 성능이 좋다고 느끼게 된다. 반대로 키보드는 계속 화살표를 누르고 있기 때문에 KeyUp에서 표시제어를 해야 성능이 개선된다. 이렇게 두가지의 경로를 가지므로 어느한쪽에 처리코드를 작성하는 것이 아니라 비표시용 컴포넌트(예를 들면 델파이의 TAction control)를 써서 이벤트를 연결하는 것이 편리하다.