WM_TOUCH erhalten

WM_TOUCH erhalten

Beitragvon compmgmt » 17. Jan 2019, 21:18 WM_TOUCH erhalten

Moin,

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.
Das komplette Projekt befindet sich als ZIP im Anhang.

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
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Code: Alles auswählen
InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);
Have fun with this snippet ;)
compmgmt
 
Beiträge: 351
Registriert: 25. Nov 2015, 18:06
Wohnort: in der Nähe von Stuttgart
OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4 | 
CPU-Target: i386 + x86_64
Nach oben

Beitragvon sstvmaster » 17. Jan 2019, 22:11 Re: WM_TOUCH erhalten

Schau mal hier wird damit sogar gemalt, ist zwar D7 aber vielleicht hilfts: http://www.tecepe.com.br/d7gestures/

Und hier auch noch was: https://www.delphipraxis.net/156146-mul ... i-7-a.html
sstvmaster
 
Beiträge: 208
Registriert: 22. Okt 2016, 23:12
Wohnort: Dresden
OS, Lazarus, FPC: Windows 7 32bit (L 2.0.4 FPC 3.0.4) | 
CPU-Target: 32Bit
Nach oben

Beitragvon Michl » 17. Jan 2019, 22:25 Re: WM_TOUCH erhalten

Ich kann es hier nicht testen, doch probier mal, ob es bei dir so geht? Dein Projekt geändert anbei.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Code: Alles auswählen
type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 
Michl
 
Beiträge: 2320
Registriert: 19. Jun 2012, 12:54
OS, Lazarus, FPC: Win7 Laz 1.7 Trunk FPC 3.1.1 Trunk | 
CPU-Target: 32Bit/64bit
Nach oben

Beitragvon compmgmt » 18. Jan 2019, 18:59 Re: WM_TOUCH erhalten

Michl hat geschrieben:Ich kann es hier nicht testen, doch probier mal, ob es bei dir so geht? Dein Projekt geändert anbei.

Vielen Dank, das hat mir sehr weitergeholfen.
Code: Alles auswählen
InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);
Have fun with this snippet ;)
compmgmt
 
Beiträge: 351
Registriert: 25. Nov 2015, 18:06
Wohnort: in der Nähe von Stuttgart
OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4 | 
CPU-Target: i386 + x86_64
Nach oben

Beitragvon Michl » 18. Jan 2019, 22:33 Re: WM_TOUCH erhalten

Das ist gut.

Daß nicht alle Systemmessages durchgeleitet werden, ist leider ein Limit der systemübergreifenden Programmierung.
Der Sammelbugreport für ähnliche Probleme ist hier: https://bugs.freepascal.org/view.php?id=30415
Die Dokumentation dazu ist hier: http://wiki.lazarus.freepascal.org/Win32/64_Interface#Processing_non-user_messages_in_your_window
Code: Alles auswählen
type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 
Michl
 
Beiträge: 2320
Registriert: 19. Jun 2012, 12:54
OS, Lazarus, FPC: Win7 Laz 1.7 Trunk FPC 3.1.1 Trunk | 
CPU-Target: 32Bit/64bit
Nach oben

• Themenende •

Zurück zu Windows



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

porpoises-institution
accuracy-worried