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 :

Comment quitter proprement une application delphi?


Sujet :

Delphi

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Mai 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2013
    Messages : 18
    Points : 5
    Points
    5
    Par défaut Comment quitter proprement une application delphi?
    Bonjour,
    Je viens de créer une application avec Delphi7 perso.
    Pas de problèmes avec l'application sous Delphi, mais qd je lance l'application hors environnement Delphi j'ai des problèmes pour quitter l'application;
    ni la croix rouge en haut à gauche, ni le menu Quitter qui me mène soit à close, soit à application.terminate, aucun ne fonctionne de manière sûre. Parfois oui, parfois non et dans ce cas je n'ai plus qu'à utiliser Ctrl alt del.
    Quelqu'un a-t-il une idée?
    merci.

  2. #2
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 561
    Points : 3 955
    Points
    3 955
    Par défaut
    Parfois oui, parfois non et dans ce cas je n'ai plus qu'à utiliser Ctrl alt del.
    ça marche presque

    Il faut regarder les propriété de ta fiche principale, par exemple que vaut BorderStyle ?
    Le menu Quitter n'apparaît pas par miracle, as-tu créé un menu dans ta fiche (composant TMenu) ?
    Ton code comporte certainement des bizarreries, il est gros ton programme?

  3. #3
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 457
    Points
    28 457
    Par défaut
    Citation Envoyé par bbchess Voir le message
    Bonjour,
    Je viens de créer une application avec Delphi7 perso.
    Pas de problèmes avec l'application sous Delphi, mais qd je lance l'application hors environnement Delphi j'ai des problèmes pour quitter l'application;
    ni la croix rouge en haut à gauche, ni le menu Quitter qui me mène soit à close, soit à application.terminate, aucun ne fonctionne de manière sûre. Parfois oui, parfois non et dans ce cas je n'ai plus qu'à utiliser Ctrl alt del.
    Quelqu'un a-t-il une idée?
    merci.
    on rencontre ce problème parfois avec un mauvais usage de Thread...serait-ce la cas ?

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Mai 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2013
    Messages : 18
    Points : 5
    Points
    5
    Par défaut finir un programme proprement
    pour eric et paul
    mon programme n'utilise pas de thread
    Sa taille environ 3000 lignes
    La plupart du temps il attend une action de l'opérateur
    ( touche sur une bouton ou autre ]
    L'action finir le programme peut arriver dans une boucle d'attente
    J'ai essayé application.destroy qui marche mais qui n'est pas propre et qui laisse des traces dans la mémoire de l'ordinateur.
    (plus possible de compiler après avec le message 'impossible de créer le fichier xxx.exe')
    Il doit y avoir le moyen de fermer toutes les demandes en cours et terminer proprement
    merci de votre aide

  5. #5
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2012
    Messages : 92
    Points : 159
    Points
    159
    Par défaut
    dans la boucle d'attente

    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
     
    procedure ma_fonction_de_traitement ;
    begin
    ...
     
    bCloseAsk := false;
     
    While "tant que je n'ai pas d'action" do
    begin
      application.processmessages;
      sleep(10);
     
      if bCloseAsk then
       exit;
    end;
     
    ....
     
    end;
    dans le closequery ou sur une autre action
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    bCloseAsk := true;

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Mai 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2013
    Messages : 18
    Points : 5
    Points
    5
    Par défaut suite a finir un programme proprement
    pour eric j'ai en effet créer un menu déroulant avec un sous-menu quitter
    et avec quitter1.click, j'ai essayé
    - close
    - application.terminate
    -application.destroy
    merci

  7. #7
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 561
    Points : 3 955
    Points
    3 955
    Par défaut
    J'ai essayé application.destroy qui marche mais qui n'est pas propre et qui laisse des traces dans la mémoire de l'ordinateur.
    (plus possible de compiler après avec le message 'impossible de créer le fichier xxx.exe')
    Cela veut dire que le programme n'a pas quitté la mémoire, tu ne peux donc pas l'écraser lors de la compilation suivante. Passe par la gestionnaire de tâches ou un outil comme ProcessExplorer pour tuer le processus encore en mémoire.

    j'ai en effet créer un menu déroulant avec un sous-menu quitter
    et avec quitter1.click, j'ai essayé
    - close
    - application.terminate
    -application.destroy
    Avec tout ça, tu devrais avoir raison de la bête...
    S'il s'agit du code de la fiche principale, l'appel à close devrait largement suffire. Il y a donc autre chose...

    As-tu défini un gestionnaire OnCloseQuery dans la fiche principale ?

    Rem : Je n'ai jamais utilisé application.destroy.

    Au pire, envoie le code s'il n'est pas confidentiel.

    @+

  8. #8
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 457
    Points
    28 457
    Par défaut
    Citation Envoyé par bbchess Voir le message
    pour eric et paul
    mon programme n'utilise pas de thread
    Sa taille environ 3000 lignes
    La plupart du temps il attend une action de l'opérateur
    ( touche sur une bouton ou autre ]
    L'action finir le programme peut arriver dans une boucle d'attente
    J'ai essayé application.destroy qui marche mais qui n'est pas propre et qui laisse des traces dans la mémoire de l'ordinateur.
    (plus possible de compiler après avec le message 'impossible de créer le fichier xxx.exe')
    Il doit y avoir le moyen de fermer toutes les demandes en cours et terminer proprement
    merci de votre aide
    de quelles boucles d'attente parles-tu ?!

    Application.Terminate est suffisant il indique à Delphi de mettre fin à la boucle principale de traitement des messages Windows, la seule boucle d'attente que devrait avoir ton programme.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Mai 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2013
    Messages : 18
    Points : 5
    Points
    5
    Par défaut quitter proprement résolu
    après avoir essayer 10000 trucs j'ai enfin trouvé la solution.
    Mon prgramme contenait de multiples boucles d'attente d'un événement (clic)
    du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    repeat
      Application.ProcessMessages;
    until ClicArrive;
    Lorsque le programme tourne dans cette boucle il ne répond pas aux sollicitation de quitter.
    J'ai modifié en ajoutant un flag de sortie forcé, dans toutes mes boucles:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    repeat
      Application.ProcessMessages;
    until ClicArrive or DemandeSortie;
    et je positionne DemandeSortie à True dans ma procédure Quitter1.clic.

    Il me semble que celà marche.

    merci à tous

    ps quelqu'un pourrait-il flagger le problème comme résolu, je ne vois pas le bouton qui va bien
    [EDIT] C'est le bouton résolu en bas de la discussion !

  10. #10
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 561
    Points : 3 955
    Points
    3 955
    Par défaut
    Des boucles d'attente de clics????

    Delphi étant basé sur l'événementiel, on voit mal la motivation de telles boucles.
    Tu devrais peut-être mettre à plat le code et exploiter les mécanismes "normaux" de Delphi.

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Mai 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2013
    Messages : 18
    Points : 5
    Points
    5
    Par défaut probléme résolu, merci
    j'oubliais de remercier spécialement Jeromelef2, qui m'avait donné la solution, mais que je n'avais pas lu assez attentivement.

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 812
    Points : 13 527
    Points
    13 527
    Par défaut
    Ce genre de boucle est idéal pour mettre un PC à plat. Tes utilisateurs ne vont pas te dire merci

  13. #13
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 879
    Points : 11 374
    Points
    11 374
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par Andnotor
    Ce genre de boucle est idéal pour mettre un PC à plat.
    Tu veux dire que ça le transforme en tablette ?

    Sinon, un traitement long peut je pense légitimement boucler pour prendre en compte une demande d'interruption. Mais pour une attente d'action utilisateur, il y a sûrement une façon plus événementielle d'agencer le code pour obtenir le même effet, comme le suggérait e-ric.

  14. #14
    Invité
    Invité(e)
    Par défaut
    Je pense qu'il faudrait utiliser les "procedure of object"

  15. #15
    Fxg
    Fxg est déconnecté
    Membre éclairé
    Homme Profil pro
    ingénieur financier
    Inscrit en
    Septembre 2003
    Messages
    511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : ingénieur financier

    Informations forums :
    Inscription : Septembre 2003
    Messages : 511
    Points : 838
    Points
    838
    Par défaut
    Cela me fait plus penser à une strcture Turbo-Pascal avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    REPEAT
    ...
    UNTIL Keypressed

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 812
    Points : 13 527
    Points
    13 527
    Par défaut
    Citation Envoyé par tourlourou Voir le message
    Tu veux dire que ça le transforme en tablette ?

    Sinon, un traitement long peut je pense légitimement boucler pour prendre en compte une demande d'interruption. Mais pour une attente d'action utilisateur, il y a sûrement une façon plus événementielle d'agencer le code pour obtenir le même effet, comme le suggérait e-ric.
    J'ai sous la main une Surface Pro et elle sera moins vite à genoux que mon PC de bureau

    Sinon un traitement long, je le déporterais dans un thread. Application.ProcessMessages ne fait que ralentir l'ensemble en traitant également tous les messages (et il y en a un paquet) sans rapport avec le seul qui nous intéresse : l'appui sur le bouton "Stop". Le thread, tu pourras même le "booster" facilement en lui donnant une priorité supplémentaire

  17. #17
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 561
    Points : 3 955
    Points
    3 955
    Par défaut
    Cela me fait plus penser à une strcture Turbo-Pascal avec
    Pas bête ça, j'y pensais plus, serait-ce un portage à la sauvage ???

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 25/02/2014, 10h21
  2. Comment quitter proprement une SSII
    Par Mizaru dans le forum SSII
    Réponses: 14
    Dernier message: 18/11/2013, 17h23
  3. [XL-2000] pour quitter proprement une application
    Par cobra38 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 11/12/2010, 17h31
  4. Quitter proprement une application ?
    Par MaelstroeM dans le forum VB.NET
    Réponses: 2
    Dernier message: 25/11/2008, 12h40
  5. [C] Comment arreter proprement une application ?
    Par Hikage dans le forum Windows
    Réponses: 6
    Dernier message: 05/07/2006, 10h29

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