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 :

Fermer une fenêtre au bout d'un certain temps.


Sujet :

Composants VCL Delphi

  1. #1
    Nouveau membre du Club
    Profil pro
    Directeur
    Inscrit en
    Avril 2003
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Directeur

    Informations forums :
    Inscription : Avril 2003
    Messages : 34
    Points : 32
    Points
    32
    Par défaut Fermer une fenêtre au bout d'un certain temps.
    Ce que je veux faire est dans le titre.
    Je veux fermer une fenêtre d'un programme si l'utilisateur ne l'a pas utilisé pendant un certain temps.
    J'utilise donc un timer pour fermer le fenêtre.
    Je voudrai éviter de créer des méthodes onKeyDown onMouseDown et onMouseMove pour chaque composant de la fenêtre mais esce possible : .
    Peut-être en utilisant les messages windows? mais j'avoue que je ne suis pas très à l'aise avec.
    Merci pour vos conseils

  2. #2
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Début de solution
    Salut.

    Tu déclenches ton TIMER dans l'évènement OnDeactivate de ta FORM. Ainsi, des que l'utilisateur bascule sur un autre programme (donc ne se sert plus du tien !), le TIMER se déclenche. Tu le remets à zéro (ou le stoppe carrément) dans l'évènement OnActivate de ta FORM.

    Reste le cas ou l'utilisateur quitte son siège en laissant ton programme en fenetre active. Dans ce cas, tu testes uniquement le OnMouse... de ta FORM et tu stoppes le TIMER des que quelque chose bouge. Ca serait surprenant que l'utilisateur bouge la souris sans passer au dessus de la FORM à un moment ou à un autre. J'ai juste peur que faire ca ralentisse le programme puisque tu vas éxécuter la procédure tout le temps. Pour l'instant, je n'ai pas d'autre idée pour ce cas.

    Yohann
    Donnes un poisson à un homme, il fera un repas
    Apprends lui à pecher, il mangera tous les jours
    Mao

  3. #3
    Membre averti Avatar de charly
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 329
    Points : 358
    Points
    358
    Par défaut
    je ne vois pas le probleme , tu lance le timer pour un certain temps , et tu le remet a zero pour le onmousemove de la form , sa deverais aller non ?
    6*8 =42

  4. #4
    Expert éminent sénior

    Avatar de Nono40
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    8 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Loir et Cher (Centre)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 8 640
    Points : 19 101
    Points
    19 101
    Par défaut
    Voici une solution basée sur les messages ( ce qui évite la gestion pour chaque composant ). Tu places sur ta fiche uncomposant TApplicationEvents et un Timer.

    Dans l'évènement OnMessage du TapplicationEvents tu mets le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TForm2.ApplicationEvents1Message(var Msg: tagMSG;
      var Handled: Boolean);
    begin
      If (Screen.ActiveForm=Form2)And
       ((Msg.message=WM_KEYDOWN)or(Msg.message=WM_LBUTTONDOWN)or(Msg.message=WM_MOUSEMOVE)) Then
      Begin
        Timer1.Enabled:=False;
        Timer1.Enabled:=True;
      End;
    end;
    Dans le OnShow de la fiche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm2.FormShow(Sender: TObject);
    begin
      Timer1.Enabled:=True;
    end;
    Dans le OnClose de la fiche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      Timer1.Enabled:=False;
    end;
    Dans le OnTimer du Timer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm2.Timer1Timer(Sender: TObject);
    begin
      Close;
    end;
    Delphi :
    La F.A.Q. , 877 réponses à vos questions !
    264 sources à consulter/télécharger !

  5. #5
    Nouveau membre du Club
    Profil pro
    Directeur
    Inscrit en
    Avril 2003
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Directeur

    Informations forums :
    Inscription : Avril 2003
    Messages : 34
    Points : 32
    Points
    32
    Par défaut
    Certaines mises à jour peuvent se faire sans la souris.
    Je ne voudrai pas déconnecter un utilisateur qui n'utilise que le clavier !
    En plus j'aimerai une solution si possible élégante qui fonctionne dans tous les cas.
    Je ne suis pas sur de ce que je dis mais je crois que l'événement OnMouseMove du formulaire ne se déclenche pas lorsque la souris est sur un composant contenu dans le formulaire.

  6. #6
    Nouveau membre du Club
    Profil pro
    Directeur
    Inscrit en
    Avril 2003
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Directeur

    Informations forums :
    Inscription : Avril 2003
    Messages : 34
    Points : 32
    Points
    32
    Par défaut
    Merci à Nono40 pour sa solution. Je vais la mettre en oeuvre tout de suite.
    Merci également à Yohann et à Charly

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

Discussions similaires

  1. Charger une image au bout d'un certain temps
    Par sevy1881 dans le forum ActionScript 1 & ActionScript 2
    Réponses: 6
    Dernier message: 27/08/2010, 16h31
  2. Réponses: 3
    Dernier message: 02/02/2010, 20h30
  3. [C#] Comment fermer une fenêtre et ses parents en même temps ?
    Par AmineDev9 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 19/01/2009, 03h57
  4. Réponses: 4
    Dernier message: 18/05/2007, 15h37
  5. Stopper l'exécution d'une fonction au bout d'un certain temp
    Par Eagle959 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 13/03/2006, 18h16

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