당신이 직면 한 것은 터치 입력 장치가있는 Windows의 "정상적인"그러나 어리석게도 어리석은 행동입니다. 우리는 잠시 동안 똑같은 문제에 직면 해 있으며, 지난 몇 주 동안 그것을 적극적으로 해결하려고 노력하고 있습니다. 트릭은 윈도우가 터치 입력 장치를 "마우스"로 처리하여 한 손가락으로 완전히 제어 할 수 있다는 것입니다. 따라서 다음과 같은 몇 가지 상태가 있습니다.
이벤트는 다음과 같습니다. 시작 (아래로), 이동, 위로, 오른쪽 클릭으로 콜백을 등록하려면 고정 된 상태로 이동하십시오. 마지막 보고서지만 여전히 아래로).
한편, 더 많은 주들이 있습니다. 먼저, 손가락을 아래로 누르면 내부적으로 "터치 다운"이 감지됩니다. 행사. 일정 시간 동안 기다릴 때보 다 (해킹을 변경하거나 드라이버에 따라 다를 수 있음), 마우스 오른쪽 버튼을 클릭했는지 확인하려면 (x 시간, 릴리스시) ! Y 시간 전에!오른쪽 클릭 이벤트) 또는 (터치 이벤트 트리거 - y 시간)이 x- 시간보다 길고 y가 만료되면 왼쪽 아래로 이벤트가 발생합니다. (클릭하지 마십시오!)).
한편 첫 번째 터치 다운이 이동 또는 - 중 하나로 중단되면 x 시간이 만료 될 때까지 기다리는 중! X 시간 전에 손가락의 릴리스는 자동 (릴리스)에(이동) 또는 마우스 왼쪽 버튼을 클릭을 왼쪽 를 트리거, 만기가된다. Y 시간이 만료되거나 MOVE가 트리거 된 후에도 같은 시간이 소요됩니다.
더 간단히 말하면 및 이해, 내가 예를 제공하려고합니다 : 포인트 B 0 초 위치, 시작 :
이의 당신은 터치 장치가, 다음과 같이 타이밍이 있다고 가정 해 봅시다 우리의 타임 라인. 포인트 X는 타임 라인의 5 초 위치에있는 첫 번째 트리거 중단 점입니다. 포인트 Y는 두 번째 트리거 중단 점으로, 타임 라인의 10 초에 위치합니다.
손가락을 만지면 타임 라인이 시작됩니다. 가능한 시나리오 : - 포인트 X가 나오기 전에 언제든지 놓기 -> 왼쪽 클릭이 트리거 됨 (바로 아래로 차례대로 이벤트를 차례대로 터치) - 포인트 X 이후이지만 포인트 Y보다 먼저 릴리스 -> 마우스 오른쪽 버튼 클릭 트리거 됨 (터치 다운 및 업 이벤트, 오른쪽 클릭 플래그 포함) - 지점 Y에 도달 - 왼쪽 아래로 트리거 됨! - 릴리스 사이에 트리거가 이동했는지 여부와 관계없이 언제든지 지점 Y 이후에 해제합니다 (타임 라인에서이 지점에 도달하기 전에 이동이 트리거되지 않음) -> 왼쪽 위로 트리거됩니다.
- 당신의 트리거 (DO) 이동 이벤트 이전에 도달 지점 X -> 그것을 감지하는 당신이 그것을 해제 할 때까지, 많은 이동 이벤트 다음, 트리거 아래 왼쪽 -> 다음
- 트리거 달려 당신 X 후에 Y 이벤트를 트리거 (do)하기 전에 -> 위와 같습니다!
- Y 지점에 도달하여 이후에 이동 -> 위의 체크 포인트 no4.
희망이 있습니다.
이제 가능한 해결책으로 이동하십시오 : 맞춤형 드라이버가 하나의 옵션이 될 수 있지만 아직 없습니다. 따라서 다른 옵션을 시도하고 있습니다. 현재 가장 유망한 것은 RAW_INPUT 및 Touch 후크를 사용하는 것 같습니다. 우리가 원하는 것을 얻기 위해 그들을 결합해야 할 것 같습니다. 밝은면은 감지하고 결정한 다음 응용 프로그램으로 전달하려는 타이밍과 이벤트에 관계없이 손가락이 장치에 닿으면 창 자체가 감지한다는 것입니다. 그러나 어떤 이유로 그와 같은 용도로 사용하기가 어려웠습니다. 화면을 터치 한 순간 손가락 아래에 나타나는 투명한 점을 간단히 확인할 수 있습니다.
한편, 안드로이드는 더 나은 방법 ...
는 희망이 도움이, 나는 우리가 통해 와서 사용에 대한 충분한 좋은 일을 일단 완벽한 솔루션으로 돌아올 행복 해요 이런 일을 처리합니다.
M.*
MouseDown이 발생하면 1000ms 간격으로 타이머를 활성화하고 MouseUp에서 타이머를 취소하는 것이 어떻습니까? OnTimer 이벤트에 코드를 삽입하십시오. 마우스를 1 초 이상 누르고 있으면 발사해야합니다. 당신은 아마 당신이 그것을 시작한 컨트롤을 저장하는 한 전체 양식에 대해 하나의 타이머를 없앨 수 있습니다. OnTimer 이벤트에서 타이머를 즉시 비활성화하는 것을 잊지 마십시오. – penarthur66
감사하지만, 익명의 스레드와 같은 이유로 작동하지 않습니다. 마우스를 움직이거나 손가락을 움직이지 않으면 MouseDown이 작동하지 않습니다. –
나는 윈도우 태블릿이 없다.하지만 난 그냥 TButton과 TMemo를 새로운 VCL 폼 (베를린)에 추가하고 MouseDown 및 MouseUp 이벤트 핸들러의 메모에 라인을 추가하는 코드를 추가했다. 마우스 클릭과 동기화됩니다. 태블릿이 표준 PC 마우스의 이벤트를 발생시키는 방식에는 차이가 있어야합니다. – penarthur66