Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Stift Eingabe zum Schreiben auf Tablet (https://www.delphipraxis.net/192146-stift-eingabe-zum-schreiben-auf-tablet.html)

oakley 22. Mär 2017 22:18

Stift Eingabe zum Schreiben auf Tablet
 
Hallo zusammen,

ich würde gerne in ein Programm die Möglichkeit zum Schreiben bzw. Zeichnen mit einem Stift integrieren, hab aber keine Idee wir ich da ran gehen könnte.
Oder gibt es evtl. eine anpassbare Komponente, die so etwas kann?

Wie gehe ich da am Besten heran? Paintbox? Oder gibt's möglicherweise etwas besseres?

Gruß

Mirko

sko1 23. Mär 2017 05:52

AW: Stift Eingabe zum Schreiben auf Tablet
 
Ich habe die Unterschriftenfunktion in meiner App per Paintbox implementiert, einfach im Mousedown Position merken und Mousmove zeichnen, Mouseup beendet das Ganze.

Ciao
Stefan

oakley 23. Mär 2017 21:33

AW: Stift Eingabe zum Schreiben auf Tablet
 
Hallo Stefan,

wie sieht das mit der Drucksensitivität des Stifts aus? Wird sowas mit abgebildet?

Viele Grüße

Mirko

himitsu 23. Mär 2017 21:54

AW: Stift Eingabe zum Schreiben auf Tablet
 
Auf diese Weise nicht.
Nur die Position und der Weg.

Mein neues Tablet hat sowas, dass nennt sich AnyPen, da kann man mit 'nem Kuli und Dergleichen eingaben tätigen, aber da dort die Drucksensitivität garnicht erfasst wird, wäre es auch egal, wenn das Programm dieses nicht beachtet.


Willst du alle "Fähigkeiten" einer drucksensitiven Eingabe haben, dann darfst du nicht über die "Maussimulation" gehen.
[edit] Wollte grade gucken, ob der TTouchManager von Delphi irgendwo was bietet (glaub ich zwar nicht), aber bei mir funktioniert grade Delphi überhaupt nicht mehr.

sko1 24. Mär 2017 06:08

AW: Stift Eingabe zum Schreiben auf Tablet
 
Zitat:

Zitat von oakley (Beitrag 1365373)
Hallo Stefan,
wie sieht das mit der Drucksensitivität des Stifts aus? Wird sowas mit abgebildet?
Viele Grüße
Mirko

Die wird bei mir nicht berücksichtigt, die Handys der Anwender meines Tools haben alle keine drucksensitiven Displays, ich arbeite nicht für die Post-Paketzustellung ;-)

Ich halte in dem Zusammenhang die Druckerfassung auch für nicht relevant, wenn Du das unterschriebene (bei mir PDF) Dokument ausgedruckt hast, ist sowieso nichts mehr davon vorhanden :-)

Ciao
Stefan

Rollo62 24. Mär 2017 12:34

AW: Stift Eingabe zum Schreiben auf Tablet
 
Du kannst statt in Bitmap auch die Daten direct in einen TPath und TPathData Pfad schreiben.
Der ist dan Vektor und recht flott, super skalierbar
(ich hoffe auch GPU unterstützt, habe das aber noch nicht gecheckt).

Kann dann mit DrawPath wieder irgendwohin gezeichnet werden.

Bitmaps sind soooo 1972 ...

Rollo

oakley 24. Mär 2017 12:42

AW: Stift Eingabe zum Schreiben auf Tablet
 
Okay danke für Eure antworten, ich versuche es mal mit Tpath.

Das wäre doch mal eine schöne Anwendung sowas wie One Note als Komponente :)

LG

Mirko

oakley 25. Mär 2017 21:09

AW: Stift Eingabe zum Schreiben auf Tablet
 
Hmmm... neee das ist irgendwie nicht wirklich das was ich wollte.

Wie macht One Note das denn?

Gibts nicht irgenwie so eine Tablet API die das abdeckt?

Gruß

Mirko

Der schöne Günther 27. Mär 2017 11:49

AW: Stift Eingabe zum Schreiben auf Tablet
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ink Input ist, glaube ich, seit Windows XP vorhanden, hat es aber bis heute nicht in Delphi geschafft. Spontan finde ich auch niemanden im Internet, der das mit Delphi irgendwie geschafft hat.

Ich würde mir ganz ehrlich einfach über Visual Studio einen WPF InkCanvas auf ein Formular ziehen und dieses Formular über eine DLL modal anzeigen. 30 Sekunden Aufwand, und Stift-Eingabe ist direkt drucksensitiv, auch Radierer funktioniert direkt.

(Die eigentliche Anwendung (Konsolenanwendung) auf dem Bild ist Delphi, das Formular aus der DLL)

HolgerX 27. Mär 2017 18:41

AW: Stift Eingabe zum Schreiben auf Tablet
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hmm..

Hab mal nen bisschen gegoogelt und zusammengesucht.

Herausgekommen ist eine kleine Handschriften Erkennung.
Diese verwendet das ActiveX (MSINKAUTLib) von Microsoft.

Das Beispiel habe ich mit Delphi 6 erzeugt sollte so aber eigentlich auch auf XE funktionieren.

Getestet habe ich das mit der Mouse..

Viel Spaß...

Der schöne Günther 27. Mär 2017 18:50

AW: Stift Eingabe zum Schreiben auf Tablet
 
Liste der Anhänge anzeigen (Anzahl: 1)
Mein Gott. Holger ist der Mann!

HolgerX 28. Mär 2017 04:13

AW: Stift Eingabe zum Schreiben auf Tablet
 
Hmm.

Es gibt sogar nen Demo bei Embarcadero:

http://cc.embarcadero.com/item/22684

Leider ist die Seite des Programmierers schon seit 2009 down, da sollte es noch weitere Infos gegeben haben.

HolgerX 29. Mär 2017 08:56

AW: Stift Eingabe zum Schreiben auf Tablet
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hmm..

Hab da mal ein bischen weiter gespielt...

Und gleich auch noch die Verwendung von anderen Recogniser eingebaut.

Der schöne Günther 29. Mär 2017 09:25

AW: Stift Eingabe zum Schreiben auf Tablet
 
Wirklich großartig :thumb:

Einzig was mir fehlen würde ist ein Radierer. Ich versuche demnächst mal ob ich das vielleicht auch alleine schaffe 8-)


PS: Eine Stelle kompiliert bei mir nicht weil
Delphi-Quellcode:
HitTestWithLasso(..)
an letzter Stelle einen
Delphi-Quellcode:
var
-Parameter erwartet:
Delphi-Quellcode:
function TInkDisp.HitTestWithLasso(Points: OleVariant; IntersectPercent: Single): IInkStrokes;
var
   lassoPoints: OleVariant;
begin
   lassoPoints := EmptyParam();
   Result := DefaultInterface.HitTestWithLasso(Points, IntersectPercent, lassoPoints);
end;

PS: Chua Chee Wee macht auch heute noch Delphi:
https://twitter.com/chuacw
http://chuacw.ath.cx/blogs/chuacw/ar...10/21/967.aspx
https://github.com/chuacw

HolgerX 29. Mär 2017 10:31

AW: Stift Eingabe zum Schreiben auf Tablet
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1365845)
PS: Eine Stelle kompiliert bei mir nicht weil..

Kann gut sein, ich habe auch schon einige Fehler in der Importierten Activx Unit überarbeitet.
Da werden noch ein paar Schoten drinnen sein.. ;)

oakley 29. Mär 2017 11:04

AW: Stift Eingabe zum Schreiben auf Tablet
 
Ich denke ich werde mal Günthers Ansatz versuchen.
Hab gerade Visual Studio Installiert. Mal sehen wie ich das jetzt umsetzte.

LG

Mirko

HolgerX 29. Mär 2017 11:31

AW: Stift Eingabe zum Schreiben auf Tablet
 
Hmm..


Zitat:

Zitat von oakley (Beitrag 1365853)
Ich denke ich werde mal Günthers Ansatz versuchen.
Hab gerade Visual Studio Installiert. Mal sehen wie ich das jetzt umsetzte.


Aber wenn ich Günther verstanden habe, dann macht er es nun ohne VS !?!

@Günther
Den Radiergummi habe ich bei mir auch schon laufen ;)
Werd noch ein bischen sauber machen und dann wieder posten..

Der schöne Günther 29. Mär 2017 11:56

AW: Stift Eingabe zum Schreiben auf Tablet
 
Da ich in Delphi überhaupt kein Land gesehen habe war der "Umweg" über eine DLL (die dann auch direkt fantastisch funktioniert hat) ein gangbarer Weg.

So toll wie es jetzt direkt in Delphi funktioniert würde ich den Umweg ehrlich gesagt auch nicht mehr gehen.

Wenn du mit deiner Anwendung fast bei Null anfängst und es sich hauptsächlich ums Zeichnen dreht, dann sicher direkt über VS ;-)

oakley 29. Mär 2017 12:07

AW: Stift Eingabe zum Schreiben auf Tablet
 
Bei null fange ich nicht wirklich an.
Ich wollte eine Möglichkeit bereistellen, handschriftliche Notizen zu einem Datensatz auf einem Tablet machen zu können.
Und dazu auch etwas zu zeichenen also im Prinzip sowas wie one note.

Das Ganze dann noch mit ein paar Fotos aufgepeppt... das wärs.

Sowas könnte man wohl wirklich besser in VB umsetzen und dann in Delphi als ActiveX laufen lassen?

LG

Mirko

HolgerX 29. Mär 2017 12:08

AW: Stift Eingabe zum Schreiben auf Tablet
 
Liste der Anhänge anzeigen (Anzahl: 1)
So, fertig..

Das mit dem Radierer war doch recht einfach..

