Remplacer un caractère par un autre

Résolu
gpletinckx Messages postés 40 Date d'inscription mardi 28 novembre 2006 Statut Membre Dernière intervention 3 août 2010 - 27 juil. 2010 à 11:12
gpletinckx Messages postés 40 Date d'inscription mardi 28 novembre 2006 Statut Membre Dernière intervention 3 août 2010 - 3 août 2010 à 15:47
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

Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
27 juil. 2010 à 16:04
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]
3
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
2 août 2010 à 17:19
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]
3
gpletinckx Messages postés 40 Date d'inscription mardi 28 novembre 2006 Statut Membre Dernière intervention 3 août 2010
3 août 2010 à 15:47
Magnifique, ça marche. Bon, j'avais posté dans les débutants aussi...

Encore merci.

G. PLETINCKX
3
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
27 juil. 2010 à 12:04
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 !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_pseudo3 Messages postés 268 Date d'inscription mardi 24 juillet 2007 Statut Membre Dernière intervention 2 février 2021 1
27 juil. 2010 à 14:36
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+.
0
cs_pseudo3 Messages postés 268 Date d'inscription mardi 24 juillet 2007 Statut Membre Dernière intervention 2 février 2021 1
27 juil. 2010 à 16:18
Re-Bonjour,

ouai mais il est pas terrible ce code

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

A+.
0
gpletinckx Messages postés 40 Date d'inscription mardi 28 novembre 2006 Statut Membre Dernière intervention 3 août 2010
2 août 2010 à 14:25
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
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
2 août 2010 à 15:00
Salut,

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


[hr]@+Cirec
[hr]
0
gpletinckx Messages postés 40 Date d'inscription mardi 28 novembre 2006 Statut Membre Dernière intervention 3 août 2010
2 août 2010 à 15:03
Désolé mais ça ne fonctionne pas

G. PLETINCKX
0
gpletinckx Messages postés 40 Date d'inscription mardi 28 novembre 2006 Statut Membre Dernière intervention 3 août 2010
2 août 2010 à 15:06
Où faut-il définir la procédure? Dans les procédures générales ou Private?

G. PLETINCKX
0
cs_pseudo3 Messages postés 268 Date d'inscription mardi 24 juillet 2007 Statut Membre Dernière intervention 2 février 2021 1
2 août 2010 à 17:08
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+.
0
Rejoignez-nous