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 :

Comment fermer une fenêtre quand la souris et clavier sont inactifs ?


Sujet :

Composants VCL Delphi

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2003
    Messages : 38
    Points : 30
    Points
    30
    Par défaut Comment fermer une fenêtre quand la souris et clavier sont inactifs ?
    bonjour tlm,

    J'aimerai fermer une fenetre lorsque la souris est inactive, pour cela j'utilise un Timer que je reinitialise lorsque je bouge la souris et si la souris ne bouge plus il devrait fermer la fenetre.

    Mais le probleme c est qu il n a pas l air de passer dans la procedure OnMouseMove et donc je n arrive pas a redefinir l'intervalle de mon timer et ferme d'office ma forme.




    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TFbiblio.TabSheet1MouseMove(Sender: TObject; Shift: TShiftState;
      X, Y: Integer);
    begin
     timer.Interval := 3;
    end;
     
    procedure TFbiblio.TimerTimer(Sender: TObject);
    begin
     Fbiblio.Close;
    end;

  2. #2
    Membre confirmé
    Avatar de lil_jam63
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 447
    Points : 600
    Points
    600
    Par défaut
    Fais plutot un test sur la position de ta souris dans l'evenement onTimer, si la position est toujours la même tu fermes, sinon tu réinitialises, l'evenement onMouseMove se produit seulement quand la souris passe au dessus de ton controle.
    ----------------------------------------------------
    Avant de poster, pensez à utiliser les différents outils à votre disposition:
    Google, la FAQ et le moteur de recherche.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2003
    Messages : 38
    Points : 30
    Points
    30
    Par défaut
    je fais ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    var Poscurseur : Tpoint;
     
    procedure TFbiblio.FormActivate(Sender: TObject);
    begin
     GetCursorPos(Poscurseur);
    end;
     
    procedure TFbiblio.TimerTimer(Sender: TObject);
    var newposcurseur : Tpoint;
    begin
      GetCursorPos(newposcurseur);
      if newposcurseur = Poscurseur then Fbiblio.Close;
    end;
    au moment du " if newposcurseur = Poscurseur " --> type incompatible alors que c est 2 Tpoint :s

  4. #4
    Membre confirmé
    Avatar de lil_jam63
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 447
    Points : 600
    Points
    600
    Par défaut
    Fais le test directement sur les valeurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    procedure TForm1.FormActivate(Sender: TObject);
    begin
      GetCursorPos(PosCurseur);
    end;
     
    procedure TForm1.Timer1Timer(Sender: TObject);
    var
      newposcurseur : Tpoint;
    begin
      GetCursorPos(newPosCurseur);
      if (newPosCurseur.X = PosCurseur.X) and (newPosCurseur.Y = PosCurseur.Y) then Close
      else GetCursorPos(PosCurseur);
    end;
    ----------------------------------------------------
    Avant de poster, pensez à utiliser les différents outils à votre disposition:
    Google, la FAQ et le moteur de recherche.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2003
    Messages : 38
    Points : 30
    Points
    30
    Par défaut
    Exellent ca marche.

    merci lil_jam63 pour ta solution et la rapidité de reponse



    youhouuu :p


    pour que se soit complet voila la soluce

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
      GetCursorPos(newposcurseur);
      if ((newposcurseur.X = Poscurseur.X) and (newposcurseur.Y = Poscurseur.Y))
      then Fbiblio.Close
      else begin
       Poscurseur.X := newposcurseur.X;
       Poscurseur.Y := newposcurseur.Y;
       timer.Interval := 20000;
      end;

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2003
    Messages : 38
    Points : 30
    Points
    30
    Par défaut
    J'ai oublier de penser a une chose, je ne dois pas gerer que le curseur mais aussi le clavier, si il est occuper d'écrire dans une edit ou autre, je doit pouvoir réenitialier mon compteur !

    est ce possible avec un evenement de la forme?


    ps : il y a un evenement onkeypress de la form, mais ca ne marche pas

  7. #7
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Citation Envoyé par Goldenkiller
    ps : il y a un evenement onkeypress de la form, mais ca ne marche pas
    T'as pensé à mettre la propriété "KeyPreview" de ta TForm à la valeur "True" ?
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2003
    Messages : 38
    Points : 30
    Points
    30
    Par défaut
    Merci Mac LAK, effectivement je en l'ai pas mis a True.

    Bon j'ai du rajouter 1 compteur. Donc j en ai un pour les touches et pour le curseur de la souris. Je pense que cela fonctionne bien. Logiquement si mon programme est inactif, il se fermera apres 40sec.

    Merci à vous 2

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    var Poscurseur : Tpoint;
     
    procedure TFbiblio.FormActivate(Sender: TObject);
    var i : byte;
    begin
     TimerCurseur.Interval := 30000;
     TimerTouche.Interval := 10000;
     TimerTouche.Enabled := True;
     GetCursorPos(Poscurseur);
    end;
     
    procedure TFbiblio.TimerCurseurTimer(Sender: TObject);
    var newposcurseur : Tpoint;
    begin
      if Bfermsess then begin
       GetCursorPos(newposcurseur);
       if ((newposcurseur.X = Poscurseur.X) and (newposcurseur.Y = Poscurseur.Y))
       then  Fbiblio.Close
       else begin
        Poscurseur.X := newposcurseur.X;
        Poscurseur.Y := newposcurseur.Y;
        TimerCurseur.Interval := 30000;
       end;
      end;
    end;
     
    procedure TFbiblio.FormKeyPress(Sender: TObject; var Key: Char);
    begin
     //Mettre le KeyPreview a True dans la propriete de la forme
     GetCursorPos(Poscurseur);
     TimerCurseur.Interval := 30000;
     TimerTouche.Interval := 10000;
     Bfermsess := false;
    end;
     
    procedure TFbiblio.TimerToucheTimer(Sender: TObject);
    begin
     GetCursorPos(Poscurseur);
     Bfermsess := True;
     TimerCurseur.Interval := 30000;
     TimerCurseur.Enabled := True;
    end;
     
    procedure TFbiblio.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
     TimerCurseur.Enabled := False;
     TimerTouche.Enabled:= False;
    end;

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

Discussions similaires

  1. Comment fermer une fenêtre Child dans une application MDI
    Par bahiatoon dans le forum C++Builder
    Réponses: 9
    Dernier message: 05/10/2006, 08h57
  2. Comment fermer une fenêtre externe à l'application ?
    Par Matt2094 dans le forum Delphi
    Réponses: 8
    Dernier message: 30/08/2006, 16h52
  3. Comment fermer une fenêtre dynamique avec onclose
    Par nopnop dans le forum Delphi
    Réponses: 23
    Dernier message: 18/07/2006, 18h08
  4. Réponses: 4
    Dernier message: 08/05/2006, 16h41
  5. Comment fermer une fenêtre enfant MDI ?
    Par DeveloMagaly dans le forum Composants VCL
    Réponses: 2
    Dernier message: 30/09/2005, 13h10

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