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

Delphi Discussion :

Désactiver les touches dans un TRichEdit


Sujet :

Delphi

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    321
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 321
    Points : 88
    Points
    88
    Par défaut Désactiver les touches dans un TRichEdit
    Bonsoir,

    Ma programmation d'une fonction me permet de désactiver les frappes du clavier dans un TRichEdit par-exemple de a...z, mais cette fonction me permet aussi de désactiver la touche delete.

    J'ai fait activer cette fonction dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    procedure TForm1.FMemo1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    mais dans cette procedure ma fonction ne me permet pas de désactiver l'alphabète
    seulement delete, suppression ,..

    donc j'ai du mettre cette même fonction dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    procedure TForm1.FMemo1KeyPress(Sender: TObject; var Key: Char);
    qui me permet de désactiver l'alphabète.

    mon problème est que j'ai deux fois toute cette fonction, une fois j'envoie au Key qui est Word et dans l'autre fonction Key qui est Char.

    Ma question est alors pour optimiser mon code, est-il possible de faire tout cela dans la procedure TForm1.FMemo1KeyDown
    Merci beaucoup pour l'aide, salutations
    Ardely

  2. #2
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations forums :
    Inscription : Février 2005
    Messages : 242
    Points : 63
    Points
    63
    Par défaut
    Salut,

    Bah je sais pas si j'ai bien compris tout ce que t'a dit mais avec l'évènement KeyDown on peut contrôler les touches A..Z normalement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TForm1.FMemo1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
      if Chr(Key) in ['A'..'Z'] then
        Key:=#0; { ou alors c'est Key:=0; , j'ai un doute }
      ...
    end;
    Après je sais pas si ca pourra t'aider.

  3. #3
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    321
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 321
    Points : 88
    Points
    88
    Par défaut
    Salut, tu as raison... mais si je fait ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    procedure TForm1.FMemo1KeyDown(Sender: TObject; var Key: Word;
     Key:=0;
    le code ne permet pas de déactiver les touches de A..Z, je ne sais pas pourquoi?

  4. #4
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut,

    C'est plutôt dans le OnKeyPress qu'il faut gérer cela :

    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
    begin
    if (Key in ['A'..'Z']) or (Key in ['a'..'z']) then
    Key:=#0;
    end;
    Ce code désactive les minuscule ainsi que les majuscules

  5. #5
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    321
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 321
    Points : 88
    Points
    88
    Par défaut
    Je suis d'accord avec toi pour d'éactiver les touches 'a..z' qu'il faut mettre dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
    mais dans cette procedure je ne peut pas déactiver par example la touche delete ou suppression

  6. #6
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Pour la touche de retour arrière c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
    begin
    if (Key in ['A'..'Z']) or (Key in ['a'..'z']) or (Key= #8) then
    Key:=#0;
    end;
    Par contre, je cherche comment utiliser les Virtuel Key, car pour la touche supp, il faut passer par la.

    Il faut regarde dans l'aide SDK Windows sous delphi et chercher Virtual Key ou VK_ ....

    Dès que j'ai une solution, je t'en fait part

  7. #7
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    321
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 321
    Points : 88
    Points
    88
    Par défaut
    Merci pour l'aide, mais je pense que ma fonction, ne fonctionne que dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    procedure TForm1.FMemo1KeyDown(Sender: TObject; var Key: Word;
    Je te explique très court pourquoi. Dans cette fonction je récupére une partie
    du text dans le Richedit que je transmet dans une variable de cette manière.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    var VG_str1 : String;
    begin
    VG_str1 := copy(Fmemo1.text,0,Selstart);
    Si je utilise la touche suppression, le caratère est supprimer dans VG_str1
    en utilisant cette evénement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
    mais si je utilise ma fonction dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    procedure TForm1.FMemo1KeyDown(Sender: TObject; var Key: Word;
    le caratère dans la variable VG_str1 n'est pas supprimer, qui est bien pour moi, ainsi après je peut faire une décision que je lui donne...

    Merci et bonne-soirée

  8. #8
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    321
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 321
    Points : 88
    Points
    88
    Par défaut
    Bonjours,
    Je viens de faire un teste tout simple qui ne fonctionne pas pour supprimer les
    caractéres, seul les touches flêches, suppressions fonctionne( ils sont déactiver biensûre).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    // example radicale de ne rien pouvoir écrire !
    procedure TForm1.RichEdit1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
    Key := 0;
    end;
    Comment dois-je faire pour ne pas avoir la possibilité d'écrire avec cette procedure.
    Merci beaucoup pour les informations, Salutations.

  9. #9
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    321
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 321
    Points : 88
    Points
    88
    Par défaut
    Bonsoir,
    Voici ce que je conclus:
    Dans un OnKeyDown, est appelé quand une des touches du clavier est pressée et agi seulement sur les codes non visuels. et ne réagit pas sur les caractères a..z ou 0..9
    Dans un OnKeyUP de même que OnKeyDown a l'exception que la touche réagit seulement en relâchant la touche.
    Dans un OnKeyPress, est appelé quand une touche est pressée et correspond à un code ASCI.

    Donc si je veux que les caractères a..z ne sois pas prise en compte je ne peut pas utiliser OnKeyDown ou OnKeyUP!!


    Salutations.

  10. #10
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Bonjour,

    Pour désactiver la prise en compte d'une touche-clavier par un tMémo ou un tRichEdit, etc il faut avant tout basculer à "True" la propriété "KeyPreview" de la Form qui contient le champ de saisie et dans ce cas c'est la Form qui intercepte l'évènement afin qu'il ne soit pas pris en compte dans le champ de saisie.

    Ensuite j'utilise une procédure du type suivant :

    procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
    Shift: TShiftState);
    begin
    // a) pour désactiver toutes les touches :
    key:=0;
    // b) pour ne désactiver que certaines touches :
    case key Of
    35 : {Touche Fin} key:=0;
    36 : {Touche Deb} key:=0;
    37 : {Flèche vers gauche} key:=0;
    38 : {Flèche vers haut} key:=0;
    39 : {Flèche vers droite} key:=0;
    40 : {Flèche vers bas} key:=0;
    46 : {Touche Suppr} key:=0;
    65..90 : {'A'..'Z'} key:=0;
    // et ainsi de suite
    //else Showmessage(IntToStr(key)); <-- me sert à vérifier la valeur de key associée à chaque touche
    end;
    end;

    En fait cette procédure n'a d'intérêt que si l'on ne veut désactiver que certaines touches, car pour verrouiller la modification du texte qui figure dans un RichEdit il suffit de mettre sa propriété ReadOnly (= Lecture seule) à True.

Discussions similaires

  1. Désactiver les touches Alt+TAB en plein écran
    Par Eric_M dans le forum VB.NET
    Réponses: 6
    Dernier message: 04/06/2010, 21h54
  2. Désactiver les CSS dans une div
    Par mouchkar dans le forum Mise en page CSS
    Réponses: 9
    Dernier message: 14/05/2008, 12h20
  3. Réponses: 1
    Dernier message: 22/09/2005, 20h46
  4. Désactiver les touches F1, F2, F3, F4, F5 dans IE
    Par ZiZouJH dans le forum Flash
    Réponses: 7
    Dernier message: 17/02/2003, 09h59

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