IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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 :

[FMX] Les mystères du clavier virtuel [Android]


Sujet :

Composants FMX Delphi

  1. #1
    Membre extrêmement actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2017
    Messages
    1 783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2017
    Messages : 1 783
    Points : 5 727
    Points
    5 727
    Par défaut [FMX] Les mystères du clavier virtuel
    Bonjour à tous,

    J'essaie avec Delphi Rio de travailler avec le clavier virtuel pour obtenir ce qui semblerait être un comportement basique:
    • J'aimerai pouvoir empêcher l'ouverture du clavier virtuel quand l'utilisateur clique sur un TEdit et décider via programmation de son ouverture ou de sa fermeture
    • J'aimerai détecter quand l'utilisateur presse sur le clavier virtuel la touche Enter




    1.
    Pour le 1er point, il y a des dizaines d'exemples sur le web, aucun ne fonctionne (il y a certains qui mentionnent que l'exemple fonctionnait avec de vieilles versions de Delphi (à l'époque des XE) mais que cela ne fonctionne plus avec les Berlin, Tokyo and others... Tests effectués, ces codes ne fonctionnent pas!


    2.
    Pour le 2ème point, vous allez me dire...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     If Key in [vkRETURN, vkACCEPT] Then
     begin
    ...
     end;
    Dans un event onKeyUp ou onKeyDown

    Ben, non! Votre beau code amoureusement compilé ne fera rien!


    Est-ce que quelqu'un sur ce forum a réussi à "dompter" ce clavier virtuel???

    Merci pour votre avis

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    je n'y connais pas grand chose sur le clavier virtuel aussi ai-je décidé de faire un essai et ce sans même chercher sur le net, j'ai tout de suite pensé à l'interface.

    Avec Sidney voici comment j'ai fait
    comme écran un TEdit et un bouton
    Nom : Capture.PNG
Affichages : 675
Taille : 13,5 Ko

    désolé, pas très visible le bouton

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    unit UnitVkeyboard;
    
    interface
    
    uses
      System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
      FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, 
      FMX.VirtualKeyboard,  FMX.Platform,
      FMX.Controls.Presentation,
      FMX.Edit, FMX.StdCtrls;
    
    type
      TForm3 = class(TForm)
        Edit1: TEdit;
        Button1: TButton;
        procedure FormCreate(Sender: TObject);
        procedure Button1Click(Sender: TObject);
        procedure Edit1KeyUp(Sender: TObject; var Key: Word; var KeyChar: Char;
          Shift: TShiftState);
      private
        { Déclarations privées }
        IKeyboard : IFMXVirtualKeyboardService;
      public
        { Déclarations publiques }
      end;
    
    var
      Form3: TForm3;
    
    implementation
    
    {$R *.fmx}
    
    procedure TForm3.Button1Click(Sender: TObject);
    begin
    if Assigned(IKeyBoard) then IKeyboard.ShowVirtualKeyboard(Edit1);
    end;
    
    procedure TForm3.Edit1KeyUp(Sender: TObject; var Key: Word; var KeyChar: Char;
      Shift: TShiftState);
    begin
    if (Key=vkReturn) AND Assigned(IKeyBoard) then IKeyboard.HideVirtualKeyboard;
    end;
    
    procedure TForm3.FormCreate(Sender: TObject);
    begin
    TPlatformServices.Current.SupportsPlatformService(IFMXVirtualKeyboardService,IKeyBoard);
    end;
    
    end.
    Constations :
    si je sélectionne (j'allais écrire click mais ce serait plutôt touche) le TEdit pas de clavier virtuel
    si je touche le bouton le clavier virtuel se montre (en fonction de celui défini dans la propriété Keyboardtype
    Nom : Capture_1.PNG
Affichages : 651
Taille : 31,5 Ko

    N.B. j'ai utilisé onKeyUp pour géré la touche "Enter" du clavier virtuel

    ce qui répond je pense aux deux questions

    inconvénient il faut ensuite le gérer pour tout autre zone de saisie.
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    Citation Envoyé par Anselme45 Voir le message
    1.
    Pour le 1er point, il y a des dizaines d'exemples sur le web, aucun ne fonctionne (il y a certains qui mentionnent que l'exemple fonctionnait avec de vieilles versions de Delphi (à l'époque des XE) mais que cela ne fonctionne plus avec les Berlin, Tokyo and others... Tests effectués, ces codes ne fonctionnent pas!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    FMX.Types.VKAutoShowMode := TVKAutoShowMode.Never;
    bug Tokyo connu et corrigé dans Rio
    https://quality.embarcadero.com/browse/RSP-17768
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    @Paul, effectivement c'est plus simple que mon accession à l'interface !

    Du coup j'en ai également profité pour voir ce qu'il en était de l'histoire du clavier qui recouvre les TEdit.
    Une réponse se trouvait dans des exemples fournis
    (samples\Object Pascal\Multi-Device Samples\User Interface\PlatformScrollBox
    samples\Object Pascal\Multi-Device Samples\User Interface\KeyboardToolbar )

    Le premier m'a laissé un goût étrange : le clavier n'est pas "conditionné" par la propriété du composant KeyboardType (testé avec Rio, mon déploiement avec Sidney étant encore mal configuré)
    Le second est plus sur l'ajout d'un bouton, autre demande que j'ai vu passé sur le forum
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #5
    Membre extrêmement actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2017
    Messages
    1 783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2017
    Messages : 1 783
    Points : 5 727
    Points
    5 727
    Par défaut
    @Paul Toth

    Je n'avais pas intégré à mon code la ligne magique "FMX.Types.VKAutoShowMode := TVKAutoShowMode.Never;". La valeur par défaut étant "always", le code que j'utilisais qui était en gros le même que ta proposition ne fonctionnait pas.


    Par contre utiliser ce "TVKAutoShowMode" me pose problème. Quand tu lis la description qui en est faite dans la doc Embarcadero...

    Description

    Est utilisée principalement à des fins de débogage.

    Les valeurs possibles définies dans le type TVKAutoShowMode sont : DefinedBySystem, Never, and Always.

    La variable VKAutoShowMode variable est vérifiée par l'implémentation Windows de la méthode GetVirtualKeyBoardState. Si la valeur de VKAutoShowMode est Always, GetVirtualKeyboardState renvoie Always. Cela impose que le clavier virtuel (d'écran) apparaisse automatiquement pour les applications Windows, même si un périphérique dispose d'un clavier physique. Un tel comportement peut s'avérer utile lors du test du comportement d'une application mobile déboguée sous la plate-forme Windows.
    ... Cela ne donne pas l'impression qu'il faille l'utiliser dans un produit fini pour Android et pas sûr que l'approche soit compatible iOS.

  6. #6
    Membre extrêmement actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2017
    Messages
    1 783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2017
    Messages : 1 783
    Points : 5 727
    Points
    5 727
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Une réponse se trouvait dans des exemples fournis
    (samples\Object Pascal\Multi-Device Samples\User Interface\PlatformScrollBox
    samples\Object Pascal\Multi-Device Samples\User Interface\KeyboardToolbar )
    Franchement, j'ai testé la solution "TscollBar" auprès d'un échantillon d'utilisateurs... Il faut reconnaître que cela n'a pas été très bien accueilli... Ce type d'approche déconcerte la plupart des utilisateurs.

  7. #7
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    Citation Envoyé par Anselme45 Voir le message
    Franchement, j'ai testé la solution "TscollBar" auprès d'un échantillon d'utilisateurs... Il faut reconnaître que cela n'a pas été très bien accueilli... Ce type d'approche déconcerte la plupart des utilisateurs.
    ben s'ils veulent travailler sur mobile comme sur PC, il va falloir utiliser un clavier bluetooth

    non mais franchement, c'est pas le comportement habituel de toute appli mobile ? SMS, Whastapp, mail ...
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Android] Comment éviter que des TEdit FMX soient recouverts par le clavier virtuel?
    Par Anselme45 dans le forum Composants FMX
    Réponses: 9
    Dernier message: 01/12/2020, 12h51
  2. Réponses: 0
    Dernier message: 17/09/2016, 20h55
  3. Réponses: 8
    Dernier message: 14/09/2015, 23h32
  4. Réponses: 0
    Dernier message: 24/01/2011, 11h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo