Einzelnen Beitrag anzeigen

Benutzerbild von ULIK
ULIK

Registriert seit: 25. Sep 2006
Ort: Regensburg
427 Beiträge
 
Delphi 11 Alexandria
 
#27

AW: Stift Eingabe zum Schreiben auf Tablet

  Alt 13. Apr 2017, 09:54
Im Prinzip läuft es darauf hinaus, daß Du vor der eigentlichen Eingabe erkennst, daß eine Toucheingabe erfolgen wird. Dann setzt man die Stifteigenschaften auf unsichtbar (voll transparent), so daß am InkOverlay bei der Eingabe nichts gezeichnet wird. Die Daten des Stroke werden dann in den Events in Scrollbewegungen umgerechnet und das zugrundeliegende Fenster gescrollt.

InkOverlayCursorInRange: umschalten auf voll transparent wenn Touch (da kann man die Eigenschaften der DrawingAttributes noch ändern - in späteren Events geht das nämlich nicht mehr!. Ob der Cursor des Event eine Toucheingabe ist, frägst Du so ab:
Delphi-Quellcode:
var
  iInkTablet2: IInkTablet2Disp;
begin
  Result := False;

  // Test, ob man TOUCH-Cursor ist
  if Supports(ACursor.Tablet, IID_IInkTablet2, iInkTablet2) then
    Result := (iInkTablet2.DeviceKind = TDK_Touch);
end;
Weiter geht's in InkOverlaySystemGesture: bei ID = ISG_Tap oder ISG_Drag mußt Du nun das Scrollen aktivieren (Merken der aktuellen Ausgangsposition)

In InkOverlayNewPackets wird dann das unterliegende Fenster gescrollt (als Differenz zur Position im SystemGesture)

in InkOverlayStroke mußt Du auf alle Fälle den bis dahin erstellten Stroke wieder verwerfen (Cancel auf True setzen), sonst wird diese gespeichert!

in InkOverlayCursorOutOfRange müssen dann die Drawing-Attributes wieder auf die ursprünglichen zurückgesetzt werden.

Das Problem dabei: NewPackets feuert sehr oft. Hier hilft es nun, auch die Mouse-Events zu benutzen und das Scrollen dorthin zu verlagern; da das MouseMove des unterliegenden Fenstern nicht so oft aufgerufen wird. Klappt deswegen, weil MouseMove IMMER nach InkOverlayCursorInRange und vor InkOverlayStroke / InkOverlayCursorOutOfRange erfolgt.

Ich kann Dir leider keinen fertigen Code dafür geben. Du mußt das an deine Anwendung geeignet anpassen. Aber das Prinzip sollte nun klar sein. Damit kann man das Toucscrolling simulieren, wenn es auch nicht so schön glatt läuft wie ein reguläres Scrollen.

Eine Zoom-Gesture läßt sich leider mit diesem Verfahren nicht simulieren, da immer nur der erste Touch-Punkt erkannt wird. Hierzu hab ich auch keine Lösung.


Grüße,
Uli
  Mit Zitat antworten Zitat