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

FreePascal Q&A
[128] Re:Re:Re:Re:마우스 좌우버튼 구분하여 더블클릭 이벤트 감지하는 방법?
MarunGuy [marunguy] 7676 읽음    2013-08-09 14:03
답변 감사합니다.

윈도자체에서는 좌우버튼을 구분해서 더블클릭 이벤트를 발생시키는 것으로 압니다.

WM_LBUTTONDBLCLK : http://msdn.microsoft.com/en-us/library/windows/desktop/ms645606%28v=vs.85%29.aspx
WM_RBUTTONDBLCLK : http://msdn.microsoft.com/en-us/library/windows/desktop/ms646241%28v=vs.85%29.aspx

라자루스(CodeTyphon)은 왼쪽버튼을 더블클릭하든 오른쪽버튼을 더블클릭하든 구분하지 않고 OnDblClick 이벤트가 발생합니다.
procedure TFormMain.TrayIconMainDblClick(Sender: TObject);
begin
  ShowMessage('double click'); // 좌우 버튼을 구별할 수 없음..
end; 


wxPython(wxWidgets), pyside(qt) 등에서는 더블클릭 이벤트에서 좌우버튼을 구분할 수 있습니다.

라자루스에서는 깔끔한 방법이 없는 건가요? TT_TT.

장성호 님이 쓰신 글 :
: 맞습니다.
: 직접 코딩으로 우측버튼  더블클릭 이벤트를 구현해야 한다는 뜻입니다.
:
: 앞서 예기했듯이
: 더블클릭은 OS(Windows 등)에서 메세지를 발생시켜줍니다.
: 개발툴 라이브러리(VCL등) 에서 발생시켜주는것이 아닙니다.
:
: OS에서 한쪽 버튼에 대해서만 더블클릭이벤트를 발생시켜주기 때문에
: 개발툴(델파이나 빌더)에서 좌우버튼 구분 기능 자체가 필요가 없죠
:
: 빌더/델파이에 그런기능 없습니다.
:
: 그럼..
:
:
: MarunGuy 님이 쓰신 글 :
: : 답변 감사합니다.
: :
: : 더블클릭이벤트를 수작업으로 구현하라는 뜻으로 들립니다.
: : 콘트롤이 하나면 괜찮겠지만 콘트롤이 추가될때마다
: : 마우스이벤트 시간을 기록하는 변수, 이벤트 처리코드 등을 추가해야하는 번거로움이 생길 것 같습니다.
: :
: : 델파이나 C++빌더에서는 마우스 좌우버튼 구분되는 더블클릭 이벤트가 지원되나요?
: :
: : 장성호 님이 쓰신 글 :
: : :
: : : [DoubleClick 이벤트]
: : :  
: : :  주 마우스 버튼을 정해진 시간안에 두번클릭( Mouse Down-Up-Down )을 해야 발생합니다.
: : :  또한 DoubleClick 은 System(OS)에서 메세지를 발생시켜 줍니다.
: : : 
: : :  1) 주 마우스란 System에 보통 오른손마우스 되어있는데 이경우 왼쪽 버튼이 됩니다.
: : :  2) 정해진 시간이란
: : :         System설정에 Click시간설정이 있는데.. 이 시간안데 클릭해야 합니다.
: : :  3) 두번클릭
: : :        Window시스템에서는 Mouse Click(Down-Up)을 두번해야 Doubleclick이 발생하는것이 아니라
: : :        Mouse-Down을 두번하면 (Down->Up->Down) DoubleClick이벤트가 발생합니다.
: : :
: : :  4) 기타
: : :     *  Shift-State에서 ssRight가 오른쪽 마우스 버튼입니다.
: : :     * MouseUp 이벤트에서는
: : :           ShiftState로 어느버튼에서 Event가 발생한것인지 판단안됩니다
: : :           ShiftState는 현재 상태이기 때문에, Up이벤트 발생시점엔 Mouse가 Up상태이므로 ShiftState에 포함안되어 있습니다.
: : :           TMouseButton 파라메터로 확인하셔야 합니다.
: : :       
: : :
: : : [결론]
: : :    주 버튼이 아닌 Mouse버튼으로 doubleClick을 측정하려면 .. 직접 시간계산을 해야할것입니다.
: : :       * OnMouseDown이벤트에서 우측버튼 DoubleClick을 시간계산해서 측정할수 있습니다.
: : :            - 첫번째 Down때 시작시간 기록해두고 , 다음 Down때 경과시간이 설정시간안이면 Double-Click으로 간주하면 될듯..
: : :
: : :       * Shift-State는  ssRight로 체크하시구요
: : :
: : : 이상입니다.
: : : 
: : : MarunGuy 님이 쓰신 글 :
: : : : 안녕하세요.
: : : :
: : : : 마우스 좌우버튼을 구분하여 더블클릭 이벤트를 감지하려고 하는데 잘 안됩니다.
: : : : 환경은 윈도7 64비트, CodeTyphon 4.41 32비트 입니다.
: : : :
: : : : OnDblClick 이벤트를 사용하면 되는데 좌우 버튼을 구별할 수 없네요.
: : : :
procedure TFormMain.TrayIconMainDblClick(Sender: TObject);
: : : : begin
: : : :   ShowMessage('double click'); // 좌우 버튼을 구별할 수 없음..
: : : : end; 

