Raccourcis généralisés

Description

Le but est de gérer des raccourcis clavier et/ou souris quelconques.
( comme CTRL+A+BoutonGauche )

La méthode est pour l'instant "brutte". J'en ferais peut-être une version plus facile à utiliser voir sous forme de composant plus tard.

Il faut ajouter un composant ApplicationEvents à la fiche et ajouter le code ci-dessous.
Il faut créer la procédure FaitRaccourci comme ci-dessous.

Dans le MessageEvents1Message placer les tests liés à vos raccourcis voulus. En appelant à chaque fois un PostMessage(Form1.Handle,WM_APP,x,0) ou x sera une valeur différente pour chaque raccouci.
Dans Fait raccourci() effectuez les actions correspondantes aux valeur x du message WM_APP

Source / Exemple :


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, AppEvnts, StdCtrls;

type
  TForm1 = class(TForm)
    ApplicationEvents1: TApplicationEvents;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    procedure ApplicationEvents1Message(var Msg: tagMSG;
      var Handled: Boolean);
    procedure FaitRaccourci(Var Mess:TMessage);Message WM_APP;
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;

var
  Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
Var Etat:Array[0..255]Of Boolean;
    i   :Integer;
begin
  // On ne traite pas les messages, on ne fait que regarder
  Handled:=False;

  // Souris ou clavier à changé : on regarde les touches enfoncées
  If (Msg.message =WM_LBUTTONDOWN)Or
     (Msg.message =WM_RBUTTONDOWN)Or
     (Msg.message =WM_KEYDOWN    )
  Then Begin
  // Lecture de l'état de toutes les touches ( y compris les boutons )
    For i:=0 To 255 Do Etat[i]:=(GetAsyncKeyState(i) and 32768) <> 0;
  // Test des raccourcis
  // On n'effectue pas ici les traitements pour ne pas ralentir la gestion des messages
  // de plus les ShowModal ne passent pas du tout ici. Un message APP est envoyé à la fenêtre
  // principale qui elle se chargera du traitement
         If Etat[Byte('A')]And Etat[VK_LBUTTON]And Not Etat[VK_SHIFT] Then PostMessage(Form1.Handle,WM_APP,1,0)
    Else If Etat[Byte('D')]And Etat[VK_RBUTTON]                       Then PostMessage(Form1.Handle,WM_APP,2,0)
    Else If Etat[Byte('E')]And Etat[VK_RBUTTON]                       Then PostMessage(Form1.Handle,WM_APP,3,0);
  End;
end;

// Cette procédure est indirectement appelée par le gestionnaire des messages suite à une détection de raccourci
Procedure TForm1.FaitRaccourci(Var Mess:TMessage);
Begin
  // Traitement des raccourcis détectés
  Case Mess.wParam Of
    // Dans le cas d'un ShowModal il faut tester que la fiche n'est pas déjà visible.
    // Sinon il y a une erreur si elle est visible.
    1:If Not Form2.Visible Then Form2.ShowModal;
    2:Color:=clBlue;
    3:Color:=clRed;
  End;
End;

end.

Conclusion :


Cette source et quelques autres sur : http://nono40.developpez.com

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.