Tablet PC Edition Entwickeln für den Tablet PC Das Microsoft Tablet PC Platform SDK Frank Prengel,...

Post on 05-Apr-2015

115 views 3 download

Transcript of Tablet PC Edition Entwickeln für den Tablet PC Das Microsoft Tablet PC Platform SDK Frank Prengel,...

Tablet PC Edition

Entwickeln für den Tablet Entwickeln für den Tablet PCPCDas Microsoft Tablet PC Platform SDKDas Microsoft Tablet PC Platform SDK

Frank PrengelFrank Prengel, <, <frankpr@microsoft.comfrankpr@microsoft.com>>TechnologieberaterTechnologieberater.NET Strategy & Developer Group.NET Strategy & Developer GroupMicrosoft Deutschland GmbHMicrosoft Deutschland GmbH

Tablet PC Edition

AgendaAgenda

• Tablet PC: Hardware & SoftwareTablet PC: Hardware & Software

• Tablet-FunktionalitätTablet-Funktionalität• StifteingabeStifteingabe• Digitale TinteDigitale Tinte• SchrifterkennungSchrifterkennung

• Entwickeln für den Tablet PCEntwickeln für den Tablet PC• Das SDK im ÜberblickDas SDK im Überblick• Managed LibrariesManaged Libraries• Design-RichtlinienDesign-Richtlinien

• ZusammenfassungZusammenfassung

Tablet PC Edition

... und ganz wichtig:... und ganz wichtig:

• Input erbeten!Input erbeten!• Ihre IdeenIhre Ideen• Ihre MeinungenIhre Meinungen• Ihre VorstellungenIhre Vorstellungen• Ihre WünscheIhre Wünsche• Ihre KritikIhre Kritik

Tablet PC Edition

Back to the FutureBack to the Future

• Der Tablet PC hat viele Vorgänger ...Der Tablet PC hat viele Vorgänger ...

Tablet PC Edition

Was Was haben wir gelernt? wir gelernt?

You can´t railroad before it´s railroading

time.

Robert Heinlein

Tablet PC Edition

2002 – der Tablet PC2002 – der Tablet PC

• Die gewohnte PC-Infrastruktur: Windows XPDie gewohnte PC-Infrastruktur: Windows XP

• Die Mobilität eines Sub-NotebooksDie Mobilität eines Sub-Notebooks

• Die Flexibilität von Stift + PapierDie Flexibilität von Stift + Papier

Tablet PC Edition

AgendaAgenda

• Tablet PC: Hardware & SoftwareTablet PC: Hardware & Software

• Tablet-FunktionalitätTablet-Funktionalität• StifteingabeStifteingabe• Digitale TinteDigitale Tinte• SchrifterkennungSchrifterkennung

• Entwickeln für den Tablet PCEntwickeln für den Tablet PC• Das SDK im ÜberblickDas SDK im Überblick• Managed LibrariesManaged Libraries• Design-RichtlinienDesign-Richtlinien

• ZusammenfassungZusammenfassung

Tablet PC Edition

Hardware (1/2)Hardware (1/2)

• Elektromagnetischer DigitizerElektromagnetischer Digitizer

•unterunter dem LCD dem LCD•kabelloser Stiftkabelloser Stift•erkennt "hovering"erkennt "hovering"•kann Neigung & kann Neigung & Rotation erkennenRotation erkennen•Abtastrate > 100 HzAbtastrate > 100 Hz•Auflösung > 600 dpiAuflösung > 600 dpi

Tablet PC Edition

Hardware (2/2)Hardware (2/2)

• Tablet-ButtonsTablet-Buttons• Ersatz für CTRL+ALT+DELErsatz für CTRL+ALT+DEL• UP, DOWN, ENTER, ESCAPEUP, DOWN, ENTER, ESCAPE

• "Grab and go""Grab and go"• zuverlässiges Hotpluggingzuverlässiges Hotplugging

• Landscape- und Portrait-Darstellung ohne Landscape- und Portrait-Darstellung ohne RebootReboot

• "Aufwachen" aus dem Stand-By-Modus < "Aufwachen" aus dem Stand-By-Modus < 3 Sek.3 Sek.

• Legacy-freeLegacy-free• kein PS/2, RS232, LPT, ...kein PS/2, RS232, LPT, ...• USB, Firewire; evtl. (W)LAN, Bluetooth, ...USB, Firewire; evtl. (W)LAN, Bluetooth, ...

Tablet PC Edition

Software (1/2)Software (1/2)

• Betriebssystem:Betriebssystem:• Microsoft Windows XP ProfessionalMicrosoft Windows XP Professional• Windows XP Service Pack 1Windows XP Service Pack 1• .NET Framework 1.0 SP2.NET Framework 1.0 SP2• Tablet PC ComponentsTablet PC Components

Windows XP Professional Service

Pack 1

Tablet PCCompo-nents

Tablet PC Edition

Software (2/2)Software (2/2)

• Tablet-spezifische Software:Tablet-spezifische Software:• StifteingabeStifteingabe• Ink-SteuerelementeInk-Steuerelemente• Gesten-, Schrift- und Gesten-, Schrift- und

SpracherkennungSpracherkennung• Input PanelInput Panel• Windows JournalWindows Journal• Sticky NotesSticky Notes• Ink BallInk Ball

