IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants VCL Delphi Discussion :

TCustomControl et évènements KV_LEFT et VK_RIGHT


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    bjl
    bjl est déconnecté
    Membre chevronné Avatar de bjl
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : Brésil

    Informations forums :
    Inscription : Décembre 2002
    Messages : 263
    Par défaut TCustomControl et évènements KV_LEFT et VK_RIGHT
    Bonjour,

    J'aimerais conserver le focus sur un TcustomControl lors des appuis sur les touches Left ou Right (comme dans un Tedit). J'ai essayé de surcharger le WndProc du TcustomControl, mais çà ne fonctionne pas : La form exploite l'évènement auparavant et le Tcustomcontrol perd le focus. Y'a t'il une propriété permetant au Control de recevoir les évènements VK_Left et VK_RIGHT ?

  2. #2
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Par défaut
    Salut

    tu fais comment pour les intercepter VK_right et VK_Left?
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  3. #3
    Invité
    Invité(e)
    Par défaut
    Avec OnKeyUp et OnKeyDown !
    Tu récupère la touche enfoncée ou relachée et tu gères à partir de là !
    Par contre, il ne faut pas que la propriété KeyPreview de ta Form soit à False, sinon, la form intercepte l'évenement...

    J'espère avoir répondu à ta question!

  4. #4
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Par défaut
    Mais est-ce que tu veux que ton contrôle intercepte ces évènements quel que soit l'objet en focus?
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  5. #5
    bjl
    bjl est déconnecté
    Membre chevronné Avatar de bjl
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : Brésil

    Informations forums :
    Inscription : Décembre 2002
    Messages : 263
    Par défaut
    Bonjour,

    Jérome >> Le propriété KeyPreview de la Form est déjà à false.

    Pedro >>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure TEssControl.wndProc(Var msg : Tmessage);
    Begin
    If msg.msg  =  WM_KEYDOWN  then
      Begin
      case msg.WParam of
        VK_LEFT : ...............
        VK_RIGHT : ..................
        End;
      msg.msg := 0;
      End;
     
    inherited WndProc(msg);
    End;
    Je ne veux qu'il intercepte ces évènements que s'il a le focus.

  6. #6
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Par défaut
    Mouais
    t'as testé si ta condition WM_Keydown était vérifiée?
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  7. #7
    bjl
    bjl est déconnecté
    Membre chevronné Avatar de bjl
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : Brésil

    Informations forums :
    Inscription : Décembre 2002
    Messages : 263
    Par défaut
    Oui,

    Avec VK_RETURN, et çà fonctionne. Par contre avec les touhes VK_LEFT et VK_RIGHT, le control perd le focus avant de recevoir le message.

    En plus, j'ai essayé avec un TcustomEdit (qui descend lui aussi de TwinCOntrol) et çà marche avec VK_LEFT et VK_RETURN. Il doit y avoir une propriété dans le TcustomEdit qui permet d'indiquer à l aform qu'elle doit laisser passer le message

  8. #8
    bjl
    bjl est déconnecté
    Membre chevronné Avatar de bjl
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : Brésil

    Informations forums :
    Inscription : Décembre 2002
    Messages : 263
    Par défaut
    Je crois avoir trouvé le réponse dans le SDK Windows à 'Control Messages'.

    Les clefs TAB et arrow ne sont pas traitées comme des clefs standards.
    sur action clavier, Un message WM_GETDLGCODE est envoyé au controle
    afin de savoir s'il utilise ces clefs.
    Selon la réponse, le message WM_KEYDOWN est envoyé.

    Ceci n'impacte pas les touches standards

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
      Protected
        Procedure WndProc(var msg : TMessage); override;
        Procedure KeyDown(var Key: Word; Shift: TShiftState); override;
     
     
    procedure TEssControl.wndProc(Var msg : Tmessage);
    Begin
    If  msg.msg = WM_GETDLGCODE Then
      begin
      msg.Result :=  DLGC_WANTARROWS; // indique que le controle utilise les clefs Arrow
      Exit; 
      End;
    inherited WndProc( msg );
    End;
     
    Procedure TEssControl.KeyDown(var Key: Word; Shift: TShiftState);
    Begin
    Inherited KeyDown( Key, shift );
      case Key of
        VK_LEFT : ................
        VK_RIGHT : ................
      End;
    End;
    Pour les Tabs seuls , msg.Result := DLGC_WANTTAB;

    Jérome, Pedro >> merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 20/08/2009, 18h56
  2. Pas d'événement OnClose quand on arrête W2K
    Par Altau dans le forum C++Builder
    Réponses: 9
    Dernier message: 26/01/2009, 18h36
  3. exploiter un évènement d'un sous composant dans un
    Par bjl dans le forum Composants VCL
    Réponses: 2
    Dernier message: 20/12/2002, 16h44
  4. Modification de l'évènement OnClick
    Par MrJéjé dans le forum C++Builder
    Réponses: 9
    Dernier message: 22/08/2002, 12h52
  5. Redéfinir l'événement OnExit de mon composant TEditFloat
    Par Seb des Monts dans le forum C++Builder
    Réponses: 5
    Dernier message: 18/06/2002, 16h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo