AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

WM_TOUCH und GetTouchInputInfo

Ein Thema von Hofes · begonnen am 11. Apr 2019 · letzter Beitrag vom 12. Apr 2019
Antwort Antwort
Seite 2 von 2     12   
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#11

AW: WM_TOUCH und GetTouchInputInfo

  Alt 11. Apr 2019, 14:07
Kann es sein dass die Message zwischenzeitlich schon wo anderst verwertet wird, und der Handle dadurch invalid wird?
Wie sieht denn dein Callstack aus, wenn du im AppMessage anhälst?
  Mit Zitat antworten Zitat
Hofes

Registriert seit: 11. Apr 2019
10 Beiträge
 
Delphi 10.3 Rio
 
#12

AW: WM_TOUCH und GetTouchInputInfo

  Alt 11. Apr 2019, 14:33
Das ist schwierig. Auf meinem Rechner habe ich kein TouchDisplay und auf der Siemens Kiste mit Multitouch ist kein Delphi installiert ...
Wie könnte ich das noch nachschauen ?
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#13

AW: WM_TOUCH und GetTouchInputInfo

  Alt 11. Apr 2019, 14:47
Probiere doch mal das:
https://stackoverflow.com/a/2337111
  Mit Zitat antworten Zitat
Hofes

Registriert seit: 11. Apr 2019
10 Beiträge
 
Delphi 10.3 Rio
 
#14

AW: WM_TOUCH und GetTouchInputInfo

  Alt 11. Apr 2019, 15:13
Ich hoffe das ist das was du meintest.
Bekomme beim touchen dann genau das hier raus:


(0021DB2D){MultiTouch.exe} [0061EB2D] Unknown function at TMethodImplementationIntercept + $1583FD
(0021BD1F){MultiTouch.exe} [0061CD1F] Unknown function at TMethodImplementationIntercept + $1565EF
(0021DB38){MultiTouch.exe} [0061EB38] Unknown function at TMethodImplementationIntercept + $158408
//hier wird gettouchinputinfo() ausgeführt
(0021DB2D){MultiTouch.exe} [0061EB2D] Unknown function at TMethodImplementationIntercept + $1583FD
(0021BD1F){MultiTouch.exe} [0061CD1F] Unknown function at TMethodImplementationIntercept + $1565EF
(0021DB38){MultiTouch.exe} [0061EB38] Unknown function at TMethodImplementationIntercept + $158408

Der Vorgang wurde erfolgreich beendet



Code:
procedure TForm1.AppMessage(var Msg: tagMSG; var Handled: Boolean);
var
  le: DWORD;
  i: integer;
  lp: HTOUCHINPUT;
begin
  if Msg.message = WM_TOUCH then
  begin
    Handled := false;
    lp := Msg.lParam;
    SetLength(touchinput, Msg.wParam);
    Memo1.Clear;
    SetLastError(0);
    Memo1.Lines.Add(GetCurrentStack);
    succes := GetTouchInputInfo(lp, UINT(Msg.wParam), @touchinput[0], SizeOf(TTouchinput));
    Memo1.Lines.Add(GetCurrentStack);
    if succes then
    begin
      Memo1.Lines.Add('suceeded: ' + BoolToStr(succes));
      Memo1.Lines.Add('msg.wparam: ' + IntToStr(Msg.wParam));
      Memo1.Lines.Add('msg.lparam: ' + IntToStr(Msg.lParam));
      Memo1.Lines.Add('msg.lparam: ' + IntToStr(lp));
      Memo1.Lines.Add('msg.hwnd: ' + IntToStr(Msg.hwnd));

      for i := 0 to Msg.wParam - 1 do
      begin
        Memo1.Lines.Add(IntToStr(touchinput[i].cxContact));
        Memo1.Lines.Add(IntToStr(touchinput[i].cyContact));
      end;
      Handled := true;
    end
    else
    begin
      Memo1.Lines.Add(SysErrorMessage(GetLastError));
    end;

    if Handled then
    begin
      CloseTouchInputHandle(lp);
    end;
  end;