: : : :
: : : : OnMouseUp 이벤트를 이용해볼려고 했는데 생각처럼 안되네요.
: : : :
procedure TFormMain.TrayIconMainMouseUp(Sender: TObject; Button: TMouseButton;
: : : :   Shift: TShiftState; X, Y: Integer);
: : : : begin
: : : :   if mbRight = Button then
: : : :     ShowMessage('right click')
: : : :   else if (mbLeft = Button) and (ssDouble in Shift) then
: : : :   begin
: : : :     ShowMessage('left double click');
: : : :   end;
: : : : end;

: : : :
: : : : 그냥 if ssDouble in Shift then 해도 이벤트가 발생하지 않습니다.
: : : : LCL 도움말에서도 ssDouble 이 마우스 더블클릭이 맞는데 말이죠. 흠.
: : : :
type TShiftStateEnum = (
: : : :   ssShift,	// Shift key pressed
: : : :   ssAlt,	// Alt key pressed
: : : :   ssCtrl,	// Ctrl key pressed
: : : :   ssLeft,	// Left mouse button pressed.
: : : :   ssRight,	// Right mouse button pressed.
: : : :   ssMiddle,	// Middle mouse button pressed.
: : : :   ssDouble,	// Double mouse click.
: : : :   ssMeta,	// Meta key pressed.
: : : :   ssSuper,	// Super key pressed.
: : : :   ssHyper,	// Hyper key pressed.
: : : :   ssAltGr,	// Alt-GR key pressed.
: : : :   ssCaps,	// Caps lock key pressed
: : : :   ssNum,	// Num lock key pressed
: : : :   ssScroll,	// Scroll lock key pressed
: : : :   ssTriple,	// Triple mouse click
: : : :   ssQuad,	// Quadruple mouse click
: : : :   ssExtra1,	// Extra key 1
: : : :   ssExtra2	// Extra key 2
: : : : );

: : : :

+ -

관련 글 리스트
123 마우스 좌우버튼 구분하여 더블클릭 이벤트 감지하는 방법? MarunGuy 3559 2013/08/08
133     Re:마우스 좌우버튼 구분하여 더블클릭 이벤트 감지하는 방법? MarunGuy 7765 2013/08/12
131     Re:마우스 좌우버튼 구분하여 더블클릭 이벤트 감지하는 방법? MarunGuy 7871 2013/08/10
130     Re:마우스 좌우버튼 구분하여 더블클릭 이벤트 감지하는 방법? civilian 7013 2013/08/09
132         Re:Re:마우스 좌우버튼 구분하여 더블클릭 이벤트 감지하는 방법? MarunGuy 7285 2013/08/10
124     Re:마우스 좌우버튼 구분하여 더블클릭 이벤트 감지하는 방법? 장성호 3541 2013/08/09
125         Re:Re:마우스 좌우버튼 구분하여 더블클릭 이벤트 감지하는 방법? MarunGuy 4350 2013/08/09
127             Re:Re:Re:마우스 좌우버튼 구분하여 더블클릭 이벤트 감지하는 방법? 장성호 12298 2013/08/09
128                 Re:Re:Re:Re:마우스 좌우버튼 구분하여 더블클릭 이벤트 감지하는 방법? MarunGuy 7676 2013/08/09
129                     Re:Re:Re:Re:Re:마우스 좌우버튼 구분하여 더블클릭 이벤트 감지하는 방법? 장성호 7388 2013/08/09
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.