Remplacer un caractère par un autre [Résolu]

Signaler
Messages postés
40
Date d'inscription
mardi 28 novembre 2006
Statut
Membre
Dernière intervention
3 août 2010
-
Messages postés
40
Date d'inscription
mardi 28 novembre 2006
Statut
Membre
Dernière intervention
3 août 2010
-
Bonjour,

Je voudrais que lors de la frappe du caractère apostrophe ou du caractère point-virgule, ceux-ci soient remplacés par un espace.
J'ai réalisé un petit code qui remplace un retour-ligne par un tab:

Procedure TFPP.CMDialogKey(Var Msg : TWMKey) ;
Begin
  If Not (ActiveControl Is TButton) Then
    If Msg.Charcode = VK_RETURN Then
      Msg.Charcode := VK_TAB ;
  Inherited ;
End ;

J'utilise Delphi 7.
Comment faire?

Bien à vous,

G. PLETINCKX

11 réponses

Messages postés
3818
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
18 septembre 2020
34
ouai mais il est pas terrible ce code


celui-ci fait la même chose à ceci prêt, qu'il intercepte et modifie la touche avant que les autres composants ne reçoivent le message

[hr]procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);

[b]begin
  if /b(Key =  '''')  or  (Key  = ';')[b]then
    /bKey := #32
  [b]else
  if /bKey = #13 [b]then
    /bKey := #9;
end;
[hr]


avec ton code par contre c'est l'inverse ...
Si tu places un TMemo sur ta fiche et tu essayes de taper ces caractères "'" & ";" tu verras qu'ils s'y affichent quand même !!

[hr]@+Cirec
[hr]
Messages postés
3818
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
18 septembre 2020
34
je crois que je sais pourquoi ça ne fonctionne pas ... tu as tout simplement copié le code dans ton projet sans rien relier !!!

"FormKeyPress" est un évènement de ta Form (TFPP) il faut donc passer par l'inspecteur d'objets ... onglet évènements cliquer à droite de "OnKeyPress" sur la flèche et sélectionner "FormKeyPress"

si tu vois pas cette procédure dans ce combobox
tu commences par supprimer la déclaration :
procedure FormKeyPress(Sender: TObject; var Key: Char);

et son implémentation .. tu retournes dans l'inspecteur d'objets ... onglet évènements tu double cliques à droite de "OnKeyPress" dans la zone "Edit" tout se crée automatiquement et t'as plus qu'à compléter avec le code


[hr]@+Cirec
[hr]
Messages postés
40
Date d'inscription
mardi 28 novembre 2006
Statut
Membre
Dernière intervention
3 août 2010

Magnifique, ça marche. Bon, j'avais posté dans les débutants aussi...

Encore merci.

G. PLETINCKX
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
8
Salut,
tu peux obtenir les touches de code virtuelle ici ici. Ensuite, je pense que ord('''') et ord(';') marche bien aussi, mais je n'ai pas testé.

Cordialement, Bacterius !
Messages postés
267
Date d'inscription
mardi 24 juillet 2007
Statut
Membre
Dernière intervention
7 juin 2018

Bonjour,

Manque de bol "ord('''') et ord(';')" ne marchent pas.

Le code suivant testé marche :

// Mettre la proprité KeyPreview de Form1 à true (interception des événements-clavier) et créer la procedure suivante :

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin     case Key of
               VK_RETURN : Key := VK_TAB;
          end;

          if (Not (ssShift in sHIFT)) // Point-virgule = minuscule
          and (key=190) // Touche point et point-virgule
          then begin showmessage('point virgule'); Key:=VK_Space; end;

          if (GetAsyncKeyState(VK_RMENU)<>0) // Touche AltGr à droite
          and (Key=52) // Touche de l'apostrophe et du 4
          then begin showmessage('apostrophe'); Key:=VK_Space; end;

          showMessage(chr(key));  
end;


A+.
Messages postés
267
Date d'inscription
mardi 24 juillet 2007
Statut
Membre
Dernière intervention
7 juin 2018

Re-Bonjour,

ouai mais il est pas terrible ce code

... effectivement le tien est bien meilleur pour ce cas.

A+.
Messages postés
40
Date d'inscription
mardi 28 novembre 2006
Statut
Membre
Dernière intervention
3 août 2010

Désolé mais ton code ne semble pas fonctionner. Je l'ai installé dans mon programme, je n'ai pas d'erreur mais lorsque j'écrits dans un champ TDbedit, les apostrophes ou point-virgules restent.

Voici un morceau de mon code:

    procedure FormKeyPress(Sender: TObject; var Key: Char);

  private
    { Déclarations privées }
    Procedure CMDialogKey(Var Msg : TWMKey) ; message CM_DIALOGKEY ;
    
  public
    { Déclarations publiques }
    cb3, erreur, ctl1, ctl2, cpt1, cpt2, cpt3 : Integer ;
    cb2, cbrest : Int64 ;
    PPT, Fen, cb1, Proven, Comp : String ; // Proven = provenance PP pr Décision
    PPAN, PPNU : Integer ;
    PPOR, PPPRO : String ;
    mand1, mand2, mand3, mand4, mand5, mand6, mand7, mand8, mand9 : String;
  End ;

Var
  FPP : TFPP ;

Implementation

Uses Calis, Bien, SelPP, VicPropPP, PersMor, Datas, Datas1, Decision, Admin,
  PaiePP, FSupprPP, Mandat ;

{$R *.dfm}

Procedure TFPP.CMDialogKey(Var Msg : TWMKey) ;
Begin
  If Not (ActiveControl Is TButton) Then
    Begin
      If Msg.Charcode = VK_RETURN Then
        Msg.Charcode := VK_TAB ;
    End;
  Inherited ;
End ;

procedure TFPP.FormKeyPress(Sender: TObject; var Key: Char);
begin
  if (Key '''') or (Key ';')then
    Key := #32
  else
  if Key = #13 then
    Key := #9;
end;


Bien à toi,

G. PLETINCKX
Messages postés
3818
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
18 septembre 2020
34
Salut,

il faut mettre la propriété "KeyPreview" de la Form (TFPP) à True
et ça devrait aussi fonctionner


[hr]@+Cirec
[hr]
Messages postés
40
Date d'inscription
mardi 28 novembre 2006
Statut
Membre
Dernière intervention
3 août 2010

Désolé mais ça ne fonctionne pas

G. PLETINCKX
Messages postés
40
Date d'inscription
mardi 28 novembre 2006
Statut
Membre
Dernière intervention
3 août 2010

Où faut-il définir la procédure? Dans les procédures générales ou Private?

G. PLETINCKX
Messages postés
267
Date d'inscription
mardi 24 juillet 2007
Statut
Membre
Dernière intervention
7 juin 2018

Bonjour,

A mon avis la Procedure TFPP.CMDialogKey(Var Msg : TWMKey) est devenue superflue du fait de l'existence de la procedure TFPP.FormKeyPress();

A+.