seit einigen Tagen verzweifle ich daran die WM_TOUCH Message zu erhalten. Nach etlichen Google-Recherchen welche mich unter anderem zum englischen Lazarusforum, Delphi-Praxis, dem MSDN Forum u.a. geführt hatten erstelle ich nun mal selbst einen Beitrag dazu.
Angeblich ist die Sache realtiv einfach: Man ruft einmal RegisterTouchWindow auf und erhält ab dann die WM_TOUCH Message. Nur ist das bei mir nicht der Fall. Gleiches mit der WM_POINTER*** Message. Hab dazu mal ein Testprojekt erstellt:
Code: Alles auswählen
...
const
TWF_FINETOUCH = $00000001;
TWF_WANTPALM = $00000002;
WM_TOUCH = $00000240;
WM_POINTERDOWN = $00000246;
function RegisterTouchWindow(h: HWND; ulFlags: ULONG): BOOL; stdcall; external user32;
type
{ TForm1 }
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
public
procedure WMTouch(var TheMessage: TLMessage); message WM_TOUCH;
procedure WMPointerdown(var TheMessage: TLMessage); message WM_POINTERDOWN;
procedure WndProc(var TheMessage: TLMessage); override;
end;
...
implementation
procedure TForm1.FormCreate(Sender: TObject);
begin
if not RegisterTouchWindow(Handle, TWF_WANTPALM) then ShowMessage('Error: ' + IntToStr(GetLastError));
end;
procedure TForm1.WMTouch(var TheMessage: TLMessage);
begin
ShowMessage('Touched');
end;
procedure TForm1.WMPointerdown(var TheMessage: TLMessage);
begin
ShowMessage('Pointer down');
end;
procedure TForm1.WndProc(var TheMessage: TLMessage);
begin
if (TheMessage.msg <> $20) and (TheMessage.msg <> $84) and (TheMessage.msg <> $B012) then begin
WriteLn('0x' + IntToHex(TheMessage.msg, 8));
end;
inherited WndProc(TheMessage);
end;
end.
Im Terminal wird niemals "0x00000240" wenn ich mit dem Finger auf das Display tippe oder wische. Es wird immer nur 0x00000200 (Cursor Move), 0x00000201 (LMB Down), 0x00000202 (LMB Up) und 0x00000215. Also exakt die gleichen Messages wie bei normalen Mausaktionen.
Verwendete Hardware: Lenovo Yoga 520
P.S.: Im testprojekt ist WM_CONTEXTMENU nur drin, um zu testen ob überhaupt Messages korrekt ankommen.
- Patrick