end;
  Mit Zitat antworten Zitat
Hofes

Registriert seit: 11. Apr 2019
10 Beiträge
 
Delphi 10.3 Rio
 
#15

AW: WM_TOUCH und GetTouchInputInfo

  Alt 11. Apr 2019, 15:45
Ich hoffes das ist das was du meintest

Code:
(0021DB2D){MultiTouch.exe} [0061EB2D] Unknown function at TMethodImplementationIntercept + $1583FD
(0021BD1F){MultiTouch.exe} [0061CD1F] Unknown function at TMethodImplementationIntercept + $1565EF
(0021DB38){MultiTouch.exe} [0061EB38] Unknown function at TMethodImplementationIntercept + $158408
//hier wird gettouchinputinfo ausgeführt
(0021DB2D){MultiTouch.exe} [0061EB2D] Unknown function at TMethodImplementationIntercept + $1583FD
(0021BD1F){MultiTouch.exe} [0061CD1F] Unknown function at TMethodImplementationIntercept + $1565EF
(0021DB38){MultiTouch.exe} [0061EB38] Unknown function at TMethodImplementationIntercept + $158408

Der Vorgang wurde erfolgreich beendet

Code:
procedure TForm1.AppMessage(var Msg: tagMSG; var Handled: Boolean);
var
  le: DWORD;
  i: integer;
  lp: HTOUCHINPUT;
begin
  if Msg.message = WM_TOUCH then
  begin
    Handled := false;
    lp := Msg.lParam;
    SetLength(touchinput, Msg.wParam);
    Memo1.Clear;
    SetLastError(0);
    Memo1.Lines.Add(GetCurrentStack);
    succes := GetTouchInputInfo(lp, UINT(Msg.wParam), @touchinput[0], SizeOf(TTouchinput));
    Memo1.Lines.Add(GetCurrentStack);
    if succes then
    begin
      Memo1.Lines.Add('suceeded: ' + BoolToStr(succes));
      Memo1.Lines.Add('msg.wparam: ' + IntToStr(Msg.wParam));
      Memo1.Lines.Add('msg.lparam: ' + IntToStr(Msg.lParam));
      Memo1.Lines.Add('msg.lparam: ' + IntToStr(lp));
      Memo1.Lines.Add('msg.hwnd: ' + IntToStr(Msg.hwnd));

      for i := 0 to Msg.wParam - 1 do
      begin
        Memo1.Lines.Add(IntToStr(touchinput[i].cxContact));
        Memo1.Lines.Add(IntToStr(touchinput[i].cyContact));
      end;
      Handled := true;
    end
    else
    begin
      Memo1.Lines.Add(SysErrorMessage(GetLastError) );
    end;

    if Handled then
    begin
      CloseTouchInputHandle(lp);
    end;
  end;
end;
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#16

AW: WM_TOUCH und GetTouchInputInfo

  Alt 11. Apr 2019, 16:10
Das ist ein bisschen nichtssagend. Hast du einen Debug-Build oder ein Release-Build rüberkopiert?
  Mit Zitat antworten Zitat
Hofes

Registriert seit: 11. Apr 2019
10 Beiträge
 
Delphi 10.3 Rio
 
#17

AW: WM_TOUCH und GetTouchInputInfo

  Alt 12. Apr 2019, 09:33
Ich habe die Lösung zu meinem Problem gestern nachmittag noch herausgefunden und auch gepostet.
Aber aus irgendeinem Grund ist der bis jetzt noch nicht erschienen.. Und ich möchte es nicht nochmal posten.
Sonst passiert das selbe wie gestern - dass ich zwei mal das selbe schreibe.

Wie wird denn sowas gehandhabt ? Ich habe auch schon versucht den gestrigen doppelt geposteten Beitrag zu löschen - ohne Erflog

Gruß Hofes
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#18

AW: WM_TOUCH und GetTouchInputInfo

  Alt 12. Apr 2019, 11:41
