TShiftState de FormKeyDown de la form

cs_MohInfo Messages postés 58 Date d'inscription mardi 24 avril 2007 Statut Membre Dernière intervention 14 juin 2011 - 22 avril 2011 à 22:03
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 - 24 avril 2011 à 17:00
Bonsoir à tous

lors de l'utilisation de l'évènement FormKeyDown de ma form (FormStyle = fsMDIForm)je veux faire un raccourci clavier pour chaque bouton (TspeedButton)de la barre d'outils de mon application par exemple : pour le bouton nouveau je fais [Ctrl+N] et ainsi de suite ... le problème c'est que ce raccourci marche uniquement avec le premier bouton et les autres raccourcis des autres speedButton ne marche plus !!! :
voila mon code

If Shift = [ssCtrl] Then
If (Key 78) or (Key 110)Then
Begin
with TNewDocument.Create(nil) do
Try
ShowModal;
Finally
Free;
End;
End
Else
If Shift = [ssCtrl] Then
If (Key 83) or (Key 115)Then
Begin
with TStatistiques.Create(Nil) do
Try
ShowModal;
Finally
Free;
End;
End
....
merci bien pour votre aide

3 réponses

f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
24 avril 2011 à 04:12
utilise les propriétés Shortcut des menus.

________________________________________________________
besoin de câbles audio, vidèo, informatique pas cher ?
0
cs_MohInfo Messages postés 58 Date d'inscription mardi 24 avril 2007 Statut Membre Dernière intervention 14 juin 2011
24 avril 2011 à 13:31
tous d'abord il faut dire salut
puis
il faut comprendre la question pour savoir répondre
moi je veux exploiter le[ctrl+une touche] dans la barre des tache et non dans la barre des menus ok puis il y a une solution trés simple que l'utilisation des barre des menu c'est l'exploitation de la touche [Alt+une touche]
tous simplement en met & avant la lettre que je veux l'exploiter puis faire Alt+ lettre et c'est tous,
mais moi je veux [crtl+une touche]
merci pour votre participation...
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
24 avril 2011 à 17:00
en premier lieu, tu parle de barre d'outils, puis de barre des taches. à toi d'être clair dans tes propos.

un menu (TMainMenu / TMenuItem) ne se coltine pas aux simple ALT+Key, il peut aussi accepter les CTRL, SHIFT, CTRL+ALT
par défaut si l'on place un symbole "&" devant un nom de menu Delphi lui assigne un raccourcis standards ALT+Lettre :
&Fichier, &Edit, &Aide, &Outils etc.
Rien ne nous oblige à utiliser cette convention, car on peut redéfinir comme bon nous semble le raccourcis dans la propriété ShortCut du MenuItem.

dans ton code (non indenté donc ne facilitant pas la lecture) il y a une erreur de construction du IF :

if SHIFT [ssCTRL] then ... else if SHIFT [ssCTRL] then ...

donc seul la première condition s’exécute puisque les conditions sont identique, delphi exécute la première et ignore la seconde.

voici une correction fonctionnelle à placer dans le gestionnaire d’événement OnShortCut de la fiche:

procedure TForm1.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
var
  ShiftState: TShiftState;
begin
  ShiftState := KeyDataToShiftState(Msg.KeyData);

  if [ssCTRL] = ShiftState then // CTRL+Key
  begin

    case Msg.CharCode of
      78,110: // Ctrl+n or Ctrl+N
      begin
        showMessage('CTRL+N');

        handled := true;
      end;{/78,110}

      83,115: // Ctrl+s or Ctrl+S
      begin
        showMessage('CTRL+S');

        handled := true;
      end;{/83,115}

    end;{/case}

  end;{/if}
end;  





________________________________________________________
besoin de câbles audio, vidèo, informatique pas cher ?
0
Rejoignez-nous