11
votes

Honeywell Dolphin 9500 (Pocket PC 2003) C # Manipulation des événements Conflits?

Environnement
  • Windows XP x32 Visual Studio 2005 Standard Edition
  • Honeywell Dolphin 9500 fonctionnant sous Windows Mobile 2003 (Pocket PC 2003)
    • Avec construit dans le scanner de codes à barres et appareil photo B & W
    • En utilisant leur SDK situé ici .
    • NET Compact Framework 1.0 SP3 et .NET Framework 1.1
    • Utilisation VC #

      Objectif

      Je tente de créer une application qui permet à un individu de numériser un code-barres, puis capturer une image. Ces choses ne devraient pas se produire en même temps. L'utilisateur doit être en mesure de vérifier deux fois de balayage de codes à barres, puis déplacez sur la partie de l'application qui de capture d'image poignées.


      Problème

      Les numéros de ligne font référence à mon code dans le lien friendpaste dans la section code ci-dessous.

      J'ai deux gestionnaires d'événements en place: l'un pour l'événement de décodage de la commande du scanner de codes à barres et un contrôle pour appeler la capture d'image par un événement KeyDown. Le contrôle de décodage a son propre événement / gestionnaire DecodeEventHandler et un ensemble de touche de déclenchement avec un ENUM (LNS 201 et 202). Toutefois, le contrôle de l'image, ne fonctionne pas. Ses états de documentation que le formulaire doit avoir un gestionnaire d'événements KeyDown (ln 120) et la ENUM touche de déclenchement (ln 178). Lors de l'exécution de l'application (sans SelectedIndexChanged [En 76] Le gestionnaire d'événements en place), le scanner de codes à barres fonctionne très bien, mais passage à l'onglet (ou le formulaire, comme je l'ai essayé des formulaires séparés, bien), avec le contrôle de la capture d'image et frapper la gâchette clé sur l'appareil (SCAN dans ce cas) provoque l'ordinateur de poche d'agir comme il scanne toujours un code à barres (feux rouges se allument, la lumière objectif vert est de montrer, émet un signal sonore lors de la rencontre d'un code à barres) au lieu du comportement normalement affichés lors de l'utilisation le contrôle de l'image (pas de lumières, ou lumières blanches comme un flash).


      Ce que j'ai essayé
      • IMPORTANT: Si je supprime le contrôle de décodage de l'application, les travaux de contrôle d'image. Si je construis une application séparée avec seulement le contrôle de l'image, cela fonctionne.
      • Je mets un point de rupture à la ligne 210 et a découvert l'événement KeyDown n'est jamais d'être frappé. A ce stade, j'ai essayé de séparer en quelque sorte les gestionnaires d'événements ou des contrôles si j'ai présenté le gestionnaire d'événements SelectedIndexChanged pour mon contrôle onglet et lors du passage à l'onglet avec la commande appropriée, j'ai essayé de supprimer des gestionnaires d'événements. J'ai pu enlever le gestionnaire de DecodeEvent mais était encore incapable de frapper le délégué de gestionnaire d'événements KeyDown je l'ai écrit.
      • Les deux Décoder et commandes de l'image SDK de Honeywell ont des événements « Disconnect » qui (pour citer la documentation) « Se déconnecter du moteur d'analyse ». J'ai donc essayé débranchant et rebranchant des contrôles basés sur l'onglet dans lequel je passer à, mais n'a pas réussi à aussi.
      • J'ai lu aussi quelque part que les événements formulaire peuvent parfois être perturbés si le formulaire perd le focus. Donc je mis en œuvre l'événement Form.LostControl / gestionnaire et mettre en this.Focus () pour revenir focus sur la forme, mais sans succès.
      • J'ai rencontré plusieurs personnes suggérant KeyPreview = true et la manipulation / déléguer les événements au niveau de la forme. Il semble que le .NET Compact Framework version 1 ne met pas en œuvre ce que mes objets de formulaire ont aucun membre de KeyPreview.
      • Dans le ENUM de TriggerKey (par exemple à la ligne 202), il y a un ENUM pour la touche Entrée du périphérique. J'ai essayé câblage jusqu'à la commande d'image et numériser jusqu'à la commande du décodeur, mais était encore incapable de frapper l'événement KeyDown.

        code

        http://friendpaste.com/355cQOCghvPkE5YR29lthO

        J'affiché le code comme un lien friendpaste parce qu'il est un peu long (~ 230 lignes). Permettez-moi de savoir si je devrais inclure ici.


        Vous avez besoin d'informations supplémentaires?

        Demandez loin et je ferai de mon mieux!

        Je l'ai marqué ce Honeywell Dolphin 9500, mais je suis un nouvel utilisateur.


0 commentaires

3 Réponses :


1
votes

La raison pour laquelle je pense que vous ne pouvez pas accéder au gestionnaire est que celui qui est pour le tabcontrol1_indexchanged est un System.EventHandler qui est une forme générique de la touche .

Essayez de faire quelque chose comme ça et voyez s'il attrape la clé xxx


1 commentaires

Tout d'abord, merci pour la réponse. Cependant, avec ou sans le gestionnaire d'événements sélectionné, je ne peux pas frapper le gestionnaire d'événements de clé. Cela de côté, j'ai essayé ce que vous avez dit de toute façon mais en vain. Merci encore, je ne savais pas que et tout apprentissage est un bon apprentissage! Edit Laissez-moi être plus clair: J'ai essayé ce que vous avez dit, mais sur la touche, la sélection de la touche, la sélection suivante n'a pas été appelée.



1
votes

Ceci est un peu un hack, mais je pense que cela va fonctionner. Set AllKeys (true); code>. Cela devrait vous assurer que votre application capture toute la presse du clavier.

AllKeys signature P / Invoke: http://blogs.msdn.com/b/mikefrancis/archive/2009/03/28/porting-gapi-keys-to-wm-6-1- et 6-5.aspx p>

informations générales AllKeys: http://windowsteamblog.com/windows_phone/b/windowsphone /archive/2009/07/14/just-say-no-to-gapi-what-you-need-to-know-about-allkeys-and-input-management.aspx p>

Il semble que le contrôle de décodage est avalait le message dont vous avez besoin. Vous pouvez essayer de contacter le support développeur HHP. Si elles ont un forum de soutien aux développeurs en ligne qui peut fonctionner aussi. En guise de test, ce qui se passe si vous commencez à commenter les lignes 192-202? Est-ce que l'une de ces lignes la cause de votre événement keydown à un travail d'arrêt? P>

-PaulH p>

Modifier strong> p>

Le imageControl et decodeControl à la fois accepter un TriggerKey code> paramètre. . Cela sonne comme ils attendent à faire l'événement se keypress la manipulation p>

Essayez ceci: seulement avoir un de ces instancié à un moment en fonction de ce que vous êtes sur l'onglet. Débarrassez-vous du code de gestion Form1_KeyDown code> tous ensemble (y compris les AllKeys). Voir si cela fonctionne. P>

Sinon, vous pouvez toujours tuer votre Form1_KeyDown code> gestionnaire, mais garder les deux contrôles comme ils sont et faire dans votre tabControl1_SelectedIndexChanged code> gestionnaire à la place. p>

private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
{
    if (this.tabControl1.SelectedIndex == 0)
    {
        this.decodeControl1.TriggerKey = HHP.DataCollection.Common.TriggerKeyEnum.TK_ONSCAN;
        this.imageControl1.TriggerKey = null;
    }
    else if (this.tabControl1.SelectedIndex == 1)
    {
        this.decodeControl1.TriggerKey = null;
        this.imageControl1.TriggerKey = TriggerKeyEnum.TK_ONSCAN;
    }
}


4 commentaires

Je m'excuse d'avance pour mon manque d'expérience, mais comment utiliser la signature P / invoke ou comment puis-je autoriser mon application à la fonction Allkeys?


Je ne sais pas pourquoi vous voudriez m'excuser pour cela. Ceci est un forum d'aide au développeur, après tout. MSDN a un didacticiel sur les API Win32 à partir du code géré (p / invoke) ici: msdn.microsoft.com/en-us/magazine/cc164123.aspx


Eh bien, cela a certainement obtenu ma candidature en capturant l'événement clé! Cependant, mon problème est incliné dans l'autre direction maintenant. L'événement de clé à manquement a la priorité sur le décodévent. Cela ne constitue pas un problème, sauf que l'événement du porte-clés nécessite que les evenargs soient de type KeyEventargs pour l'appeler et le décodévent nécessite le deuxième paramètre de type décodéventargs que je ne peux pas être jeté de Keeventargs. Cela signifie que je ne peux pas déléguer la tâche de décodage car je ne peux pas appeler correctement ma fonction de gestionnaire décodéent (ligne 148). Idées?


Bien que les deux contrôles acceptent une triggerkey, seul le contrôle du décodage effectue réellement sa propre manipulation d'événements / clés. Le contrôle de l'image, basé sur la documentation et les programmes d'échantillons, nécessite que le consommateur soit un gestionnaire d'événements de clé. De plus, si je définissais TriggerKey sur autre chose que tk_onscan ou tk_enter, la commande (contrôle de décodage) ne souscrit pas à un enregistrement de la touche de raccourci et que l'application se bloque en disant "raccourci clavier non non enregistré". Il y a même un tk_none dans l'énumérateur de TriggerKey et qui échoue avec la même erreur. Le contrôle n'est pas codé correctement pour accepter ce type de comportement apparemment.



0
votes

J'ai trouvé que si je changez la triggerkey en TK_Enter (une autre valeur dans la TRGERKey Enum), je peux interagir avec le contrôle de l'image sans aucun problème. Maintenant, j'ai juste besoin de trouver un moyen de capturer cette touche Entrée, appuyez sur pour le garder de quelque chose de bizarre.

Merci pour toute l'aide!


0 commentaires