Partager via


InkCollectorNewInAirPacketsEventHandler, délégué

Mise à jour : November 2007

Représente la méthode qui gère l'événement NewInAirPackets d'un objet InkCollector.

Espace de noms :  Microsoft.Ink
Assembly :  Microsoft.Ink (dans Microsoft.Ink.dll)

Syntaxe

'Déclaration
Public Delegate Sub InkCollectorNewInAirPacketsEventHandler ( _
    sender As Object, _
    e As InkCollectorNewInAirPacketsEventArgs _
)
'Utilisation
Dim instance As New InkCollectorNewInAirPacketsEventHandler(AddressOf HandlerMethod)
public delegate void InkCollectorNewInAirPacketsEventHandler(
    Object sender,
    InkCollectorNewInAirPacketsEventArgs e
)
public delegate void InkCollectorNewInAirPacketsEventHandler(
    Object^ sender, 
    InkCollectorNewInAirPacketsEventArgs^ e
)
/** @delegate */
public delegate void InkCollectorNewInAirPacketsEventHandler(
    Object sender,
    InkCollectorNewInAirPacketsEventArgs e
)
JScript ne prend pas en charge les délégués.

Paramètres

Notes

Un paquet in-air est créé lorsqu'un utilisateur déplace un stylet près de la tablette et que le curseur se trouve dans la fenêtre de l'objet InkCollector ou que l'utilisateur déplace une souris dans la fenêtre associée de l'objet InkCollector. Les événements NewInAirPackets sont générés rapidement et le gestionnaire d'événements doit donc être réactif pour ne pas diminuer les performances.

Lorsque vous créez un délégué InkCollectorNewInAirPacketsEventHandler, vous identifiez la méthode qui gère l'événement. Pour associer l'événement au gestionnaire d'événements, ajoutez une instance du délégué à l'événement. Le gestionnaire d'événements est appelé chaque fois qu'un événement se produit, sauf si vous supprimez le délégué. Pour des raisons de performances, l'intérêt d'événement par défaut est désactivé. Toutefois, il est automatiquement activé dans le code managé si vous ajoutez un gestionnaire d'événements.

L'événement NewInAirPackets se déclenche en mode de sélection ou de suppression, pas uniquement lors de l'insertion d'une entrée manuscrite. Vous devez surveiller le mode de modification (que vous êtes chargé de définir) et connaître le mode avant d'interpréter l'événement. Ces conditions offrent une plus grande liberté d'innovation sur la plateforme grâce à une sensibilité accrue des événements de plateforme.

Exemples

Cet exemple C# dessine sur le formulaire un rectangle à contour gras lorsque les paquets in-air se trouvent dans le rectangle ou à contour fin lorsque les paquets se trouvent à l'extérieur du rectangle. Il montre comment utiliser les événements de paquet pour contrôler le comportement des applications.

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using Microsoft.Ink;

namespace CSInAirPacketEvents
{
    public class Form1 : System.Windows.Forms.Form
    {
    //...

        InkCollector theInkCollector;
        int indexX, indexY;
        Rectangle rectInterest;
        bool thickBorder;

        public Form1()
        {
            //...

            //Initialize the InkCollector object.
            theInkCollector= new InkCollector(Handle);
            theInkCollector.Enabled = true;

            //Initialize the target rectangle
            rectInterest = new Rectangle(40, 40, 200, 80);
            thickBorder = false;

            //Save the X and Y data locations within the packet data.
            GetXYIndexes(ref indexX, ref indexY);

            //Add the event handler for in-air packets
            theInkCollector.NewInAirPackets += new InkCollectorNewInAirPacketsEventHandler(NewInAirPackets_Event);
        }

//...

        private void GetXYIndexes(ref int theXIndex, ref int theYIndex)
        {
            // Get the indexes of the X and Y data within the raw
            // packet data array.
            Guid [] theGuids = theInkCollector.DesiredPacketDescription;
            for (int i = 0; i < theGuids.Length; i++)
            {
                if (theGuids[i].Equals(PacketProperty.X))
                    theXIndex = i;
                if (theGuids[i].Equals(PacketProperty.Y))
                    theYIndex = i;
            }
        }

        private void NewInAirPackets_Event(object sender, InkCollectorNewInAirPacketsEventArgs e)
        {
            Graphics g = this.CreateGraphics();
            Point [] pt = new Point [1];
            pt[0].X = e.PacketData[indexX];
            pt[0].Y = e.PacketData[indexY];
            theInkCollector.Renderer.InkSpaceToPixel(g, ref pt);

            // The event may return with data for multiple packets.
            // To simplify things, we'll only look at the first.
            if (rectInterest.Contains(pt[0].X, pt[0].Y))
            {
                if (!thickBorder)
                {
                    thickBorder = true;
                    Refresh();
                }
            }
            else
            {
                if (thickBorder)
                {
                    thickBorder = false;
                    Refresh();
                }
            }
        }

        private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            Pen thePen = new Pen(Color.Black, 2);
            if (thickBorder)
                thePen.Width = 5;
            g.DrawRectangle(thePen, rectInterest);
        }

        // Event handler for the form's closed event
        private void Form1_Closed(object sender, System.EventArgs e)
        {
            theInkCollector.Dispose();
            theInkCollector= null;
        }
    }
}

Cet exemple Microsoft® Visual Basic® .NET dessine sur le formulaire un rectangle à contour gras lorsque les paquets in-air se trouvent dans le rectangle ou à contour fin lorsque les paquets se trouvent à l'extérieur du rectangle. Il montre comment utiliser les événements de paquet pour contrôler le comportement des applications.

Imports Microsoft.Ink
Public Class Form1
    Inherits System.Windows.Forms.Form

    Dim theInkCollector As InkCollector
    Dim indexX, indexY As Integer
    Dim rectInterest As Rectangle
    Dim thickBorder As Boolean

'...

    Public Sub New()
        MyBase.New()

        'This call is required by the Windows Form Designer.
        InitializeComponent()

        'Initialize the InkCollector object.
        theInkCollector = New InkCollector(Handle)
        theInkCollector.Enabled = True

        'Initialize the target rectangle
        rectInterest = New Rectangle(40, 40, 200, 80)
        thickBorder = False

        'Save the X and Y data locations within the packet data.
        GetXYIndexes(indexX, indexY)

        'Add the event handler for in air packets
        AddHandler theInkCollector.NewInAirPackets, AddressOf NewInAirPackets_Event

    End Sub

'...

    Private Sub GetXYIndexes(ByRef theXIndex As Integer, _
        ByRef theYIndex As Integer)
        ' Get the indexes of the X and Y data within the raw
        ' packet data array.
        Dim theGuids() As Guid = theInkCollector.DesiredPacketDescription
        Dim i As Integer
        For i = 0 To theGuids.Length - 1
            If theGuids(i).Equals(PacketProperty.X) Then
                theXIndex = i
            End If
            If theGuids(i).Equals(PacketProperty.Y) Then
                theYIndex = i
            End If
        Next
    End Sub

    Private Sub NewInAirPackets_Event(ByVal sender As Object, _
        ByVal e As InkCollectorNewInAirPacketsEventArgs)
        'The event may return with data for multiple packets.
        'To simplify things, we'll only look at the first.
        If rectInterest.Contains( _
            e.PacketData(indexX), e.PacketData(indexY)) Then
            If thickBorder = False Then
                thickBorder = True
                Refresh()
            End If
        Else
            If thickBorder = True Then
                thickBorder = False
                Refresh()
            End If
        End If
    End Sub

    Private Sub Form1_Paint(ByVal sender As Object, _
        ByVal e As System.Windows.Forms.PaintEventArgs) _
        Handles MyBase.Paint
        Dim g As Graphics = e.Graphics
        Dim thePen As New Pen(Color.Black, 2)
        If thickBorder Then
            thePen.Width = 5
        End If
        g.DrawRectangle(thePen, rectInterest)
    End Sub

    'Event handler for the form's closed event
    Private Sub Form1_Closed(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Closed
        theInkCollector.Dispose()
        Set theInkCollector = Nothing
    End Sub
End Class

Plateformes

Windows Vista

Le .NET Framework et le .NET Compact Framework ne prennent pas en charge toutes les versions de chaque plateforme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise du .NET Framework.

Informations de version

.NET Framework

Pris en charge dans : 3.0

Voir aussi

Référence

Microsoft.Ink, espace de noms

Cursor

InkCollector.DesiredPacketDescription

InkCollector.NewPackets