• außerdem verfügbar:außerdem verfügbar:• Microsoft Office XP Pack for Tablet PC Microsoft Office XP Pack for Tablet PC

Snippet Tool

Tablet PC Edition

AgendaAgenda

• Tablet PC: Hardware & SoftwareTablet PC: Hardware & Software

• Tablet-FunktionalitätTablet-Funktionalität• StifteingabeStifteingabe• Digitale TinteDigitale Tinte• SchrifterkennungSchrifterkennung

• Entwickeln für den Tablet PCEntwickeln für den Tablet PC• Das SDK im ÜberblickDas SDK im Überblick• Managed LibrariesManaged Libraries• Design-RichtlinienDesign-Richtlinien

• ZusammenfassungZusammenfassung

Tablet PC Edition

ArchitekturArchitektur

• ... im Überblick:... im Überblick:

Gestures Ink Recognition

Kernel Mode

User Mode

API / Run-Time Interfaces

Recognizers Microsoft (US, JPN, etc.)

Gestures, Shapes OthersMouse

DriverHID

HID MiniDriver

CustomDriver

• Interaktion mit Hardware nur über Interaktion mit Hardware nur über Gesture-KomponentenGesture-Komponenten

Tablet PC Edition

Tablet Input SubsystemTablet Input Subsystem

• Anwendungen erhalten Pen-Input-Daten Anwendungen erhalten Pen-Input-Daten durch Shared Memory Queue (durch Shared Memory Queue (nichtnicht durch durch Windows Messages)Windows Messages)

HID InputDevice

HID InputDevice

* WISP = Windows Ink Services for Pen

Tablet PC Edition

GestenGesten

• System GesturesSystem Gestures• Hover, Tap, Double-Tap, Tap-and-Hold, etc.Hover, Tap, Double-Tap, Tap-and-Hold, etc.• emulieren Mausaktionenemulieren Mausaktionen

• Application GesturesApplication Gestures• Backspace, Enter, Backspace, Enter,

Scratch-out, etc.Scratch-out, etc.• Shortcuts fürShortcuts für

bestimmte Aktionenbestimmte Aktionen

Tablet PC Edition

InkInk

• "digitale Tinte" – so natürlich wie möglich"digitale Tinte" – so natürlich wie möglich• Echtzeitrendern, Bezièrkurven, Anti-AliasingEchtzeitrendern, Bezièrkurven, Anti-Aliasing• Drucksensitivität, Stiftformen, subtraktives Drucksensitivität, Stiftformen, subtraktives

FarbmischenFarbmischen

• für handschriftliche Eingabefür handschriftliche Eingabe

• für visuelles Feedback & Anmerkungenfür visuelles Feedback & Anmerkungen

Ein erster Test.

Tablet PC Edition

SchrifterkennungSchrifterkennung

• sekundär & nicht vollkommen!sekundär & nicht vollkommen!

Texteingabe

Tablet PC Edition

AgendaAgenda

• Tablet PC: Hardware & SoftwareTablet PC: Hardware & Software

• Tablet-FunktionalitätTablet-Funktionalität• StifteingabeStifteingabe• Digitale TinteDigitale Tinte• SchrifterkennungSchrifterkennung

• Entwickeln für den Tablet PCEntwickeln für den Tablet PC• Das SDK im ÜberblickDas SDK im Überblick• Managed LibrariesManaged Libraries• Design-RichtlinienDesign-Richtlinien

• ZusammenfassungZusammenfassung

Tablet PC Edition

Entwickeln für den Tablet Entwickeln für den Tablet PCPC• "Think in Ink""Think in Ink"

• Ink als eigenständiger DatentypInk als eigenständiger Datentyp• kann als solcher gespeichert & verarbeitet werdenkann als solcher gespeichert & verarbeitet werden

• Schrifterkennung ist kein vollwertiger Schrifterkennung ist kein vollwertiger Tastatur-ErsatzTastatur-Ersatz

• besondere Anforderungen an das User besondere Anforderungen an das User InterfaceInterface• vereinfachte & natürliche Dateneingabevereinfachte & natürliche Dateneingabe• Größe der ControlsGröße der Controls

• Entdecke die Möglichkeiten!Entdecke die Möglichkeiten!

Tablet PC Edition

Das Tablet PC Platform Das Tablet PC Platform SDKSDK• aktuelle Version: aktuelle Version: 1.51.5

• unterstützte Plattformen:unterstützte Plattformen:• Windows 2000 Professional SP2 *Windows 2000 Professional SP2 *• Windows XP Professional *Windows XP Professional *• Windows XP Tablet PC EditionWindows XP Tablet PC Edition

• unterstützte Tools:unterstützte Tools:• Visual Studio 6.0 SP5Visual Studio 6.0 SP5• Visual Studio .NETVisual Studio .NET• Visual Studio .NET 2003Visual Studio .NET 2003

(* Keine Schrifterkennung. Ohne SDK keine Ink Collection.)(* Keine Schrifterkennung. Ohne SDK keine Ink Collection.)

Tablet PC Edition

Das Tablet PC Platform Das Tablet PC Platform SDKSDK• Managed (= .NET) APIs Managed (= .NET) APIs

• für Stift & Inkfür Stift & Ink

• COM Automation APIs (C/C++, VB6) COM Automation APIs (C/C++, VB6) • für Stift & Inkfür Stift & Ink

• Ink ControlsInk Controls• InkEdit, InkPictureInkEdit, InkPicture

