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

 Delphi Discussion :

Contrôle de la forme avec la touche Escape


Sujet :

Delphi

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 450
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 450
    Points : 1 336
    Points
    1 336
    Par défaut Contrôle de la forme avec la touche Escape
    Bonjour à toutes et à tous,

    J'utilise un Tbutton à deux états sur ma fiche, un état pour fermer ma fiche avec "Application.minimize" et activer un timer et l'autre pour stopper le timer mais je dois cliquer sur la fiche qui se trouve dans la barre de tache pour la restaurer et appuyer sur le bouton "STOP".

    Serait t'il possible avec la touche "Escape" de rendre à ma fiche son état windowState := wsnormal pour me permettre d'appuyer sur ce bouton "STOP" ou de le faire en même temps.

    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
    25
    26
    27
    28
    29
     
    procedure TFenregistre.BfilmerClick(Sender: TObject);
    begin
     
      if Bfilmer.Caption<>'Stop' then begin
     
      Application.minimize;
     
      memo1.Clear;
     
      Bfilmer.Caption:='Stop';
      timer1.Enabled:=true;
     
      end;
     end
     else begin
     
      {if Key = VK_ESCAPE then
      windowState := wsnormal; }
     
     timer1.Enabled:=false;
     
      Bfilmer.Caption:='Filmer';
     
     windowState := wsnormal;
     Application.ProcessMessages;
     
     end;
    end;
    J'ai essayé plusieures possibilités avec la touche VK_ESCAPE sans résultat.

    Même en mettant KeyPreview à true.

    Merci d'avance,

    @+,

    Cincap

  2. #2
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 290
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 290
    Points : 1 941
    Points
    1 941
    Par défaut
    et en appelant BfilmerClick dans le OnKeyPress si Key=VK_Escape?

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Février 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 141
    Points : 142
    Points
    142
    Par défaut
    Salut,

    Je ne suis pas sûr d'avoir compris tous les détails de ta question.

    Si tu veux que appuyer sur échap fasse la même chose que de réafficher la fenêtre de ton application et de cliquer sur le bouton 'stop', c'est dans le OnKeyDown de ton application que tu devrais le gérer, non?

    *LeGEC*

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 450
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 450
    Points : 1 336
    Points
    1 336
    Par défaut Fonctionne pas déjà essayé
    @Linkin, l'instruction suivante :

    if Key = VK_Escape then BfilmerClick(Sender);
    ne fonctionne que dans l'événement OnKeyDown, sinon excellente suggestion mais j'avais déjà essayé.

    @LeGEC, ne pas oublier que lorsque la fiche est minimisée, elle perd le focus.

    Merci de vos réponses,

    @+,

    Cincap

  5. #5
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 757
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 757
    Points : 13 353
    Points
    13 353
    Par défaut
    La façon la plus élégante serait l'emploi de RegisterHotKey pour hooker la touche (ou la combinaison de touches) lorsque ton application est minimizée.

    Et UnregisterHotkey lorsqu'elle redevient active.

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 450
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 450
    Points : 1 336
    Points
    1 336
    Par défaut Bien vu !
    @ Andnotor, bien vu l'ami en déclarant une procédure privée.

    Je teste et je vous tiens au courant.

    @+,

    Cincap

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 450
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 450
    Points : 1 336
    Points
    1 336
    Par défaut Désolé, j'ai du m'absenter !
    Voila, tout est ok pour moi même l'activation du bouton "STOP".

    Je cloture ce topic.

    Merci à Andnotor de m'avoir mis sur la voie.

    @ Tous, Merci.

    @+,

    Cincap

  8. #8
    Membre éclairé Avatar de peter27x
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 029
    Points : 757
    Points
    757
    Par défaut
    Hello,

    je voulais savoir comment fonctionnait ce "RegisterHotKey" ? Car j'ai voulu voir ça dans l'aide de Delphi et padawan, nada...

    Hors, ça a l'air très intéressant.

    Merci.

  9. #9
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 290
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 290
    Points : 1 941
    Points
    1 941
    Par défaut
    C'est une API Windows, donc soit l'aide du sdk, soit mdsn.

  10. #10
    Membre éclairé Avatar de peter27x
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 029
    Points : 757
    Points
    757
    Par défaut
    Citation Envoyé par Linkin Voir le message
    C'est une API Windows, donc soit l'aide du sdk, soit mdsn.


    ok, c'est comme pour postThreadMessage quoi !

    Merci.

  11. #11
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut,

    Voici un peu d'explications pour l'utilisation de RegisterHotKey.

    Dans la partie private de la Form, il faut ajouter ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    hotkey1: Integer;
    procedure WMHotKey(var Msg : TWMHotKey); message WM_HOTKEY;
    Ensuite, on implémente la procédure WMHotKey :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TForm1.WMHotKey(var Msg: TWMHotKey);
    begin
      if msg.HotKey = hotkey1 then
      begin
        // On définit les action à faire, ici, je restaure ma form
        Application.Restore;
        SetForegroundWindow(Self.Handle);
      end;
    end;
    Pour terminer, on compléte le OnCreate ainsi que OnDestroy de la form :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TForm1.FormCreate(Sender: TObject);
    const MOD_CONTROL = 2; // Touche Control nécessaire
    begin
      hotkey1 := GlobalAddAtom('Hotkey1');
      RegisterHotKey(handle, hotkey1, MOD_CONTROL,VK_F1);
    end;
     
    procedure TForm1.FormDestroy(Sender: TObject);
    begin
      UnRegisterHotKey(handle, hotkey1); // Désactive le HotKey
    end;
    Voilà en gros le principe.
    En espérant t'avoir aidé
    A+

  12. #12
    Membre éclairé Avatar de peter27x
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 029
    Points : 757
    Points
    757
    Par défaut
    Citation Envoyé par ero-sennin Voir le message
    ...

    Voilà en gros le principe.
    En espérant t'avoir aidé
    A+
    Oui, merci bien !

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 11/02/2010, 16h04
  2. Touche ESCAPE dans une Windows.Form
    Par tchoimars dans le forum Windows Forms
    Réponses: 2
    Dernier message: 13/02/2008, 11h04
  3. [] plusieurs instances de form avec leur contexte ?
    Par Seb-31 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 11/04/2003, 13h56
  4. probleme avec la touche F10
    Par b.grellee dans le forum Langage
    Réponses: 2
    Dernier message: 15/09/2002, 22h04
  5. Shortcut avec plusieurs touches
    Par scorpiwolf dans le forum C++Builder
    Réponses: 4
    Dernier message: 06/07/2002, 15h57

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