Wieso wurden die hohen Erwartungen enttäuscht? Die Gründe liegen zum einen an der anfangs viel zu schwachen Hardware und relativ hohen Preisen im Vergleich zu herkömmlichen Notebooks. Im Herbst 2003 kam dann die zweite Tablet PC-Generation auf den Markt, die durch die neue Intel Centrino-Technologie wesentlich leistungsstärker geworden ist. So wurde zumindest ein erstes Hindernis behoben. Auch im Hause Microsoft wurde es immer ruhiger in Sachen Tablet PC und zudem fehlte es immer noch an cleveren Tablet PC-Anwendungen. Microsoft hat den Ernst der Lage erkannt und Ende letzen Jahres zur Tablet PC Challenge [1] aufgerufen: Does your code think in ink?, um der Entwicklergemeinde einen Anreiz zu geben. Gesucht und prämiert wurden Anwendungen, die auf intelligente und innovative Weise Handschrift und Stiftbedienung in einer Lösung einsetzen.
Stellt sich die Frage, was eine solche Anwendung ausmacht. Wann ist eine Bedienbarkeit mit dem Stift sinnvoll? Wie gehe ich mit stiftbasierten Eingaben um? Welche davon lasse ich handschriftlich zu? Dieser Artikel soll Ihnen einen Einblick in die Tablet PC-Entwicklerwelt geben - insbesondere in die Bereiche Benutzeroberflächen und Umgang mit digitaler Tinte.
Der Weg zum Erfolg
Es gibt grundsätzlich zwei unterschiedliche Ansätze, wie Tablet PC-Anwendungen gestaltet und aufgebaut werden. Die richtige Entscheidung kann hier den Erfolg oder Misserfolg Ihrer Anwendung bestimmen. Allerdings müssen Sie sich nicht allzu viele Gedanken machen, da der geeignete Ansatz weitgehend durch den Anwendungs- und Einsatzbereich der Anwendung festgelegt ist. Das heißt, dass Sie sich nur darüber im Klaren sein müssen, wie Anwender Ihre Anwendung nutzen werden. Entscheidend ist dabei die Frage, ob diese sowohl auf Tablet PC und Nicht-Tablet PC (also mit Maus und Tastatur) genutzt werden soll oder aber fast ausschließlich für den Einsatz auf dem Tablet PC gedacht ist.Beispiele für erste Kategorie sind Microsoft Office XP und 2003, der MSN Messenger in der Version 6.1 oder der MindManager von MindJet [2]. Allen diesen Zwittern ist gemein, dass es bekannte Applikationen sind, die um eine Ink-Funktionalität erweitert wurden. Klarer Vorteil, die Bedienung der Anwendung und das UI sind grundsätzlich bekannt, der Nutzer muss sich nur noch mit der Stiftbedienung und Handschrifteneingabe vertraut machen. An der vertrauten Benutzeroberfläche wurde sehr wenig verändert (meist nur ein zusätzliches Menü, um beispielsweise Anmerkungen beim Überarbeiten eines Dokuments auch handschriftlichen eingeben zu können). Ziel ist, die Bedienung der Anwendung bis zu einem gewissen Grad auch auf einem Tablet so angenehm wie möglich zu gestalten und diese um einige nette Möglichkeiten zu erweitern (handgeschriebene eMails mit Herzchen zum Beispiel).
Auf der Gegenseite stehen jene Anwendungen, die vom Ansatz her für die Verwendung auf einem Tablet PC entwickelt wurden und deren Bedienbarkeit per Stift im Vordergrund steht. Meist handelt es sich hier um Anwendungen, die überhaupt erst durch den Tablet PC und dessen Mobilität möglich geworden sind. Häufig sind dies Datensammelanwendungen, beispielsweise die Kundenbefragung auf einer Messe oder die Patientenaufnahme auf einer Notaufnahme im Krankenhaus. In beiden Fällen werden papierbasierte Prozesse durch digitale abgelöst. Es kann aber auch der digitale Notizblock oder Rechenblock [3] sein, den man in Meetings, Vorlesungen und anderen Veranstaltungen nutzt, um schnell ein paar wichtige Punkte mitzuschreiben (Beispiele sind hier Microsoft Journal oder Microsoft Office OneNote 2003).
Die erste und entscheidende Frage lautet also: Handelt es sich um eine mehr oder weniger reine Tablet PC-Anwendung oder nicht? Sollen eine existierende Anwendung um Stift-Funktionalität erweitert, ein ganz neues Bedienkonzept entwickelt oder aber eine neue Anwendung erstellt werden, die in einem Bereich zum Einsatz kommt, den man aufgrund Hardware-technischer limitierender Faktoren zuvor noch nicht ansprechen konnte? (Anmerkung hierzu: Auch jede reine Tablet PC-Anwendung sollte auch noch komfortabel mit Maus und Tastatur bedient werden können, schließlich verfügt jeder Tablet PC grundsätzlich auch über diese.)
Praxisbeispiel: Der Feedback-Bogen
Jeder kennt ihn: den beliebten Feedbackbogen, den auszufüllen man auf jeder Entwicklerkonferenz aufgefordert wird. Entweder liegt er in Papierform vor, steht auf Feedbackterminals oder im Web zum Ausfüllen online bereit - oder (wesentlich angenehmer) nette Hostessen fragen den Teilnehmer nach der eigenen Meinung und den Bogen für ihn aus.Ziel ist es natürlich, den papierenen Feedbackprozess durch einen digitalen zu ersetzten. Zentrale Anforderungen liegen darin, dass der Tablet PC-basierte Feedbackbogen so komfortabel und effizient ausgefüllt werden können soll wie sein Vorgänger und dass die Korrektheit der erfassten Daten gleichzeitig zunimmt. Dass die gesammelten Daten schneller für eine Auswertung bereitstehen, versteht sich von selbst.
Ausgangspunkt stellen der papierene Feedbackbogen und sein im Web existierendes Pendant dar. Die schnelle und einfach Bedienbarkeit ist hier eines der wichtigsten Kriterien. Bei einer rein Maus-basierten Anwendung entscheidet dabei der Klick. Obgleich die Verwendung des Stifts der Verwendung einer Maus ähnlich ist, kann sie viel schwieriger sein: Dateneingabe und Bedienung bzw. Menüsteuerung müssen mit dem Stift erledigt werden. Die Treffgenauigkeit mit dem Stift spielt ebenfalls eine wichtige Rolle. Und: Wie schnell können Sie mit dem Stift die Farbe Gainsboro im Menü Format-Hintergrund auswählen oder haben den gesamten Text markiert (im Gegensatz zu Strg+A)?
Fazit: Machen Sie es dem Nutzer so einfach wie möglich und so deutlich wie möglich, wo und wie er den Stift einsetzten kann, um Menübefehle auszuführen, und wo er handschriftliche Eingaben vornehmen kann. Eventuell gehen Sie auch so weit, zwischen Stift- und Mausmodus klar zu unterscheiden (wie z.B. beim bereits erwähnten MindManager von MindJet).
Aber zurück zum Beispiel: Nehmen wir an, dass wir eine existierende Anwendung Questionaire auf den Tablet PC übertragen sollen. Die Anwendung beinhaltet ein einziges Formular, über das personenbezogene Daten sowie Umfrageantworten erfasst werden. (Die Anwendung finden Sie als C#-Sourcecode auf der beiliegenden CD.) Alle erfassten Daten werden in einem typisierten DataSet gesammelt und der Einfachheit halber tagweise als *.xml auf der lokalen Festplatte gesichert.
Warum haben wir uns nicht entschieden, den papierenen Feedbackbogen direkt auf den Tablet PC zu übernehmen? Aus eigener Erfahrung und bestätigt von zahlreichen Kollegen ist die eigene Handschrift auf einem Tablet PC deutlich größer als auf einem Blatt Papier. Hinzu kommt, dass bei einer Auflösung von 1024 x 768 und einem 10 bis 12 Zoll großen Display ein DIN A4-Format immer kleiner dargestellt wird. Im aktuellen Software Developer Kit (SDK) 1.5 finden Sie ein entsprechendes Beispiel: Scanned Paper Form. Probieren Sie einmal, dies auszufüllen und lassen Sie sich dann die erkannten Werte anzeigen, Sie werden frustriert sein. Eine Lösung hier wäre, ein neues papierenes Formular für die Maße des Tablet PC und durchschnittliche Schriftgröße der Nutzer zu entwerfen und zu programmieren, aber dies wäre Stoff für einen weiteren Artikel.
Im Rahmen eines Rapid Application Developments soll die Fragenbogen-Anwendung ad hoc in eine Tablet PC-Anwendung überführt werden. Eine erste - und gleichzeitig die schnellste - Lösung bestünde darin, jedes Windows.Forms.TextBox-Control durch ein Microsoft.Ink.InkEdit-Control zu ersetzten, ein paar Kompilierfehler zu korrigieren (nicht alle Methoden und Eigenschaften der TextBox werden von InkEdit unterstützt) und die Anwendung neu zu erstellen. Super, funktioniert nur, die jetzt Stift-aktivierten Felder sind zu klein für die Eingabe. Beim Ausfüllen muss ich mich schon sehr konzentrieren und auch dann laufe ich häufig genug aus dem Feld. Also verwerfen wir diesen Ansatz.
|
Das Pen Input Panel (PIP)
Wie löst man dieses Problem zu kleiner Eingabefelder? Hierzu gibt es zwei Möglichkeiten: Zum einen könnte man die Eingabefelder entsprechend vergrößern (unschön) oder aber man nutzt das PenInputPanel (PIP), welches im SDK 1.5 zur Verfügung steht (besser). Mit dem PIP bekommt man ein standardisiertes Input-Panel, das es erlaubt, komfortable handschriftliche Eingaben in die Textbox vorzunehmen. Vor dem SDK 1.5 musste man dies noch mühsam selbst programmieren, jetzt deklariert man schlicht ein PenInputPanel und weist ihm bei der Instanziierung die entsprechende Textbox zu:private Microsoft.Ink.PenInputPanel txtEMailPip;...txtEMailPip = new Microsoft.Ink.PenInputPanel(txtEMail);
So schön diese Lösung bereits ist, so ist sie dennoch weiterhin mit einigen Schwächen versehen. Falsch erkannte Handschrift ist schwer und nur durch Neueingabe zu korrigieren, die Erkennung der eMail-Anschrift, der Telefonnummer, wie auch des Geburtsdatums lässt zu wünschen übrig. Wechsle ich zu schnell von einem Eingabefeld ins nächste, wird das zuletzt Geschriebene schlichtweg ignoriert. Das Warten auf den Abschluss der Handschriftenerkennung und die Übergabe an die Textbox oder der Klick auf den Senden-Button sind unnötig und stören den Eingabefluss.
Um diesen Fehlern beizukommen, müssen wir ein wenig mehr Code schreiben. Jedes Mal wenn Sie von einem Eingabefeld ins nächste wechseln, ohne auf die Textübergabe zu warten, hat sozusagen eben diese versagt. Genau dieses Ereignis des Versagens fangen wir nun ab und erzwingen es (die Textübergabe an die zuvor aktive Textbox) im Code. Das entsprechende abzufangende Event heißt InputFailed:
txtEMailPip.InputFailed += new PenInputPanelInputFailedEventHandler(InputFailed_Event);...public void InputFailed_Event(object sender,PenInputPanelInputFailedEventArgs e){// Make sure the object that generated the//event is a PenInputPanel objectif (sender is PenInputPanel){PenInputPanel pip = (PenInputPanel)sender;// Set the text in the previous controlpip.AttachedEditControl.Text += e.Text;}}
Korrekte Dateneingabe
Um die korrekte Erkennung bestimmter Eingaben wie Postleitzahlen, Web- und eMail-Adressen, Datumswerten und Telefonnummern zu erhöhen, können wir uns so genannter Factoids bedienen. Mit deren Hilfe teilt man dem PIP mit, welche Eingabe (genauer das Eingabeformat und die zu erwartenden Zeichen, also ähnlich regulären Ausdrücken) wir in einem bestimmten Feld erwarten. Das Tablet PC SDK stellt uns eine Reihe dieser Factoids zur Verfügung (leider könne wir diese noch nicht selbst definieren). Anzumerken ist hierbei, dass in Abhängigkeit von der auf dem Tablet PC aktiven Sprache des Texterkenners unterschiedliche Eingabeformate erwartet werden, d.h. erkennen Sie gerade US-Englisch, so wird das Factoid.Date ein Datumsformat in der Struktur MM/dd/yyyy erwarten:txtBirthDatePip.Factoid = Factoid.Date;txtMobilePhonePip.Factoid = Factoid.Telephone;txtEMailPip.Factoid = Factoid.Email;txtMiddleInitialPip.Factoid = Factoid.OneChar;
private Microsoft.Ink.InkEdit txtEMail;
Listing 1
public void VisibleChanged_Event(object sender, PenInputPanelVisibleChangedEventArgs e){if(sender is PenInputPanel){enInputPanel pip = (PenInputPanel)sender;// If the panel has become visible...if (e.NewVisibility){// Move the pen input panel to// screen position 100, 100pip.VerticalOffset = 20;pip.HorizontalOffset = (pip.AttachedEditControl.Left *(-1)/2 ) + 10;}}}
|
Arbeiten mit Gesten
Daneben stört mich noch eine weitere Sache: Ich bin es gewöhnt, ein Auswahlfeld durch einen schnellen Haken zu markieren. Im Moment muss ich sehr genau auf die Checkbox tippen, um sie auszuwählen. Nicht, dass wir dies jetzt nicht mehr erlauben wollten, aber die Möglichkeit, einfach - wie in Abpictureung 3 gezeigt - grob über die Checkbox einen Haken zu zeichnen, um ihre Checked-Eigenschaft auf true zu setzten, sollte zusätzlich gegeben sein. Und wenn ich den Haken falsch gesetzt habe, sollte dieser durch ein Durchstreichen auch wieder entfernt werden können.
Listing 2
//Ink enabling CheckBoxesCheckBox cb = (CheckBox)cont;inkCheck = new InkOverlay(cb.Handle);inkCheck.CollectionMode = CollectionMode.InkAndGesture;//Which gestures to collect and recognize...inkCheck.SetGestureStatus(ApplicationGesture.Scratchout, true);inkCheck.SetGestureStatus(ApplicationGesture.Check, true);//Hook up the gesture and stroke eventhandlers...inkCheck.Gesture += new InkCollectorGestureEventHandler(inkCheck_Gesture);inkCheck.Stroke += new InkCollectorStrokeEventHandler(inkCheck_Stroke);//Set to go, turn ink and gesture collection on...inkCheck.Enabled = true;...private void inkCheck_Gesture(object sender, InkCollectorGestureEventArgs e){//Only if pretty sure about a gesture we perform the operation...if((e.Gestures[0].Confidence == RecognitionConfidence.Strong) ||(e.Gestures[0].Confidence == RecognitionConfidence.Intermediate))switch(e.Gestures[0].Id){case ApplicationGesture.Scratchout://Erase / DeleteUnCheckCheckBox();//MessageBox.Show("Delete");break;case ApplicationGesture.Check://CheckCheckCheckBox();break;default:break;}//Delete the strokes...e.Cancel = false;pnlHandwritingInput.Invalidate();}
Ein kleines Beispiel im gleichen Kontext: Wie löschen Sie geschriebenen Text auf einemn Notizzettel? Fangen Sie die Geste ScratchOut ab, ermitteln die BoundingBox und bestimmen, welche anderen Strokes sich mit einem bestimmten Prozentsatz innerhalb dieses Rechtecks befinden und löschen alles dann entsprechend:
//ScratchOut has been recognized and calls EraseInkprivate void EraseInk(Strokes scratchOutStroke){//Get bounding box of scratch-out stroke...Rectangle rectangleToErase = scratchOutStroke.GetBoundingBox(BoundingBoxMode.Default);//Because the scratchOutStroke is horizontal, add some height to it...rectangleToErase.Height = rectangleToErase.Height * 2;//Strokes that where hit must at least be 40% inside the rectangleToErase...Strokes strokesToErase = inkOverlay.Ink.HitTest(rectangleToErase, 40);//Erase the strokes...inkOverlay.Ink.DeleteStrokes(strokesToErase);}
Des Weiteren besteht die Möglichkeit, Stift-Gesten auszuwählen oder neu zu definieren, die häufig genutzte Befehle, beispielsweise Save und New auslösen - quasi als Keyboard-Shortcut-Ersatz. Hingewiesen sei hierbei wiederum auf Leszynski und das Tool Leszynski inDirect for Tablet PC, das es erlaubt, mit Gesten zu arbeiten [5].
Der Tablet PC und die Zukunft - Lonestar
Microsoft will Mitte 2004 die Windows XP Tablet PC Edition 2004 (Codename Lonestar) auf den Markt bringen. Die neue Tablet PC Edition besitzt eine wesentlich verbesserte Handschrifterkennung, ein neues TabletInputPanel und bietet Entwicklern eine noch bessere Plattform, um die Stift- und Tintenfunktionalität in Anwendungen zu integrieren. Beispielsweise unterstützt das neue Tablet PC SDK 1.7 die Handschrifteingabe in APS.NET-Anwendungen. Bereits jetzt können Sie und sollten Sie mit der neuen Version experimentieren. Seit Ende Dezember steht eine Alpha-Version für Microsoft-Betatester zur Verfügung. Schicken Sie einfach eine eMail an TabAlpha@Microsoft.com mit dem Betreff: Information Request - GDN Team Page. Lonestar ist im wesentlichen ein Update zur existierenden Tablet PC Edition, das in wenigen Minuten durchgeführt ist (im Moment nur die englische Edition). Ist das Update abgeschlossen, lässt sich das neue SDK ohne Probleme installieren.Joerg Ch. Jasper ist Leiter des DevTeams bei der it-function gmbh & co.kg (www.itfunction.de) . Zusammen mit seinem Kollegen Oliver Hepfner ist er verantwortlich für Mobile Lösungen und Softwareentwicklungen auf .NET. Sie erreichen beide unter devteam@itfunction.de.
Links und Literatur
- [1] Tablet PC Challenge: www.microsoft.com/germany/aktionen/tabletpcchallenge/
- [2] MindJet: www.mindjet.de/
- [3] xThink Caluclator: www.xthink.com/
- [4] Leszynski inTegrate Tablet PC Extensions for Visual Studio 2003 Developer Preview Edition: www.leszynski.com/
- [5] Leszynski inDirect for Tablet PC: www.leszynski.com/
- Rob Jarret et al., Building Tablet PC Applications; MS Press, 2003
- Carlos C. Tapang, Achieve the Illusion of Handwriting on Paper When Using the Managed INK API, Oktober 2003: msdn.microsoft.com/msdnmag/issues/03/10/TabletPC/default.aspx
- Tracy L. Bannon ; Master the Pen Using Ink Controls in Your Tablet Applications; Feb 2003; www.devx.com/dotnet/Article/10820/
- Tablet PC Developer: www.gotdotnet.com/team/tabletpc/
- Tablet PCs.net: www.etabletpc.com/
- Tablet PC Minds: www.tabletpcminds.com/