• DokumentationDokumentation

• BeispielanwendungenBeispielanwendungen

• LaufzeitbibliothekenLaufzeitbibliotheken• für die Verwendung des SDK auf Nicht-Tablet-für die Verwendung des SDK auf Nicht-Tablet-

PCsPCs

Tablet PC Edition

Tablet PC PlatformTablet PC Platform

CO

M A

PI

Core services

C#

VB.NET

C++

VB

PenInputPanel objectInkDivider object

InkEdit controlInkPicture control

Ink services

Pen services

Recognition services

Man

aged

AP

I

Microsoft handwriting recognizers

Gesture recognizersShape recognizers

Custom recognizers

- US/Int. English- Japanese- Chinese T/S

- Korean- German- French

Tablet PC Edition

Das SDK im ÜberblickDas SDK im Überblick

Tablet PC Edition

Managed APIsManaged APIs

• Tablet Input API (Pen API)Tablet Input API (Pen API)• Ink & Gestures sammelnInk & Gestures sammeln• Pen Buttons abfragenPen Buttons abfragen

• Ink Data Management API (Ink API)Ink Data Management API (Ink API)• Ink speichern & bearbeitenInk speichern & bearbeiten

• Ink Recognition API (Recognition API)Ink Recognition API (Recognition API)• InkInk

inter-inter-pre-pre-tierentieren

Tablet PC Edition

ObjektmodellObjektmodellInkCollector InkOverlay

Ink

Strokes

Renderer

Tablet

Stroke

Recognizers

Recognizer

DrawingAttributes

RecognizerContext

Pen API

Ink API

Reco API

Tablet PC Edition

Pen APIPen API

Tablet PC Edition

Pen API - ÜberblickPen API - Überblick

• Tablet & TabletsTablet & Tablets• Info über verfügbare Digitizer & Input DevicesInfo über verfügbare Digitizer & Input Devices

• Cursor & CursorsCursor & Cursors• Info über verfügbare (abstrakte) StiftspitzenInfo über verfügbare (abstrakte) Stiftspitzen

• InkCollector & InkOverlayInkCollector & InkOverlay• Ink aufnehmen & anzeigenInk aufnehmen & anzeigen• Events zu Gesten, Buttons & TipsEvents zu Gesten, Buttons & Tips• InkOverlay: Auswahl & Löschen zusätzlichInkOverlay: Auswahl & Löschen zusätzlich

Tablet PC Edition

TabletsTablets

• Information über vorhandene DigitizerInformation über vorhandene Digitizer• Tip PressureTip Pressure• Winkel zwischen Tablet & StiftWinkel zwischen Tablet & Stift• StiftrotationStiftrotation• AuflösungAuflösung• Hovering & Abstand Stift-TabletHovering & Abstand Stift-Tablet• Cursor-IDCursor-ID• Tablet PnP-IDTablet PnP-ID

Tablet PC Edition

Die Klasse Die Klasse TabletTablet

• wichtige Eigenschaften:wichtige Eigenschaften:• HardwareCapabilitiesHardwareCapabilities

• CursorMustTouch, CursorsHavePhysicalIds, CursorMustTouch, CursorsHavePhysicalIds, HardProximity, IntegratedHardProximity, Integrated

• MaximumInputRectangleMaximumInputRectangle• NameName• PlugAndPlayIdPlugAndPlayId

• wichtige Methoden:wichtige Methoden:• IsPacketPropertySupported(System.Guid)IsPacketPropertySupported(System.Guid)• GetPropertyMetrics(System.Guid)GetPropertyMetrics(System.Guid)

DeviceWalker

Tablet PC Edition

InkCollectorInkCollector

• Echtzeit-Ink-Input für AnwendungenEchtzeit-Ink-Input für Anwendungen

• "Ink Canvas": Region für Input"Ink Canvas": Region für Input• einfach einschalten:einfach einschalten:

InkCollector ic = new InkCollector(Handle);InkCollector ic = new InkCollector(Handle);ic.Enabled = true;ic.Enabled = true;

• diverse Eventsdiverse Events• StrokeStroke, , GestureGesture• Pen Movement: Pen Movement: CursorInRangeCursorInRange, ,

CursorButtonDown,CursorButtonDown, NewPacketsNewPackets etc. etc.• Mouse Trigger Events: Mouse Trigger Events: DoubleClickDoubleClick etc. etc.• Tablet Hardware Events: Tablet Hardware Events: TabletAddedTabletAdded, ,

TabletRemovedTabletRemovedInkCollector InputWatcher

Tablet PC Edition

InkOverlayInkOverlay

• enthält InkCollectorenthält InkCollector

• ermöglicht zusätzlich Bearbeiten & ermöglicht zusätzlich Bearbeiten & Löschen:Löschen:InkOverlayEditingModeInkOverlayEditingMode• InkInk• Select: Lasso-Modus für Auswahl, Resizing etc.Select: Lasso-Modus für Auswahl, Resizing etc.• Delete: Löschmodus Delete: Löschmodus EraserModeEraserMode

• StrokeEraseStrokeErase• PointErase ( -> EraserWidth (in 1/100 mm) )PointErase ( -> EraserWidth (in 1/100 mm) )

• zusätzliche Events:zusätzliche Events:• Rendering: Rendering: Painting, PaintedPainting, Painted• Editing: Editing: SelectionChanging, StrokesDeletedSelectionChanging, StrokesDeleted

etc.etc.HelloInkOverlay

Tablet PC Edition

PacketsPackets

• Datenblöcke mit Ink-InformationDatenblöcke mit Ink-Information

• können enthalten (können enthalten (PacketPropertyPacketProperty):):• XX, , YY, , PacketStatusPacketStatus , NormalPressure, , NormalPressure,

RollRotation etc.RollRotation etc.• HW- & treiberabhängig!HW- & treiberabhängig!

• Anwendung kann angeben, welche Daten Anwendung kann angeben, welche Daten sie verwenden möchte:sie verwenden möchte:

ic.DesiredPacketDescription = new Guid[] {ic.DesiredPacketDescription = new Guid[] {PacketProperty.X, PacketProperty.Y };PacketProperty.X, PacketProperty.Y };

Tablet PC Edition

Packets anschaulichPackets anschaulich

PacketPropWatcher

Tablet PC Edition

Ink APIInk API

Tablet PC Edition

Ink APIInk API

• Ink, Stroke & StrokesInk, Stroke & Strokes• Ink-Datenstruktur & einzelne LinienzügeInk-Datenstruktur & einzelne Linienzüge• Laden & Speichern aus Streams & Clipboard Laden & Speichern aus Streams & Clipboard

möglichmöglich

• DrawingAttributesDrawingAttributes• optisches Erscheinungsbild der Linienzüge, optisches Erscheinungsbild der Linienzüge,

wie z.B. Farbe, Transparenz, Linienstärke, wie z.B. Farbe, Transparenz, Linienstärke, AntialiasingAntialiasing

Tablet PC Edition

InkInk

• verwaltet, manipuliert & speichert Input verwaltet, manipuliert & speichert Input von InkCollector & InkOverlayvon InkCollector & InkOverlay

• enthält Strokes und enthält Strokes und StrokesStrokes-Collection-Collection

• unterstützt "hit detection"unterstützt "hit detection"

• Koordinatensystem: HIMETRIC Koordinatensystem: HIMETRIC (Einheit: 0.01mm)(Einheit: 0.01mm)

• Events: Events: InkAdded, InkDeletedInkAdded, InkDeleted

Tablet PC Edition

StrokeStroke

• StrokeStroke: Datensatz, aufgenommen : Datensatz, aufgenommen während einer Sequenzwährend einer Sequenz Pen Down Pen Down Pen Move Pen Move Pen Up Pen Up

• Sammlung von PacketsSammlung von Packets

• besitzt eindeutige ID (int) im Ink-Objektbesitzt eindeutige ID (int) im Ink-Objekt• AchtungAchtung: Jede Stiftaktion erzeugt einen : Jede Stiftaktion erzeugt einen

Stroke! Stroke! Nicht jeder Stroke ist sichtbar! Nicht jeder Stroke ist sichtbar!

• besitzt Eigenschaft besitzt Eigenschaft Deleted Deleted ((!!))

• Manipulation über das Ink-Objekt:Manipulation über das Ink-Objekt:AddStrokesAtRectangle, AddStrokesAtRectangle, CreateStroke(Point[] pts), DeleteStroke, CreateStroke(Point[] pts), DeleteStroke, DeleteStrokes, ExtractStrokes DeleteStrokes, ExtractStrokes etc.etc.StrokeIdViewer

Tablet PC Edition

StrokesStrokes

• StrokesStrokes –Collection gehört zu Ink-Objekt –Collection gehört zu Ink-Objekt• read-only; enthält Verweise auf Stroke-read-only; enthält Verweise auf Stroke-

Objekte; Objekte; kein Ownership kein Ownership

• Bsp.: InkOverlay.SelectionBsp.: InkOverlay.Selection

• erzeugen:erzeugen:

Strokes CreateStrokes();Strokes CreateStrokes();Strokes CreateStrokes(int[] ids);Strokes CreateStrokes(int[] ids);

• Methoden: Methoden: Add, Clear, Remove, ContainsAdd, Clear, Remove, Contains etc.etc.

• Events: Events: StrokesAddedStrokesAdded, , StrokesDeletedStrokesDeleted

Tablet PC Edition

Ink rendern (1)Ink rendern (1)

• Klasse Klasse RendererRenderer kann Ink-Daten in kann Ink-Daten in grafischen Output "übersetzen"grafischen Output "übersetzen"• unterstützt Zoom, Größenänderungen, unterstützt Zoom, Größenänderungen,

Scrollen, RotationScrollen, Rotation

Tablet PC Edition

Ink rendern (2)Ink rendern (2)

• InkCollector & InkOverlay haben InkCollector & InkOverlay haben RendererRenderer--EigenschaftEigenschaft

• DrawDraw-Methode kann auf -Methode kann auf GraphicsGraphics-Objekt -Objekt oder Device Context zeichnen:oder Device Context zeichnen:void Draw(Graphics g, Stroke s) void Draw(Graphics g, Stroke s) void Draw(Graphics g, Stroke s, DrawingAttributes da) void Draw(Graphics g, Stroke s, DrawingAttributes da) void Draw(Graphics g, Strokes strokes) void Draw(Graphics g, Strokes strokes) void Draw(IntPtr hdc, Stroke s) void Draw(IntPtr hdc, Stroke s) void Draw(IntPtr hdc, Stroke s, DrawingAttributes da) void Draw(IntPtr hdc, Stroke s, DrawingAttributes da) void Draw(IntPtr hdc, Strokes strokes) void Draw(IntPtr hdc, Strokes strokes)

• Umwandlung HIMETRIC Umwandlung HIMETRIC Pixel: Pixel: InkSpaceToPixel, PixelToInkSpaceInkSpaceToPixel, PixelToInkSpace

Tablet PC Edition

TransformationenTransformationen

• Verschieben: Verschieben: Move(float dx, dy)Move(float dx, dy)

• Drehen: Drehen: Rotate(float deg [, Point pt])Rotate(float deg [, Point pt])

• Skalieren: Skalieren: Scale(float fx, fy [, bool Scale(float fx, fy [, bool scaleWidth])scaleWidth])

• Transformieren:Transformieren:GetObjectTransform(ref Matrix m)GetObjectTransform(ref Matrix m)GetViewTransform(ref Matrix m)GetViewTransform(ref Matrix m)SetObjectTransform(Matrix m)SetObjectTransform(Matrix m)SetViewTransform(Matrix m)SetViewTransform(Matrix m)

Art der Art der TransformationTransformation

Linienstärke skaliert?Linienstärke skaliert?

objectobject neinneinviewview jaja

InkMagnify

Tablet PC Edition

DrawingAttributesDrawingAttributes

• Formatierungsinfos für die Darstellung Formatierungsinfos für die Darstellung von Ink:von Ink:• bool bool AntiAliasedAntiAliased• Color Color ColorColor• bool bool FitToCurveFitToCurve: Gerade oder Bézier?: Gerade oder Bézier?• float float HeightHeight: für rechteckige Stiftspitze: für rechteckige Stiftspitze• bool bool IgnorePressureIgnorePressure• PenTip PenTip PenTipPenTip: Ball, Rectangle: Ball, Rectangle• RasterOperation RasterOperation RasterOperationRasterOperation: CopyPen : CopyPen

(normaler Stift), MaskPen (Text Marker) etc.(normaler Stift), MaskPen (Text Marker) etc.• byte byte TransparencyTransparency: 0=undurchsichtig, : 0=undurchsichtig,

255=unsichtbar255=unsichtbar• float float WidthWidth: in HIMETRIC-Einheiten: in HIMETRIC-Einheiten

InkFormatter

Tablet PC Edition

Strokes für Strokes für FortgeschritteneFortgeschrittene• Punkte eines Linienzugs bearbeiten:Punkte eines Linienzugs bearbeiten:

Point[] Stroke.Point[] Stroke.GetPointsGetPoints(...)(...)int Stroke.int Stroke.SetPointsSetPoints(...)(...)Point[] Point[] Stroke.Stroke.GetFlattenedBezierPointsGetFlattenedBezierPoints(...)(...)......

• Schnittpunkte:Schnittpunkte:float[] float[] SelfIntersectionsSelfIntersectionsfloat[] float[] FindIntersectionsFindIntersections(Strokes sks)(Strokes sks)StrokeIntersection[] StrokeIntersection[] GetRectangleIntersectionsGetRectangleIntersections

• Packets:Packets:int[] int[] GetPacketDataGetPacketData(...)(...)int[] int[] GetPacketValuesByPropertyGetPacketValuesByProperty(Guid (Guid id, ...)id, ...)......

InkHoles

Tablet PC Edition

SchnittpunkteSchnittpunkte

Tablet PC Edition

Hit TestingHit Testing

• ... durch Punkte:... durch Punkte:Strokes Ink.HitTest(Point p, float radius)Strokes Ink.HitTest(Point p, float radius)

• ... durch Rechtecke:... durch Rechtecke:Strokes Ink.HitTest(Rectangle r, float percent)Strokes Ink.HitTest(Rectangle r, float percent)

• ... durch "Lasso":... durch "Lasso":Strokes Ink.HitTest(Point[] pts, float percent)Strokes Ink.HitTest(Point[] pts, float percent)Strokes Ink.HitTest(Point[] pts, float percent, Strokes Ink.HitTest(Point[] pts, float percent, out Point[] arrLassoPts)out Point[] arrLassoPts)

• nächste Punkte:nächste Punkte:Stroke Ink.NearestPoint(Point p, ...)Stroke Ink.NearestPoint(Point p, ...)float Stroke.NearestPoint(Point p, ...)float Stroke.NearestPoint(Point p, ...)

Tablet PC Edition

Ink serialisierenInk serialisieren• speichern:speichern:

byte[] Ink.Save(PersistenceFormat f, byte[] Ink.Save(PersistenceFormat f, CompressionMode c)CompressionMode c)

• f: f: Base64Gif, Base64InkSerializedFormat, Gif, Base64Gif, Base64InkSerializedFormat, Gif, InkSerializedFormatInkSerializedFormat (ISF) (ISF)

• c: c: Default, Maximum, NoCompressionDefault, Maximum, NoCompression• nur für ISFnur für ISF

• laden:laden:void Ink.Load(byte[] inkData)void Ink.Load(byte[] inkData)

• Strokes-Collection speichern:Strokes-Collection speichern:Ink.CustomStrokes(String name, Strokes sks)Ink.CustomStrokes(String name, Strokes sks)

• Zusatzdaten speichern:Zusatzdaten speichern:ExtendedPropertiesExtendedProperties (für Ink, Stroke) (für Ink, Stroke)• Id, DataId, Data

Serialization

Tablet PC Edition

Ink ins ClipboardInk ins Clipboard

• kopieren:kopieren:IDataObject Ink.IDataObject Ink.ClipboardCopyClipboardCopy(...)(...)

• einfügen:einfügen:Strokes Ink.Strokes Ink.ClipboardPasteClipboardPaste(...)(...)

• testen:testen:bool Ink.bool Ink.CanPasteCanPaste(...)(...)

Tablet PC Edition

Recognition Recognition APIAPI

Tablet PC Edition

Recognition APIRecognition API

• RecognizerRecognizer• repräsentiert eine Recognition Enginerepräsentiert eine Recognition Engine• normalerweise sprachspezifischnormalerweise sprachspezifisch

• RecognizerContextRecognizerContext• Unterstützung für den Recognizer bzgl. des zu Unterstützung für den Recognizer bzgl. des zu

erkennenden Inhaltserkennenden Inhalts

• RecognitionResultRecognitionResult• erkannter Text & mögliche Alternativenerkannter Text & mögliche Alternativen

Tablet PC Edition

RecognizerRecognizer• synchrone oder asynchrone Umwandlung synchrone oder asynchrone Umwandlung

von Ink in Textvon Ink in Text• Input: Input: StrokesStrokes-Collection eines Ink-Objekts-Collection eines Ink-Objekts• Output: Output: RecognitionResultRecognitionResult mit möglichen mit möglichen

TextwertenTextwerten

• verschiedene Recognizer können verschiedene Recognizer können verschiedene Sprachen oder Zwecke verschiedene Sprachen oder Zwecke unterstützenunterstützen• nicht nur Text kann erkannt werden: Formen, nicht nur Text kann erkannt werden: Formen,

Noten, etc. möglichNoten, etc. möglich• Anwendungsgesten – Ink-basiertAnwendungsgesten – Ink-basiert

• z.Zt. 8 Sprachen unterstütztz.Zt. 8 Sprachen unterstützt• US English, International English, Japanisch, US English, International English, Japanisch,

Deutsch, Französisch, Simplified & Traditional Deutsch, Französisch, Simplified & Traditional Chinese, KoreanischChinese, Koreanisch

Tablet PC Edition

Synchron vs AsynchronSynchron vs Asynchron

• auch "Vordergrund" vs "Hintergrund"auch "Vordergrund" vs "Hintergrund"

• Erkennung im selben Thread wie die Erkennung im selben Thread wie die Anwendung?Anwendung?• asynchron: bei zeitkritischen Anwendungen asynchron: bei zeitkritischen Anwendungen

oder großen Mengen von Inkoder großen Mengen von Ink• schwieriger zu programmierenschwieriger zu programmieren

• Mittelweg: Teilerkennung ("partial Mittelweg: Teilerkennung ("partial recognition")recognition")• Recognizer startet, sobald Ink verfügbar ist, Recognizer startet, sobald Ink verfügbar ist,

korrigiert Ergebnis laufendkorrigiert Ergebnis laufend• meist in eigenem Threadmeist in eigenem Thread

Tablet PC Edition

ZuverlässigkeitZuverlässigkeit

• Texterkennung ist nicht einfach & selten Texterkennung ist nicht einfach & selten eindeutig!eindeutig!

• Recognizer liefert nicht nur Textstring, Recognizer liefert nicht nur Textstring, sondern auchsondern auch• Aussagewahrscheinlichkeit ("confidence Aussagewahrscheinlichkeit ("confidence

level")level")• AlternativvorschlägeAlternativvorschläge• zugehörige Strokeszugehörige Strokes

• Anwendung sollte Korrektur-UI anbietenAnwendung sollte Korrektur-UI anbieten

Tablet PC Edition

Texterkennung für Texterkennung für EinsteigerEinsteiger

Ink.Strokes.ToString()Ink.Strokes.ToString()

• nutzt Default Recognizernutzt Default Recognizer

• liefert wahrscheinlichstes Ergebnisliefert wahrscheinlichstes Ergebnis

• synchrone Erkennung für komplettes Inksynchrone Erkennung für komplettes Ink

InkRecognition

Tablet PC Edition

Gesten erkennenGesten erkennen

• 38 Application Gestures38 Application Gestures• ScratchOut, Triangle, ArrowUp, ...ScratchOut, Triangle, ArrowUp, ...

• CollectionMode.CollectionMode.InkAndGestureInkAndGesture / / GestureOnlyGestureOnly

• Ereignis: Ereignis: GestureGesture• auswerten oderauswerten oder• InkCollectorGestureEventArgs.Cancel=trueInkCollectorGestureEventArgs.Cancel=true

StrokeStroke-Event feuert-Event feuert

• Methode Methode SetGestureStatusSetGestureStatus legt fest, legt fest, welche Gesten erkannt werden sollenwelche Gesten erkannt werden sollen• alle erkennen: alle erkennen: ApplicationGesture.AllGesturesApplicationGesture.AllGestures

Tablet PC Edition

Erkennung nichttrivialErkennung nichttrivial

• RecognizerRecognizer-Objekt zur Steuerung der -Objekt zur Steuerung der TexterkennungTexterkennung• Eigenschaft Eigenschaft CapabilitiesCapabilities

• ArbitraryAngle, DownAndLeft etc.ArbitraryAngle, DownAndLeft etc.

• Collection Collection RecognizersRecognizers liefert verfügbare liefert verfügbare RecognizerRecognizer• GetDefaultRecognizerGetDefaultRecognizer

• RecognizerContextRecognizerContext für spezifische für spezifische TexterkennungTexterkennung• Modus: Modus: RecognitionFlagsRecognitionFlags• Input-Typ, Wortlisten etc.Input-Typ, Wortlisten etc.

Tablet PC Edition

RecognizerContext RecognizerContext nutzennutzen• Objekt erstellen Objekt erstellen

((Recognizer.CreateRecognizerContext()Recognizer.CreateRecognizerContext()))

• evtl. Eigenschaften setzenevtl. Eigenschaften setzen

• Strokes übergebenStrokes übergeben

• evtl. evtl. EndInkInput()EndInkInput() aufrufen aufrufen• erkennen:erkennen:

RecognizerContext.Recognize(out RecognizerContext.Recognize(out RecognitionStatus rs)RecognitionStatus rs)• liefert liefert RecognitionResultRecognitionResult-Objekt-Objekt

• TopStringTopString-Eigenschaft gibt wahrscheinlichstes -Eigenschaft gibt wahrscheinlichstes ErgebnisErgebnis

• BackGroundRecognize()BackGroundRecognize() für asynchrone für asynchrone ErkennungErkennung

Tablet PC Edition

Alternativen nutzenAlternativen nutzen

• RecognitionAlternateRecognitionAlternate-Klasse liefert Infos -Klasse liefert Infos zu Interpretationsmöglichkeitenzu Interpretationsmöglichkeiten

• RecognitionResult.TopAlternateRecognitionResult.TopAlternate für für wahrscheinlichsten Trefferwahrscheinlichsten Treffer

• GetAlternatesFromSelection()GetAlternatesFromSelection() für weitere für weitere MöglichkeitenMöglichkeiten

RecoProposition

Tablet PC Edition

Text & Ink verbindenText & Ink verbinden

• Resultate können mit dem Ink-Objekt Resultate können mit dem Ink-Objekt gespeichert werdengespeichert werden

• Eigenschaft Eigenschaft Strokes.RecognitionResultStrokes.RecognitionResult kann überkann über

RecognitionResult.SetStrokesResult()RecognitionResult.SetStrokesResult()

gesetzt werdengesetzt werden

Tablet PC Edition

Erkennung verbessernErkennung verbessern

• Eigenschaft Eigenschaft FactoidFactoid des des RecognizerContextRecognizerContext-Objekts gibt Hinweis -Objekts gibt Hinweis darauf, darauf, waswas erkannt werden soll: erkannt werden soll:recoCtxt.Factoid="EMAIL|WEB"recoCtxt.Factoid="EMAIL|WEB"

• Factoids sind StringsFactoids sind Strings• DIGIT, DEFAULT, CURRENCY, DATE etc.DIGIT, DEFAULT, CURRENCY, DATE etc.

• Eigenschaft Eigenschaft WordlistWordlist enthält Sammlung enthält Sammlung von Strings, welche bevorzugt erkannt von Strings, welche bevorzugt erkannt werden sollen:werden sollen:

WordList wl=new WordList();WordList wl=new WordList();wl.Add("Gugelhupf");wl.Add("Gugelhupf");recoCtxt.WordList=wl;recoCtxt.WordList=wl;

RecognitionOption

Tablet PC Edition

Ink Ink ControlsControls

Tablet PC Edition

ÜberblickÜberblick

• Steuerelemente für Steuerelemente für WindowsanwendungenWindowsanwendungen

• InkEditInkEdit• ähnlich RichText-Controls, zusätzlich Ink Input ähnlich RichText-Controls, zusätzlich Ink Input

& Texterkennung& Texterkennung• Versionen für .NET, ActiveX, Win32Versionen für .NET, ActiveX, Win32

• InkPictureInkPicture• ähnlich InkCollector, InkOverlayähnlich InkCollector, InkOverlay• Ink auf Bildern (JPG, BMP, PNG, GIF)Ink auf Bildern (JPG, BMP, PNG, GIF)• Versionen für .NET & ActiveXVersionen für .NET & ActiveX

Tablet PC Edition

InkEditInkEdit

• Eigenschaften:Eigenschaften:• InkModeInkMode: InkAndGesture, Ink, Disabled: InkAndGesture, Ink, Disabled• StatusStatus: Idle, Collecting, Recognizing: Idle, Collecting, Recognizing• InkInsertModeInkInsertMode: InsertAsText, InsertAsInk: InsertAsText, InsertAsInk• DrawingAttributesDrawingAttributes• UseMouseForInputUseMouseForInput (bool) (bool)• CursorCursor (Maus-Cursor!)(Maus-Cursor!)

• Methoden:Methoden:• Ink[] Ink[] SelInks()SelInks()• InkDisplayMode InkDisplayMode SelInksDisplayMode()SelInksDisplayMode()

• Ink, TextInk, Text

InkEditDemo

Tablet PC Edition

Erkennung beeinflussenErkennung beeinflussen

• RecognizerRecognizer-Eigenschaft für detaillierte -Eigenschaft für detaillierte EinstellungenEinstellungen

• FactoidFactoid-Eigenschaft verfügbar-Eigenschaft verfügbar

• RecoTimeoutRecoTimeout: Wartezeit vor Umsetzung: Wartezeit vor Umsetzung

• Erkennung manuell starten: Erkennung manuell starten: Recognize()Recognize()

• GestureGesture-Ereignis und -Ereignis und SetGestureStatus()SetGestureStatus() für Gestenerkennungfür Gestenerkennung• Default: DownLeft[Long] (Return), Default: DownLeft[Long] (Return),

UpRight[Long] (Tab), Right (Space), Left UpRight[Long] (Tab), Right (Space), Left (Bkspc)(Bkspc)

Tablet PC Edition

InkPictureInkPicture

• Kombination aus Kombination aus InkOverlayInkOverlay und und PictureBoxPictureBox

• InkEnabledInkEnabled statt (InkOverlay.) statt (InkOverlay.)EnabledEnabled

PaperForm

Tablet PC Edition

Neu in Version 1.5Neu in Version 1.5

• PenInputPanelPenInputPanel• frei programmierbarer Eingabebereichfrei programmierbarer Eingabebereich• unterstützt TSF & Korrekturunterstützt TSF & Korrektur

• DividerDivider• Ink-Analyse, Trennung von Text & GrafikInk-Analyse, Trennung von Text & Grafik

PIPSerialization

Tablet PC Edition

DesignrichtlinienDesignrichtlinien

• visuelle Kennzeichnungvisuelle Kennzeichnungvon Eingabebereichenvon Eingabebereichen

• DPI-AbhängigkeitDPI-Abhängigkeit

• BildschirmorientierungBildschirmorientierung(1024x768 (1024x768 768x1024) 768x1024)

• Modalität (Schreiben, Löschen, Zeigen, …)Modalität (Schreiben, Löschen, Zeigen, …)• expliziter Wechsel & Zustandsanzeigeexpliziter Wechsel & Zustandsanzeige

• ErgonomieErgonomie• Zielen: Bereiche <5mm schwer zu treffenZielen: Bereiche <5mm schwer zu treffen• Auswählen: Lasso-ToolAuswählen: Lasso-Tool• Hovering: spezielle Version von COMCTL32.DLLHovering: spezielle Version von COMCTL32.DLL

Tablet PC Edition

DesignrichtlinienDesignrichtlinien

• Parallaxe durch Bildschirmdicke & Parallaxe durch Bildschirmdicke & LichtbrechungLichtbrechung• KalibrierungKalibrierung

• Rechts-/Linkshänder Rechts-/Linkshänder (Menüs!)(Menüs!)

• Performancefragen fürPerformancefragen fürnatürlich wirkendesnatürlich wirkendesSchreibenSchreiben

Tablet PC Edition

AgendaAgenda

• Tablet PC: Hardware & SoftwareTablet PC: Hardware & Software

• Tablet-FunktionalitätTablet-Funktionalität• StifteingabeStifteingabe• Digitale TinteDigitale Tinte• SchrifterkennungSchrifterkennung

• Entwickeln für den Tablet PCEntwickeln für den Tablet PC• Das SDK im ÜberblickDas SDK im Überblick• Managed LibrariesManaged Libraries• Design-RichtlinienDesign-Richtlinien

• ZusammenfassungZusammenfassung

Tablet PC Edition

ZusammenfassungZusammenfassung• Ink ist das grundlegende Objekt in Ink ist das grundlegende Objekt in

stiftbasierten Anwendungen.stiftbasierten Anwendungen.

• Das SDK bietet umfangreiche & Das SDK bietet umfangreiche & komfortable Möglichkeiten zur komfortable Möglichkeiten zur Manipulation von Ink, zur Analyse & Manipulation von Ink, zur Analyse & Schrifterkennung.Schrifterkennung.

• Für Standardaufgaben stehen Ink Controls Für Standardaufgaben stehen Ink Controls zur Verfügung.zur Verfügung.

• Es bestehen besondere Anforderungen an Es bestehen besondere Anforderungen an das UI-Design.das UI-Design.

Tablet PC Edition

Fragen!?Fragen!?

Uff...Uff...

Tablet PC Edition

BuchempfehlungBuchempfehlung

• Rob Jarrett, Philip SuRob Jarrett, Philip Su“Building Tablet PC “Building Tablet PC Applications”Applications”Microsoft Press 2003Microsoft Press 2003ISBN 0-7356-1723-6ISBN 0-7356-1723-6

Tablet PC Edition

Weiterführende InfosWeiterführende Infos

• Tablet PC Platform SDKTablet PC Platform SDKhttp://msdn.microsoft.com/downloads/default.asphttp://msdn.microsoft.com/downloads/default.asp?url=?url=/downloads/sample.asp?url=/MSDN-FILES//downloads/sample.asp?url=/MSDN-FILES/027/002/015/msdncompositedoc.xml027/002/015/msdncompositedoc.xml

• Tablet Developer Info @ MicrosoftTablet Developer Info @ Microsofthttp://www.microsoft.com/windowsxp/tabletpc/http://www.microsoft.com/windowsxp/tabletpc/developers/default.aspdevelopers/default.asp

• Tablet PC Developer CommunityTablet PC Developer Communityhttp://www.tabletpcdeveloper.com/http://www.tabletpcdeveloper.com/

Tablet PC Edition

Slides & DemosSlides & Demos

• http://www.frankpr.de/http://www.frankpr.de/

Vielen Dank!

Tablet PC Edition