Musste nur von InkCollector auf InkOverlay umstellen.
Hier dann in der MSINKAUTLib_TLB_HF endgültig alle EXIT rausnehmen.

und die Property EditingMode verwenden ;)

HolgerX 29. Mär 2017 12:20

AW: Stift Eingabe zum Schreiben auf Tablet
 
Hmm..

Zitat:

Zitat von Der schöne Günther (Beitrag 1365845)
PS: Eine Stelle kompiliert bei mir nicht weil
Delphi-Quellcode:
HitTestWithLasso(..)
an letzter Stelle einen
Delphi-Quellcode:
var
-Parameter erwartet:
Delphi-Quellcode:
function TInkDisp.HitTestWithLasso(Points: OleVariant; IntersectPercent: Single): IInkStrokes;
var
   lassoPoints: OleVariant;
begin
   lassoPoints := EmptyParam();
   Result := DefaultInterface.HitTestWithLasso(Points, IntersectPercent, lassoPoints);
end;


Nochmal hierzu..

unter Delphi 6 ist EmptyParam so in der 'Varints' deklariert

Delphi-Quellcode:
var
  EmptyParam: OleVariant;   // "Empty parameter" standard constant which can be
Ich vermute, das es bei späteren Delphi Versionen zu einer 'echten' const wurde!

Der schöne Günther 29. Mär 2017 12:29

AW: Stift Eingabe zum Schreiben auf Tablet
 
Ja fast, EmptyParam() ist jetzt eine Funktion, deshalb kann man es nicht mehr als VAR Parameter übertragen.

himitsu 29. Mär 2017 18:42

AW: Stift Eingabe zum Schreiben auf Tablet
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1365862)
Ja fast, EmptyParam() ist jetzt eine Funktion, deshalb kann man es nicht mehr als VAR Parameter übertragen.

Das ist auch gut so.

Ich hatte mal ausversehn die Konstante EmptyStr überschrieben,
mit dem Result, dass in allen leeren Spalten der cxDBGrids plötzlich etwas drin stand, obwohl da eigentlich überall ein NULL drin war, wenn man ins DataSet guckte.

Hatte nen Weilchen bedauert, bis ich den Grund fand. :stupid:

oakley 30. Mär 2017 16:00

AW: Stift Eingabe zum Schreiben auf Tablet
 
Sehr cool. Funktioniert einwandfrei.
Jetzt guck ich noch wie ich auf das Panel Photos bekomme und dann noch in A4 formatieren.

Richtig gut gemacht !!!

Gruß

Mirko

ULIK 3. Apr 2017 10:23

AW: Stift Eingabe zum Schreiben auf Tablet
 
Hi,

ich verwende das InkOverlay nun schon seit Jahren. Hat den Vorteil, Selektion, Radierer und Ähnliches gehen out of box. Aber Achtung: Probleme gibt es damit auf Touch-fähigen Systemen insbesondere ab Windows 8. Hier hat MS einen Bug eingebaut, so daß die 2-Finger Gesten zum Zoomen, Drehen nicht mehr funktionieren.
Und auch die reine Scrollgeste mit einem Finger funktioniert generell nicht, da das InkOverlay nicht zwischen Maus, Touch oder Digitizer-Eingaben unterscheiden kann: es wird immer alles als Eingabe betrachtet und entsprechend gelöscht, gezeichnet oder markiert!

Beim Arbeiten immer auch drauf beachten, daß die Reihenfolge von InkOverlay-Events zwar in sich immer gleich ist, aber die entsprechendenen VCL-Mouse-Events mal vor oder nach dem dazugehörigen InkOverlay-Event ausgeführt werden. Hier muß man die beiden Eventtypen funktional strikt trennen, wenn man beide verwenden will/muß.

Ach ja: wenn man damit arbeiten will: eine sehr gute Literaturempfehlung ist 'Building TabletPC Applications' von Rob Jarrett/Philip Su

oakley 12. Apr 2017 19:21

AW: Stift Eingabe zum Schreiben auf Tablet
 
Wenn MS da den Bug reingebaut hat, wie löst man dann zum Beispiel das Scrolling-Problem?

Ich habe generell übrigens noch Probleme das ich Bilder, die ich mit der Kamera gemacht habe nicht auf den Canvas bekomme.
Ich kann die zwar ablegen aber verschieben und die Größe ändern geht nicht.

Viele Grüße

Mirko

ULIK 13. Apr 2017 08:54

AW: Stift Eingabe zum Schreiben auf Tablet
 
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

oakley 13. Apr 2017 11:01

AW: Stift Eingabe zum Schreiben auf Tablet
 
Hallo Uli,

danke für die ausführliche Info.
Ich bin im Moment etwas eingespannt, werde das aber nach Ostern wieder angehen.

Viele Grüße

Mirko

bayou 17. Feb 2018 22:56

AW: Stift Eingabe zum Schreiben auf Tablet
 
Hat sich erledigt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:19 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