![]() |
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 |
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 |
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 |
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. |
AW: Stift Eingabe zum Schreiben auf Tablet
Zitat:
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 |
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 |
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 |
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 |
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) |
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ß... |
AW: Stift Eingabe zum Schreiben auf Tablet
Liste der Anhänge anzeigen (Anzahl: 1)
Mein Gott. Holger ist der Mann!
|
AW: Stift Eingabe zum Schreiben auf Tablet
Hmm.
Es gibt sogar nen Demo bei Embarcadero: ![]() Leider ist die Seite des Programmierers schon seit 2009 down, da sollte es noch weitere Infos gegeben haben. |
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. |
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:
an letzter Stelle einen
HitTestWithLasso(..)
Delphi-Quellcode:
-Parameter erwartet:
var
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: ![]() ![]() ![]() |
AW: Stift Eingabe zum Schreiben auf Tablet
Zitat:
Da werden noch ein paar Schoten drinnen sein.. ;) |
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 |
AW: Stift Eingabe zum Schreiben auf Tablet
Hmm..
Zitat:
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.. |
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 ;-) |
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 |
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 ;) |
AW: Stift Eingabe zum Schreiben auf Tablet
Hmm..
Zitat:
Nochmal hierzu.. unter Delphi 6 ist EmptyParam so in der 'Varints' deklariert
Delphi-Quellcode:
Ich vermute, das es bei späteren Delphi Versionen zu einer 'echten' const wurde!
var
EmptyParam: OleVariant; // "Empty parameter" standard constant which can be |
AW: Stift Eingabe zum Schreiben auf Tablet
Ja fast, EmptyParam() ist jetzt eine Funktion, deshalb kann man es nicht mehr als VAR Parameter übertragen.
|
AW: Stift Eingabe zum Schreiben auf Tablet
Zitat:
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: |
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 |
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 |
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 |
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:
Weiter geht's in InkOverlaySystemGesture: bei ID = ISG_Tap oder ISG_Drag mußt Du nun das Scrollen aktivieren (Merken der aktuellen Ausgangsposition)
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; 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 |
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 |
AW: Stift Eingabe zum Schreiben auf Tablet
Hat sich erledigt.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz