안녕하세요?
마우스 버튼이 눌리면 WM_MOUSEDOWN메시지가 발생하고
마우스 버튼이 떨어지면 WM_MOUSEUP메시지가 발생합니다.
클릭을 위해서 마우스 버튼을 눌러도.. 역시 WM_MOUSEDOWN메세지는
발생을 합니다.
클릭도 처리를 해야 하고.. 드래그도 해야 한다면....
MOUSEDOWN부분에서는
... 마우스 버튼이 눌려졌다는 상태를 기억시키고....
눌린 X, Y좌표도 기억을 해두세요...
MOUSEMOVE부분에서
... 마우스 버튼이 눌려진 상태인지(앞에서 기억시킨 변수와 비교)
비교하셔서 X, Y좌표중에 5포인트 이상 이동이 되었다면
드래깅 하도록 하세요.... 그리고.... MOUSE버튼이 눌렸다는
변수를 초기화 하세요...
그러면... 마우스 버튼을 떼지 않는 이상... 이 부분에서
더 이상 처리할 일은 없는 듯 하구요...
MOUSEUP부분에서는
... 마우스 버튼이 눌려졌다는 상태를 보관한 변수를
초기화면 시키면 되겠지요...
크게 어려운 부분은 없네요.. 구체적인 소스는 제시하지 않겠습니다.
델파이의 VCL에서는 해당 컨트롤에 WM_MOUSEDOWN메시지가
보내지면 OnMouseDown이벤트가 발생하겠죠...
(혹시나 노파심에서 적었습니다.... 위에서 편의상
MOUSEDOWN이라고 한부분은 OnMouseDown이벤트를 컨트롤할 메소드
내에서 처리하여야 할 것입니다..)
클릭이나, 드블클릭은 워낙에 자주 사용하는 것들이나
별도로 분리를 해 놓은 것이라고만 생각하시면 됩니다.
MOUSEDOWN은 클릭을 하던 드블클릭을 하던 마우스 버튼이
눌려지면 무조건 발생하게 됩니다....
키보드도 이와 비슷하죠...
KEYDOWN은 모든 키에 대해서 발생하는 이벤트이고
KEYPRESS는 아스키코드를 발생시키는 키가 눌릴 경우에만
발생하게 됩니다.
그렇다면.... 'a'키를 누르면 KEYDOWN과 KEYPRESS이벤트가
같이 발생합니다.
윈도우즈에서는 Alt키를 시스템키라고 하죠.... Alt키와 관련된
핫키들은 윈도우즈 자체적으로 사용하는 글쇠도 있고,
메뉴나 컨트롤로 포커스를 이동시키는 기능을 할 때도
있습니다. 해서.... Alt키와의 조합으로
특정 기능을 마음대로 하고 싶을 경우가 있을 수 있는데...
이때는 어떻게 할까요...
마찬가지로.. Alt키도 KEYDOWN이벤트가 발생합니다.
별다른 문제가 없어보이나... Alt-A를 자체적으로
처리하고 싶다고 하더라도... KEYDOWN내에서만
처리를 하게 되면.. 에러음악이 출력되는데요...
Alt키와의 조합은 특별히 WM_SYSKEYCHAR메시지가 발생을
합니다. 이 메세지 안에서 리턴값을 1로 바꾸어버리면
성공하게 되죠...
에러 음악이 더이상 출력되지 않습니다.
위와 같은 점들은 참고하시면 키보드나 마우스를
제어하는데 큰 어려움은 없습니다.
그외에 폼안의 어떤 컨트롤에 포커스가 있더라도
키이벤트를 가로채고 싶다면 폼의 KeyPreView속성을 True로
해두시면 모든 키보드 이벤트가 폼을 경유하게 됩니다.
마우스에 관련된 질문이었는데.... 성격이 유사한것
같아서 키보드에 관련된 참고사항까지 말씀을
드렸네요...
- 최정한
|