답변 감사합니다.
더블클릭이벤트를 수작업으로 구현하라는 뜻으로 들립니다.
콘트롤이 하나면 괜찮겠지만 콘트롤이 추가될때마다
마우스이벤트 시간을 기록하는 변수, 이벤트 처리코드 등을 추가해야하는 번거로움이 생길 것 같습니다.
델파이나 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
: : );
: :