Combinaison des touches [Résolu]

Signaler
-
 hazovato -
Bonjour,
J'ai un programme sous Delphi 7 pour copier les données dans une grille
SI j'enfonce ctrl + C, le programme fait une action.

procedure Tw_fd.JvDBUltimGrid1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
       if (ssCtrl in Shift) and (Key = Ord('C')) then
       begin
             // ACTION ......
       end;
end;


Mon souci c'est que si j'enfonce Ctrl + C, ça ne marche pas, mais si j'enfonce Ctrl + Alt + C, ça marche.
Pourquoi ?
Merci !

3 réponses

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

C'est un problème lié à l'utilisation de la JVCL ... un petit teste rapide avec une TStringGrid prouve que ça fonctionne:
procedure Tfrm_IMCMain.StringGrid1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if ([ssCtrl] = Shift) and (Key = Ord('C')) then
  begin
    Caption := 'Ok';
  end;
end;


et cette version ne régit pas avec un Ctrl + Alt + C

Cordialement,
Merci pour la réponse Cirec.
Ce qui m’étonne c'est que dans un même application, il y a des grilles qui répondent a Ctrl + C et d'autre Ctrl + Alt + C
Or c'est la même version de JVCL (Version 3.00)
A fait, si je met( [ssCtrl] = Shif), dans la grille ou Ctrl + Alt + C marche avant ne marche pas.
Es-ce que le problème lié à l'utilisation de la JVCL est aléatoire ou chronique !!!! .
Merci beaucoup.
Merci pour la réponse Cirec.
Ce qui m’étonne c'est que dans un même application, il y a des grilles qui répondent a Ctrl + C et d'autre Ctrl + Alt + C
Or c'est la même version de JVCL (Version 3.00)
A fait, si je met( [ssCtrl] = Shif), dans la grille ou Ctrl + Alt + C marche avant ne marche pas or le Ctrl + C ne marche pas non plus.
Es-ce que le problème lié à l'utilisation de la JVCL est aléatoire ou chronique !!!! .
Merci beaucoup.
Messages postés
3818
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
18 septembre 2020
34
Ce qui m’étonne c'est que dans un même application, il y a des grilles qui répondent a Ctrl + C et d'autre Ctrl + Alt + C
si c'est exactement le même type de grille alors ça veut dire que le problème se trouve peut être dans une option ou autre propriété (voir dans l'inspecteur d'objets pour comparer les deux)
A fait, si je met( [ssCtrl] = Shif), dans la grille ou Ctrl + Alt + C marche avant ne marche pas or le Ctrl + C ne marche pas non plus.
ça c'est normal TShiftState est un Set Of:
TShiftState = set of (ssShift, ssAlt, ssCtrl,
ssLeft, ssRight, ssMiddle, ssDouble);
Shift peut donc contenir 1 ou plusieurs de ces états.
Donc en faisant que
if (ssCtrl in Shift) ...
tu testes seulement la présence de ssCtrl dans "in" Shift
c'est pas bon et c'est pour ça que Ctrl + Alt + C fonctionne ainsi que Ctrl + Shift + Alt + C etc. etc.

Donc pour être certain de ne régir qu'à la bonne combinaison de touches il faut procéder comme ceci:
begin
  if (Shift = [ssCtrl, ssAlt]) and (Key = Ord('C')) then
    Caption := 'Ctrl + Alt + C'
  else
  if (Shift = [ssCtrl, ssShift]) and (Key = Ord('C')) then
    Caption := 'Ctrl + Maj + C'
  else
  if (Shift = [ssCtrl]) and (Key = Ord('C')) then
    Caption := 'Ctrl + C'
  else
    Caption := '';
end;


pour le reste je ne peux pas répondre avant de savoir si ce sont les mêmes Objets (Composants) avec les même propriétés !!!

Cordialement,
Bonjour et encore merci Cirec.
Apparemment, je pense que le problème est lié non pas aux grilles mais à l'application qui les contiennent.
Il y a 2 applications où Ctrl + C marche (Appelons ACC) et une autre où Ctrl + Alt + C marche (Appelons ACAC).
Si je copier la grille dans ACAC et la copier dans ACC et avoir remplacer juste Data.source, Ctrl + C marche sans problème.
Par contre, si je copie la grille dans ACC et la copier dans ACAC et avoir remplacer aussi Data.source, Ctrl + C ne marche pas du tout.
Merci d'avoir user de ton temps mais pour aller plus vite, je vais utiliser PopupMenu qui fera l'affaire.
A +