Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants FMX Delphi Discussion :

[Android BlueTooth] Comment détecter un CR fantome?


Sujet :

Composants FMX Delphi

  1. #1
    Membre extrêmement actif
    [Android BlueTooth] Comment détecter un CR fantome?
    Bonjour à tous les Delphistes!

    Imaginez une app Android développée avec Delphi Rio qui est connectée à un appareil externe BlueTooth (tests effectués avec lecteur code barre et avec clavier).

    Quand un Carriage Return (CR) est envoyé, l'app déclenche un event "FormKeyDown(Sender: TObject; var Key: Word; var KeyChar: Char;
    Shift: TShiftState);" Donc le CR est détecté!

    Si j'utilise un éditeur de texte Android, le CR est pris en compte.

    Mais impossible d'identifier le caractère CR dans l'event Delphi "FormKeyDown": un "Ord(KeyChar)" qui devrait donner un #13 (et qui donne #13 si on compile pour windows) donne 0, un "LEncoding.GetBytes(KeyChar)" donne aussi 0;

    Idem pour les touches clavier Backspace, Enter, Ctrl, Alt, Shift, Caps, F1...F12, Insert, Home, PgUp, Delete, End, PgDn, ..... qui donnent toutes '0'!

    Dès lors, une question se pose... Comment identifier l'arrivée d'un CR ou autre caractère non alphanumérique?

  2. #2
    Membre expérimenté
    Sur Android dans certains cas on a une différence entre KeyDown et KeyUp : certaines touches ne sont repérées que dans le second.
    (ce problème se pose aussi avec les télécommandes pour Android TV, il faut passer par une API non gérée en standard par FMX pour des appareils externes car les fonctions dans FMX prennent en charge uniquement le clavier virtuel pour le moment)

  3. #3
    Membre extrêmement actif
    Citation Envoyé par pprem Voir le message
    Sur Android dans certains cas on a une différence entre KeyDown et KeyUp : certaines touches ne sont repérées que dans le second.
    (ce problème se pose aussi avec les télécommandes pour Android TV, il faut passer par une API non gérée en standard par FMX pour des appareils externes car les fonctions dans FMX prennent en charge uniquement le clavier virtuel pour le moment)

    1. Sur un clavier virtuel Android, la touche ENTER est présente!

    2. Si je mets le focus sur un composant Memo et configure le lecteur code barre pour que l'envoi du code barre via Bluetooth se termine par un CR, le CR est pris en compte dans le Memo, il y a un retour à la ligne à chaque lecture de code barre!!!

    Alors comment le composant Memo FMX peut réagir à un CR qui selon toi n'est pas traité par Delphi FMX???

    Comment le Memo peut détecter un CR que l'on ne peut pas identifier via le code?

    Quand à la différence de traitement entre KeyDown et KeyUp, elle existe. Avec le même code et la même configuration de douchette, KewDown récupère le bon code barre alors que KeyUp récupère du chinois (une série de caractères exotiques du style "ç)@¢%"): On peut donc conclure que KeyDown et KeyUp n'utilise pas le même character set!!!

  4. #4
    Membre émérite
    Bonjour,

    Pour info concernant le OnKeyDown et OnKeyUp event sur Android :

    http://blog.blong.com/2020/02/the-enter-key-and-onkeydown-event-on.html

  5. #5
    Membre extrêmement actif
    Citation Envoyé par Thierry Laborde Voir le message
    Bonjour,

    Pour info concernant le OnKeyDown et OnKeyUp event sur Android :

    http://blog.blong.com/2020/02/the-enter-key-and-onkeydown-event-on.html
    Merci pour l'info mais ton lien parle d'un problème consistant en le non-déclenchement des events onKeydown et onKeyUp à la réception d'un ENTER.

    Avec Delphi Rio et tous les patchs installés, ENTER déclenche les events onKeydown et onKeyUp!

    Le problème est qu'il met impossible de reconnaître la présence du ENTER à l'aide du code: Le code ASCII retourné pour ENTER et la liste de touches donnée plus haut est égal à la valeur 0!!!

###raw>template_hook.ano_emploi###