Zitat:
Ich habe auch schon versucht den gestrigen doppelt geposteten Beitrag zu löschen - ohne Erflog
Nun mit Admin rechten wäre das möglich

Oder man meldet den Beitrag siehe der Button unter deinen Beitrag "Report!".
Selber löschen kannst du nichts lediglich deinen Beitrag editieren bzw.. den Inhalt davon innerhalb 24Stunden löschen solange der "Bearbeiten" Button sichtbar ist.

Du kannst auch über den Report Button eine Anfrage stellen warum dein Beitrag nicht erschienen ist.
Mitunter wird hier Spam aussortiert nach welchen Kriterien hier vorgegangen wird.. keine Ahnung bin kein Mod\Admin.

gruss

Geändert von EWeiss (12. Apr 2019 um 11:44 Uhr)
  Mit Zitat antworten Zitat
Hofes

Registriert seit: 11. Apr 2019
10 Beiträge
 
Delphi 10.3 Rio
 
#19

AW: WM_TOUCH und GetTouchInputInfo

  Alt 12. Apr 2019, 11:56
Interssant da sagt mir das Hint aber was anderes

Dann werd ich die Lösung von gestern nochmal posten müssen..

@TiGü
Ja stimmt, das war in Release compiliert, mit Debug kommt auch nicht so viel mehr raus...

Es ist so das GetTouchInputInfo mag aus irgendeinem Grund den Message Typ "tagMSG" nicht (kommt vom TApplicationEvents bzw
Application.OnMessage). Wenn ich nun eine Prozedur direkt mit dem WM_TOUCH verknüpfe bekomm ich den Message Typ "TMessage".
Diesen frisst die GetTouchInputInfo Funktion...

Code:
procedure wmTouch(var msg : TMessage); message WM_TOUCH;
//..
//..
procedure TfrmMain.wmTouch(var Msg: TMessage);
function tptp(const TouchPoint: TTouchInput): TPoint;
  begin
    Result := Point(TouchPoint.X div 100, TouchPoint.Y div 100);
    PhysicalToLogicalPoint(self.Handle, Result);
  end;

var
  TouchInputs: array of TTouchInput;
  counter: Integer;
  Handled: Boolean;
  P: TPoint;
begin
  Handled := False;
  SetLength(TouchInputs, Msg.WParam);
  GetTouchInputInfo(Msg.LParam, Msg.WParam, @TouchInputs[0], SizeOf(TTouchInput));

  try
    frmMainDisp.Memo1.clear;
    for counter := 0 to Length(TouchInputs)-1 do
    begin
      P := tptp(Touchinputs[counter]);
      frmMainDisp.Memo1.Lines.Add('X'+ IntToStr(counter) + ': ' +IntToStr(p.x));
      frmMainDisp.Memo1.Lines.Add('Y'+ IntToStr(counter) + ': ' +IntToStr(p.y));
    end;

    Handled := True;
  finally
    if Handled then
      CloseTouchInputHandle(Msg.LParam)
    else
      inherited;
  end;
end;
Das ist im Prinzip genau dasselbe wie "ich2" vor 9 Jahren.
Nur das ich die falschen Messages erhalten habe..

Gruß Hofes
Miniaturansicht angehängter Grafiken
beitragloeschen.png  
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#20

AW: WM_TOUCH und GetTouchInputInfo

  Alt 12. Apr 2019, 12:57
procedure TForm1.AppMessage(var Msg: tagMSG; var Handled: Boolean);

Nun ja!
Habe noch nirgends gesehen das man die Windows Messagen auf diese Art überschreibt.
Destotrotz war wohl blind das ich das nicht gesehen habe.

Viel Erfolg weiterhin.

Zitat:
Interssant da sagt mir das Hint aber was anderes
Damit ist wohl gemeint den Inhalt zu löschen den Beitrag direkt kann man nicht entfernen.
Sollte man vielleicht mal ändern. Ich meine den Hint!

gruss

Geändert von EWeiss (13. Apr 2019 um 12:24 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz