Einführung in die Entwicklung für den Tablet PC

von Markus Egger

Wenn Sie mit Microsofts Werkzeugen für die Entwicklung auf dem PC vertraut sind, verfügen Sie bereits über den Großteil der Kenntnisse, die Sie für die Anwendungsentwicklung für den Tablet PC benötigen. Hauptsächlich kommen noch die digitale Tinte sowie die mit ihr zusammenhängenden Features wie die Collection Ink hinzu. Zusätzlich müssen Sie noch einige weitere kleinere Dinge beachten, beispielsweise Überlegungen zur neuen Benutzeroberfläche sowie die Arbeit mit dem Tablet PC im Hochformat.

Aus diesem Grund konzentriert sich diese Website auf die Entwicklung für den Tablet PC und für den mobilen PC. Sie soll Sie mit allen Informationen versorgen, die Sie benötigen, um erfolgreich Anwendungen zu implementieren, die die Features von mobilen Rechnern und Tablet PCs ausnutzen. Die Artikel führen Sie zur Lösung von Problemen, die bei dieser Entwicklung auftauchen. Wenn Sie die Artikel gelesen haben, sollten sie den Überblick haben, welche Themen bei der Entwicklung eine Rolle spielen und was Sie bedenken müssen.

In diesem Artikel betrachten wir die Entwicklung für den Tablet PC als Ganzes und sehen, wie die einzelnen Themen miteinander harmonieren. Er bildet einen schnellen Überblick. Detaillierte Beschreibungen der unterschiedlichen Themen entnehmen Sie bitte den anderen Artikeln dieser Website.

Möglichkeiten und Vorteile

Tablet PCs sind reguläre PCs. Einige Entwickler und Anwender sind nach wie vor der Meinung, dass sie mit einem speziellen Betriebssystem wie Windows CE laufen, was nicht der Fall ist (glücklicherweise scheint diese Gruppe aber kleiner zu werden). Die erste Generation der Tablet PCs (vor Windows Vista) führte eine spezielle Version von Windows XP Professional aus, Windows XP Tablet PC Edition genannt. Dabei handelt es sich um eine Erweiterung von Windows XP Professional, was bedeutet, dass alle Features von Windows XP auch auf dem Tablet PC zur Verfügung stehen. Zusätzlich enthält diese Edition Features, die nur auf dem Tablet PC zur Verfügung stehen, beispielsweise die Komponenten der Collection Digital Ink, sowie einige speziell für den Tablet PC entwickelte Anwendungen wie das Windows Journal.

Mit Erscheinen von Windows Vista wurde die Tablet PC-Funktionalität in das reguläre Betriebssystem mit aufgenommen. Aus diesem Grund sagen einige, dass jede Version von Windows Vista ein Tablet PC-Betriebssystem ist. Das ist im Grunde wahr, obwohl es technisch betrachtet nach wie vor eine spezielle Version von Windows Vista für den Tablet PC gibt, die Komponenten wie den TIP (Tablet PC Input Panel = Eingabebereich für den Tablet PC) umfasst, welche auf einem anderen Rechner als dem Tablet PC schlicht und einfach keinen Sinn machen. Diese Komponenten fallen generell in den Bereich des Zubehörs. Die grundlegenden Funktionalitäten des Tablet OCs, beispielsweite die digitale Tinte, stehen aber in allen Versionen von Windows Vista zur Verfügung.

Das wichtigste Feature der Tablet PCs ist die Unterstützung der digitalen Tinte. Die Anwender können mit einem speziellen Stylus (dem Stift) auf das Gerät schreiben. Die Bewegungen des Stylus werden durch einen elektromagnetischen Digitizer erkannt. Diese Informationen werden mit einer sehr hohen Auflösung und einer sehr hohen Samplingrate erkannt. Sie umfassen neben den X- und Y-Koordinaten des Stifts zu einem gegebenen Zeitpunkt Informationen wie den Druck sowie in Abhängigkeit von der aktuellen Hardware und der Wahl durch den Entwickler die Drehung des Stifts und anderes.

Die Daten des Stylus werden durch das Betriebssystem empfangen und können auf unterschiedliche Arten interpretiert werden. So können die Stiftinformationen immer als Mauseingaben angesehen werden. In vielen Szenarien wird eine Serie von Stift-Datenpaketen (einzelnen Messungen) als digitale Tinte interpretiert – in Form einer Linie oder Kurve auf der Basis verschiedener Punkte. Die Stiftbewegungen werden generell auf den Bildschirm gezeichnet, in der Regel in Echtzeit und schaffen damit die Illusion von Tinte, die aus dem Stift fließt oder des Schreibens auf den Monitor.

Diese digitale Tinte kann auf unterschiedliche Arten genutzt werden. Die Anwender können mit der Hand geschriebene Notizen so speichern, wie sie sie geschrieben haben. Obwohl diese Nachrichten lediglich aus einer Reihe von Linien bestehen, kann der Tablet PC Ink Recognizer diese Linien analysieren und sie in sinnvolle Daten umwandeln, beispielsweise in Text. Dadurch sind die Anwender in der Lage, innerhalb ihrer Notizen zu suchen oder sie in regulären Text umzuwandeln.

Digitale Tinte ist auch in Verbindung mit anderen Daten hilfreich, beispielsweise mit Textdokumenten oder Grafiken. Die Anwender können ihren Dokumenten mit Hilfe der Tinte Notizen hinzufügen. Alle neuen Produkte in Microsoft Office sind gute Beispiele für solche Szenarien.

Die digitale Tinte wird nicht immer als Handschrift interpretiert. Eventuell zeichnet der Anwender Linien, Rechtecke oder Dreiecke, um ein Diagramm zu erstellen. Oder wie sieht es mit der Erkennung handgeschriebener Musiknoten in einer entsprechenden Anwendung aus?

Ein vollständig anderer Blickwinkel auf die Stifteingabe ist, sie als Gesten zu interpretieren. Der Anwender könnte einen Kreis, eine kurze Linie oder eine andere Figur auf der rechten Seite zeichnen, die als eine bestimmte Aktion interpretiert wird. Oder eventuell streicht der Anwender einen Bereich des Bildschirms aus (mit einer Zickzacklinie über vorhandenem Inhalt vor und zurück), was als Löschoperation interpretiert wird.

Die Möglichkeiten sind nur durch Ihre Phantasie begrenzt. Letztendlich besteht das Ziel darin, nicht nur die Erfahrung des Anwenders beim Schreiben auf Papier zu reproduzieren, sondern in der Erweiterung seiner Erfahrungen, indem Funktionalitäten und Features hinzugefügt werden, über die der Anwender beim Schreiben auf Papier nicht verfügt.

Fangen wir an

Um mit der Entwicklung für den Tablet PC zu beginnen, benötigen Sie entweder eine auf COM (Visual FoxPro oder Visual Basic 6) oder auf .NET basierende Entwicklungsumgebung. In diesen Artikeln werden wir für die Beispiele in erster Linie Visual Studio (.NET) verwenden. Außerdem benötigen Sie das Tablet PC SDK, das Sie kostenfrei vom Tablet PC Developer Center ( http://msdn.microsoft.com/TabletPC) herunterladen können. Sie benötigen für die Entwicklung von Tablet PC-Anwendungen nicht zwingend einen Tablet PC, da Sie die Maus  verwenden können, um Stifteingaben zu emulieren. Wenn Sie aber eine größere Tablet PC-Anwendung entwickeln, ist es doch sehr empfehlenswert, einen eigenen Tablet PC zur Verfügung zu haben, da Sie vermutlich selbst die User Experience sowie die Qualität überprüfen wollen. Am Beginn können Sie aber alle Tablet PC-Komponenten auf Ihrem Desktop installieren.

Vermutlich werden Sie überrascht sein, zu erfahren, wie einfach es ist, mit dem Tablet PC SDK Anwendungen zu erstellen. Features wie die Handschrifterkennung, die die Grenzen dessen verschiebt, die der IT heute gesetzt sind, sind aus der Sicht des Entwicklers her sehr einfach zu implementieren.

Beachten Sie, dass auf einem Tablet PC-Betriebssystem alle Anwendungen digitale Tinte unterstützen, indem dafür Technologien wie der Eingabebereich verwendet werden, die die digitale Tinte auch für Anwendungen verfügbar machen, die die Tinte nicht nativ unterstützen (Abbildung 1).

Abbildung 1. Mit Hilfe des Tablet PC-Eingabebereichs können auch Anwendungen mit digitaler Tinte arbeiten, die dies nativ nicht unterstützen.

Optionen für die Collection Ink und das Rendering

Für das Einsammeln digitaler Tinte stehen verschiedene Optionen zur Verfügung. Zunächst einmal wird das Tablet PC SDK mit verschiedenen Steuerelementen wie dem Steuerelement InkEdit ausgeliefert, das Sie einfach auf ein Formular ziehen können. Es stellt eine Textbox bereit, die Sie sowohl für die Eingabe mit Standardtastaturen als auch für die Eingabe handgeschriebener Tinte verwenden können. Die Tinte kann wahlweise als Tinte gespeichert oder automatisch in regulären Text umgewandelt werden. InkEdit ist eine Erweiterung des Steuerelements RichTextBox.

Dementsprechend gibt es auch das Steuerelement InkPicture, das eine besondere Version des Steuerelements Picture darstellt. Wie Sie vermutlich erwarten, kann dieses Steuerelement eine Grafik anzeigen und ermöglicht dem Anwender, darüber zu schreiben oder zu zeichnen.

Diese Steuerelemente stellen eine schnelle Möglichkeit dar, Ihren Anwendungen den Umgang mit der digitalen Tinte zu ermöglichen. Allerdings ist die User Experience durch diese Steuerelemente (besonders von InkEdit) nicht wirklich gut. Wir sollten diese Steuerelemente wohl eher als Vorlage betrachten, nicht als Steuerelemente für Produktionsanwendungen. Für Anwendungen im wahren Leben wären intelligentere Lösungen sinnvoll, die uns aber auch auf unterschiedliche Arten zur Verfügung stehen.

Abbildung 2. Fügen Sie Ihren Verweisen die die Microsoft Tablet PC API hinzu (Microsoft.Ink). Sollten Sie die API neu installiert haben müssen Sie Visual Studio neu starten, damit die API in der Liste erscheint.

Die Standardlösung ist der Einsatz der Klassen InkCollector und InkOverlay. Diese Klassen können jedem regulären Steuerelement hinzugefügt werden, wodurch das Steuerelement auch mit digitaler Tinte umgehen kann. Um diese Klassen in Aktion zu sehen, erstellen Sie eine neue Anwendung bzw. ein neues Projekt in der .NET-Sprache Ihrer Wahl. Fügen Sie den Assembly-Referenzen Ihres Projekts das Assembly Microsoft Tablet PC API hinzu (Abbildung 2). Anschließend ziehen Sie ein Steuerelement Ihrer Wahl auf das Formular. In meinem Beispiel verwende ich das Steuerelement Panel mit weißem Hintergrund, um einen weißen Schreibbereich zu simulieren. Anschließend instanziieren Sie ein Objekt Inkcollector und fügen es dem Panel hinzu. Dafür sollten Sie auf dem Formular zunächst ein Feld erstellen, das die Instanz enthalten kann. In C# geschieht dies folgendermaßen:

public class Form1 : System.Windows.Forms.Form
{
    private Microsoft.Ink.InkCollector collector;

    // default form code continues here...

Die Version in Visual Basic ist ähnlich:

Public Class Form1
   Inherits System.Windows.Forms.Form

   Private collector As Microsoft.Ink.InkCollector

    ' default form code continues here...

Anschließend instanziieren Sie im Constructor des Formulars das Objekt InkCollector und fügen es dem Steuerelement hinzu, das die Tinte verarbeiten soll. Dies funktioniert mit jedem Steuerelement, beispielsweise einem Panel oder einer Textbox wie auch mit dem gesamten Formular. In meinem Beispiel füge ich den Collector dem Steuerelement Panel hinzu. Hier die Version in C#:

 public Form1()
{
    InitializeComponent();

    this.collector = new
        Microsoft.Ink.InkCollector(this.panel1);
    this.collector.Enabled = true;
}

 Auch hier ist die Version in Visual Basic .NET sehr ähnlich:

Public Sub New()
    MyBase.New()

    InitializeComponent()

    Me.collector = _
        New Microsoft.Ink.InkCollector(Me.Panel1)
    Me.collector.Enabled = True
End Sub

Das war’s. Ihre erste Windows-Anwendung, die Tinte verarbeiten kann, ist fertig. Das Ergebnis sehen Sie in Abbildung 3.

Abbildung 2. Dies ist eine einfache Anwendung mit einem Panel und einer Klasse InkCollector, die mit digitaler Tinte umgehen kann.

Viele Anwendungen, die mit digitaler Tinte arbeiten, verwenden dieses Vorgehen als Basis für alle Features der Tinte. Die Klasse InkCollector stellt umfangreiche Funktionalitäten bereit. Sie sammelt die Tinte, speichert sie im Objekt Ink und rendert die Tinte, um auf diese Weise sicherzustellen, dass sie immer korrekt neu gezeichnet wird, wenn dies erforderlich ist. Beachten Sie, dass das Rendern der Tinte in einer sehr hohen Qualität geschieht, indem die Renderingengine verschiedene Techniken verwendet, um die Linienränder glatt darzustellen.

Die Verwendung von Ink-Sammlungen erleichtert auch das Ändern der Attribute der Tinte, beispielsweise der Farbe. Der folgende C#-Code legt für zukünftige Eingabe über Tinte die Standardfarbe Rot fest:

collector.DefaultDrawingAttributes.Color =
    Color.Red;

Entfernen Sie das Semikolon am Ende der Zeile und schon haben Sie die Visual Basic .NET-Version für die gleiche Operation.

Die Tinteninformationen, die im InkCollector hinzugefügten Objekt Ink gesammelt wurden, bieten auch den Zugriff auf ein sehr mächtiges Feature: die Schrifterkennung. Das folgende C#-Codesnippet zeigt Ihnen, wie Sie Handschrift in regulären Text umwandeln:

MessageBox.Show(
    this.collector.Ink.Strokes.ToString());

Hier die Version in Visual Basic .NET:

 MsgBox(Me.collector.Ink.Strokes.ToString())

So einfach ist es wirklich! Wenn Sie es wünschen, können Sie vom Recognizer noch erheblich mehr Informationen beziehen, beispielsweise weitere Optionen, Vertrauensstufen und vieles mehr. Sie könnten auch die Bedeutung von Formen sowie von Leerräumen in der Tinte erkennen. Oder eventuell wollen Sie die Erkennung asynchron als Hintergrundprozess durchführen. Weitere Informationen über die Auswertung der Tinte entnehmen Sie bitte dem Artikel „Erkennung und Analyse digitaler Tinte“.

Im Objekt Ink sind alle Informationen über die digitale Tinte gespeichert. Die Tinte ist in einzelne Linien aufgeteilt, die sich ihrerseits aus einzelnen Punkten zusammensetzen. Mit Hilfe dieses Objekts können Entwickler die digitale Tinte im Speicher manipulieren. So kann die Tinte beispielsweise auf einfache Weise in einer Datei gespeichert werden:

byte[] inkBytes = this.collector.Ink.Save();
FileStream strm = 
    File.Open(@"c:\test.isf", FileMode.Create);
strm.Write(inkBytes,0,inkBytes.Length);
strm.Close();

Hier die gleiche Aufgabe in Visual Basic:

Dim inkBytes As Byte() = Me.collector.Ink.Save()
Dim strm As FileStream = _
    File.Open("c:\test.isf", FileMode.Create)
strm.Write(inkBytes, 0, inkBytes.Length)
strm.Close()

Die Schlüsselzeile in diesem Snippet ist der Aufruf der Methode Ink.Save(). Save() wandelt die digitale Tinte automatisch in ein serielles Format um und gibt sie als Byte-Array zurück. Dieses Array können Sie an beliebiger Stelle speichern, beispielsweise wie in diesem Beispiel in einer Datei oder in einer Datenbank.

Das Laden digitaler Tinte geschieht auf ähnliche Weise, allerdings mit einem kleinen Stolperstein: Ink-Objekte verfügen über die Methode Load(). Diese Methode arbeitet nur dann verlässlich, wenn sie die Tinte in ein leeres Ink-Objekt lädt. Daher ist es erforderlich, dass Sie ein neues Ink-Objekt erstellen und dessen Methode Load() aufrufen, nicht die gleiche Methode eines vorhandenen Objekts. Hier ein funktionierendes Beispiel in C#:

FileStream strm = File.OpenRead(@"C:\test.isf");
FileInfo info = new FileInfo(@"C:\test.isf");
byte[] inkBytes = new byte[info.Length];
strm.Read(inkBytes,0,(int)info.Length);
strm.Close();

Ink newInk = new Ink();
newInk.Load(inkBytes);
this.collector.Enabled = false;
this.collector.Ink = newInk;
this.collector.Enabled = true;

Und hier die Version in Visual Basic .NET:

Dim strm As FileStream = _
    File.OpenRead("C:\test.isf")
Dim info As FileInfo = New FileInfo("C:\test.isf")
Dim inkBytes(info.Length) As Byte
strm.Read(inkBytes, 0, info.Length)
strm.Close()

Dim newInk As New Microsoft.Ink.Ink
newInk.Load(inkBytes)
Me.collector.Enabled = False
Me. collector.Ink = newInk
Me.collector.Enabled = True

Beachten Sie, dass Sie den Collector ausschalten, bevor ein neues Ink-Objekt angelegt wird, da andernfalls ein Fehler generiert wird.

Nähere Informationen zum Speichern der Tinte entnehmen Sie bitte dem Artikel „Digitale Tinte und die Datenbank“.

Mehr Power mit der Klasse InkOverlay

Neben der vollständigen Funktionalität von InkCollector enthält sie zusätzliche Methoden, beispielsweise für die Auswahl und Manipulation von Tinte. Sie können einfach in unserem oben stehenden Beispiel die Referenzen auf InkCollector gegen Referenzen auf InkOverlay austauschen und alles funktioniert wie vorher. Ihnen stehen aber zusätzlich neue Features zur Verfügung, beispielsweise die Möglichkeit, das Overlay in den Auswahlmodus umzuschalten:

this.overlay.EditingMode = 
    Microsoft.Ink.InkOverlayEditingMode.Select;

Die Version in Visual Basic .NET ist praktisch identisch:

Me.overlay.EditingMode = _
    Microsoft.Ink.InkOverlayEditingMode.Select

Abbildung 4 zeigt Ihnen ein Beispiel für den Auswahlmodus von InkOverlay (den Auswahlmodus) in Aktion.

Abbildung 4. Die Klasse InkOverlay unterstützt im Gegensatz zur Klasse InkCollector den Auswahlmodus.

Sowohl InkCollector als auch InkOverlay lösen aufgrund der Eingabe digitaler Tinte Ereignisse aus. Als Beispiel können Sie das Ereignis CursorInRange verwenden, um festzustellen, wann der Stift bis auf einen Zentimeter an die Bildschirmoberfläche herangeführt wurde (elektromagnetische Digitizer können einen Stift erkennen, während er sich noch in der Luft befindet). Dieses Ereignis können Sie einsetzen, um festzustellen, ob die Stiftspitze oder das stumpfe Stiftende an den Bildschirm geführt wird und um aufgrund dessen die Overlayklasse in den Editier- oder Löschmodus zu schalten. Um dieses Ereignis in C# zu verwenden, müssen Sie einen Eventhandler einsetzen:

this.overlay.CursorInRange += 
    new  InkCollectorCursorInRangeEventHandler(
    overlay_CursorInRange);

Im Anschluss müssen Sie den Code schreiben, der dieses Ereignis behandelt:

private void overlay_CursorInRange(object sender,
    InkCollectorCursorInRangeEventArgs e)
{
    if (e.Cursor.Inverted)
    {
        this.overlay.EditingMode = 
            InkOverlayEditingMode.Delete;
    }
    else
    {
        this.overlay.EditingMode = 
            InkOverlayEditingMode.Ink;
    }
}

In Visual Basic müssen Sie darauf achten, dass das Overlay mit WithEvents definiert ist:

Private WithEvents overlay _
    As Microsoft.Ink.InkOverlay

Anschließend können Sie das Ereignis auf folgende Weise behandeln:

Private Sub overlay_CursorInRange( _
    ByVal sender As Object, ByVal e _
    As InkCollectorCursorInRangeEventArgs) _
    Handles overlay.CursorInRange

    If e.Cursor.Inverted Then
        Me.overlay.EditingMode = _ 
            InkOverlayEditingMode.Delete
    Else
        Me.overlay.EditingMode = _
            InkOverlayEditingMode.Ink
    End If
End Sub

Damit wird das Löschen mit dem Stiftende implementiert. Selbstverständlich können Sie das gleiche Ereignis auch für andere Zwecke verwenden. Sehen Sie sich auch einige der anderen verfügbaren Ereignisse an.

Alternativen für die Arbeit mit der digitalen Tinte

Die Objekte InkCollector und InkOverlay sammeln die Eingabeinformationen des Stifts und interpretieren diese als digitale Tinte oder als Gesten. In manchen Fällen wollen Sie digitale Tinte nicht einfach sammeln, sondern Sie wollen die Stiftdaten auf andere Weise interpretieren. Oder es ist eventuell erforderlich, die Stiftdaten zu manipulieren, bevor sie als digitale Tinte interpretiert werden. Eventuell hat die Performance allerhöchste Priorität oder Sie wollen eine nicht übliche Methodik implementieren, um die digitale Tinte in Echtzeit zu rendern. In solchen Fällen verwenden Sie die unter dem Namen „Real Time Stylus API“ bekannte API. Im Artikel „Verbessern Sie die Kontrolle und Performance mit der Real Time Stylus API“ erhalten Sie tiefgehende Informationen zu diesem Thema.

In Windows Vista ist die Unterstützung der digitalen Tinte Teil des Betriebssystems, anders als unter Windows XP, wo die digitale Tinte in einer Erweiterung des Betriebssystems verarbeitet wurde. Die neue Technologie WPF (Windows Presentation Foundation) für die Erstellung und Anzeige von Benutzeroberflächen unterstützt digitale Tinte nativ in allen Versionen von Windows. Das zentrale Objekt ist hier InkCanvas, das wir in einem anderen Artikel untersuchen werden.

Zusammenfassung

Die Entwicklung für den Tablet PC ist erheblich einfacher als es die meisten Entwickler vermuten, die sich mit dieser Umgebung noch nicht vertraut gemacht haben. Sie enthält viele Vorteile und Bereiche, die uns viele neue Funktionalitäten bereitstellen. Nutzen wir sie.

Dieser Artikel ist eine Übersetzung aus dem CoDe Magazine ( http://www.code-magazine.com). Auf dieser Website dürften für Sie besonders die Seite  http://www.code-magazine.com/focus/tabletpc/ sowie die auf dieser Seite verlinkten Artikel interessant sein.

Laden Sie die Begleitdateien hier herunter: IntroToTabletPC

Über den Autor:

Markus ist ein internationaler Sprecher und hat Sessions auf zahlreichen Konferenzen in Nord- und Südamerika sowie in Europa gehalten. Zusätzlich hat er viele Artikel für verschiedene Publikationen geschrieben, darunter CoDe Magazine, Visual Studio Magazine, MSDN Brasilien, ASP.NET Pro, FoxPro Advisor, Fuchs, FoxTalk sowie das Microsoft Office & Database Journal verfasst. Er ist Herausgeber des CoDe Magazine.

Außerdem ist er President und Chief Software Architect bei EPS Software Corp. in Houston, Texas, ein Unternehmen, das individuelle Programmierung und Beratung anbietet. Er ist auf die Beratung für objektorientierte Entwicklung, die Internetentwicklung, B2B und Webdienste spezialisiert. EPS erledigt einen Großteil seiner Entwicklung mit Microsoft Visual Studio .NET und hat an Softwareprojekten für die 500 größten Unternehmen mitgearbeitet, unter anderem für Philip Morris, Qualcomm, Shell und Microsoft. Zusätzlich hat Markus als externer Mitarbeiter im Microsoft Visual Studio-Team mitgearbeitet, wo er hauptsächlich für die Objektmodellierung und andere Technologien im Zusammenhang mit Objekten und Komponenten verantwortlich war.

Seit 1996 ist Markus für seine Mitarbeit in der Entwicklercommunity Microsoft MVP (Most Valuable Professional). LandPro, eine der Anwendungen, für die Markus verantwortlich war, wurde dreimal für den Microsoft Excellence Award nominiert. Sie erreichen ihn unter megger(at)eps-software.com.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.