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

Langage Delphi Discussion :

[D6] Mon application refuse de s'arrêter


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 63
    Points : 47
    Points
    47
    Par défaut [D6] Mon application refuse de s'arrêter
    Bonjour,

    J'ai une application assez volumineuse qui me donne satisfaction,
    mais je viens de découvrir qu'elle refuse de s'arrêter automatiquement
    comme elle le doit dans le cas extraordinaire où elle est active alors
    que je demande à Windows (XP SP2) de s'arrêter Du coup
    Windows ne s'arrête pas non plus (et je peux continuer à travailler,
    voire arrêter manuellement mon appli qui n'est pas du tout plantée).

    En revanche, dans les cas ordinaires, si je clique sur la p'tite croix
    pour arrêter, (ou toute autre commande intrinsèque comme Ctrl F4)
    elle s'arrête et tout va bien.

    J'ai mis un peu des traces, et dans les deux cas, mon appli passe bien
    par CloseQuery dont elle sort avec CanClose True, elle passe bien par
    Close mais, dans le cas de l'arrêt de Windows, elle ne passe pas par
    le Destroy

    J'ai beaucoup de fiches qui se référencent plus ou moins les unes les
    autres aussi m'est-il quasiment impossible de simplifier jusqu'à ce que
    le problème disparaisse.

    J'imagine que ça pourrait être une de mes fiches (pas la principale)
    dont le CanClose serait False ou dont le Destroy se planterai sans
    erreur, mais c'est là que j'ai besoin d'aide :
    • Quelle différence celà fait il pour mon appli qu'elle soit arrêtée
      normalement ou via message de close suite à arrêt de Windows ?

      Comment dois-je m'y prendre pour tracer et débugger ce bazard ?
    Merci.

  2. #2
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Un recherche dans le forum Delphi avec WM_QUERYENDSESSION comme mot-clé. Tu trouveras la solution

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 63
    Points : 47
    Points
    47
    Par défaut
    Hello, merci pour la réponse, elle m'a bien aidé

    Sur le message WM_QUERYENDSESSION, j'ai mis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TMaForm.WMQUERYENDSESSION(var Msg: TWmQueryEndSession);
    begin
      Inherited;
      Msg.Result := 1;
      Application.Terminate;
    end;
    C'est efficace, et mon appli s'arrête quand je demande l'arrêt de Windows,
    c'est d'ailleurs l'appel à Application.Terminate qui le fait, la valeur de
    retour affectée au message ne semblant pas avoir d'effet détectable.

    MAIS,

    Le problème me semble repoussé car les autres appli en cours, elles, ne
    se ferment pas, ni Windows, comme si une chaîne de quelquechose était
    cassée ?

    Salutations.

  4. #4
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Je crois qu'il faut mettre :
    Et mettre Application.Terminate dans WM_ENDSESSION.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 63
    Points : 47
    Points
    47
    Par défaut
    J'ai fait ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure TForm_MainPhoto.WMQUERYENDSESSION(var Msg: TWMQueryEndSession);
    begin
      Inherited;
      Msg.Result := 0;
      Application.Terminate;
    end;
     
    procedure TForm_MainPhoto.WMENDSESSION(var Msg: TWMEndSession);
    begin
      Inherited;
      Msg.Result := 0;
      Application.Terminate;
    end;

    Mais ça ne change rien : mon appli se ferme, mais windows ne continue
    pas à se fermer ?

  6. #6
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Je suis confronté au meme pb, as tu trouvé une solution ?

    Merci d'avance.

  7. #7
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    685
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 685
    Points : 1 608
    Points
    1 608
    Par défaut
    Quels composants tiers utilises tu ?... J'ai eu un problème de ce genre avec le composant TJvTrayIcon, il y a quelques temps...

  8. #8
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    ui, c'est bien le composant que j'utilise.

    En fait, j'ai tout déporté dans le onClose et non dans le onQueryClose et ça marche...

    je ne comprends pas pourquoi le onQueryClose mettrait fin à l'instruction de fermer windows plus que le onClose :

  9. #9
    Nouveau Candidat au Club
    Inscrit en
    Juin 2003
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    J'ai également eu ce problème. Alors pour ceux qui comme moi ont galéré pendant 20 ans sur les forum parce que leur appli empêchait Windows de se fermer, je vous conseille d'aller jeter un coup d'oeil là dessus :

    - http://www.cubicreality.com/2007/03/...utdown/#more-8
    - http://www.bsdg.org/SWAG/DELPHI/0414.PAS.html

    En gros, lorsqu'un composant (ou tout autre type de classe) utilise AllocateHWND pour allouer un Handle et qu'il surcharge WndProc, le fait de ne pas appeler DefWindowProc dans WndProc empêcherait la propagation du message de fermeture de session.

    De plus, la fonction FormClose ne serait pas forcément appelée lors de la fermeture par Windows et donc l'ensemble des destructions et libération de mémoire que vous pourriez y faire serait également à faire dans
    WMQueryEndSession (perso je le fait dans WMEndSession quand le paramètre Msg.EndSession est à TRUE).

    Ca m'a permis de résoudre mon problème alors si ça peut servir à quelqu'un...

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

Discussions similaires

  1. Mon application Access refuse de se lancer
    Par cotmar dans le forum Access
    Réponses: 10
    Dernier message: 16/05/2006, 19h41
  2. Comment faire générer du rtf par mon application?
    Par nickylarson dans le forum C++Builder
    Réponses: 3
    Dernier message: 13/08/2003, 09h35
  3. [Access] Mon application est détruite !!!
    Par mathias dans le forum Access
    Réponses: 4
    Dernier message: 26/06/2003, 14h14
  4. Réponses: 7
    Dernier message: 26/06/2003, 09h11
  5. Impossible de quitter mon application!
    Par Bouillou dans le forum C++Builder
    Réponses: 4
    Dernier message: 12/11/2002, 20h43

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