Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 Q&A
Delphi Programming Q&A
[4292] [답변] U9389040/ [Del] 버튼을 드래그시...
이용자 [ ] 1816 읽음    1998-08-31 04:10

안녕하세요?

마우스 버튼이 눌리면 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로
해두시면 모든 키보드 이벤트가 폼을 경유하게 됩니다.

마우스에 관련된 질문이었는데.... 성격이 유사한것
같아서 키보드에 관련된 참고사항까지 말씀을
드렸네요...

- 최정한


+ -

관련 글 리스트
4292 [답변] U9389040/ [Del] 버튼을 드래그시... 이용자 1816 1998/08/31
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.