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 :

Comment stopper une application Delphi ?


Sujet :

Langage Delphi

  1. #1
    Membre éprouvé

    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Janvier 2006
    Messages
    621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Janvier 2006
    Messages : 621
    Points : 1 264
    Points
    1 264
    Par défaut Comment stopper une application Delphi ?
    Bonjour,
    j'ai un soft qui s'amuse a balayer des sous repertoires. LE lancement se fait via un bouton avec la methode "click" associee, et les affichages se font dans la form principale.
    Je voudrais le stopper. j'ai donc mis des "application.processmessages" un peu partout et j'ai un bouton auquel j'ai associe le code suivant :

    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
     
    procedure TForm1.stopperClick(Sender: TObject);
    begin
      {$i-} closefile(fi); {$i+} if ioresult <>  0 then;
      {$i-} closefile(fi2); {$i+} if ioresult <>  0 then;
      showmessage('');
      form1.Close;
    end;
     
    procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      if lbatches <> nil then lbatches.Free;
      if lbatches <> nil then lheures.Free;
      action := cafree;
    end;
    Les closefile c'est juste pour fermer d'eventuels fichiers ouverts.
    quand je clique dessus, ca affiche bien un message vide, mais apres ca reprend l'execution la ou ca s'etait interrompu. Pareil si je mets application.terminate au lieu du close.
    je mets aussi la methode formclose au cas ou ca aiderait.

  2. #2
    Membre habitué Avatar de maamar1979
    Inscrit en
    Mai 2006
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 174
    Points : 134
    Points
    134
    Par défaut
    salam,

    tu ecrit directement ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.stopperClick(Sender: TObject);
    begin
    Application.terminate
    end;
    à la fermeture tous tes fichier seront automatiquement fermer.

  3. #3
    Membre éprouvé

    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Janvier 2006
    Messages
    621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Janvier 2006
    Messages : 621
    Points : 1 264
    Points
    1 264
    Par défaut
    ca marche pas plus : je clique et ca s'arrete pas.

  4. #4
    Membre habitué Avatar de maamar1979
    Inscrit en
    Mai 2006
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 174
    Points : 134
    Points
    134
    Par défaut
    dit nous plus sur ton appli

  5. #5
    Membre éprouvé

    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Janvier 2006
    Messages
    621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Janvier 2006
    Messages : 621
    Points : 1 264
    Points
    1 264
    Par défaut
    j'ai un bouton avec une methode click.
    quand je clique dessus, j'execute une autre procedure qui fait le traitement. Dans cette procedure je mets les application.processmessages...

    Tiens je pense a unn truc, ca serait pour ca que ca veut pas s'arreter ? On peut peut etre interrompre une methode, mais peut etre pas uneprocedure appelee par une methode. Je vais essayer de ce pas en gerant une sorte de ressource.

  6. #6
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    E nfait le processus d'arret de l'applciation genere un evenement via la methode close.

    Donc tant que ton application n'auras pas terminé la gestion de l'evenemetn qui a declanché la recherche, l'application suspendra la fermeture de l'application, qui prendra effet uen fois l'evenement terminé.

    En fait, je te conseille surtout de tester au sein de ta boucle de recherche une variable booleene, qui passée a "true" aurra pour effet d'arreter la recherche.

    Dans Sur ton bouton "stopper" tu vas donc basculer cette variable a true, puis faire un close.

    L'application se terminera des la recherche stoppée (apres analyse de la variable booleene.

    Une autre alternative serait de Threader cette recherche .... mais cela ne t'empecheras pas de devoir stopper le thread avant de fermet l'application.

  7. #7
    Membre éprouvé

    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Janvier 2006
    Messages
    621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Janvier 2006
    Messages : 621
    Points : 1 264
    Points
    1 264
    Par défaut
    tout a fait exact : apparemment, la methode close declenche bien la fermeture de l'appli, mais pas si l'execution se situe autre part que dans une methode. J'ai cree un boolean que je mets a faux, et quand je clique sur "stopper" je la mets a vrai.
    Ensuite, dans ma procedure appelee par la methode "traiter", je fais un test "si vrai" alors exit, et la ca marche. Merci a tous !

    reste en suspens : est il possible de forcer l'arret meme si on se trouve dans une procedure qui n'est pas directement une methode ?

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 132
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 132
    Points : 1 418
    Points
    1 418
    Par défaut
    Bonjour,

    Dans ce cas il faut gérer dans ton code de traitement "long" des cas d'arrêts pour interrompre la fonction de recherche.

    Citation Envoyé par arkhamon Voir le message
    j'ai donc mis des "application.processmessages" un peu partout et j'ai un bouton auquel j'ai associe le code suivant :

  9. #9
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Citation Envoyé par arkhamon Voir le message
    reste en suspens : est il possible de forcer l'arret meme si on se trouve dans une procedure qui n'est pas directement une methode ?
    Proprement ? Je ne sais pas.
    Mais si il y a une solution c'est bien du coté des Thread. Il doit etre possible d'arreter un Thread en cours d'execution ....

    L'ideal etant quand meme de prevoir un point d'arret dans les procedures longues.

    Pour moi, des qu'une procedure dure un peu trop longtemps, je prevois un point d'entree qui permet a un utilisateur ulterieur, ne possedant pas forcement le code source, d'annuler le traitement.

    Mais si tu utilise une API ou une methode dont tu n'as pas le code source, cela sera dur.

Discussions similaires

  1. Réponses: 23
    Dernier message: 22/08/2010, 05h07
  2. Réponses: 4
    Dernier message: 23/02/2010, 11h00
  3. comment protéger une application delphi?
    Par dj_techno dans le forum Delphi
    Réponses: 2
    Dernier message: 19/04/2007, 12h33
  4. Réponses: 10
    Dernier message: 23/01/2006, 21h44
  5. Comment alléger une application delphi en memoire?
    Par tipiweb dans le forum Langage
    Réponses: 9
    Dernier message: 12/01/2006, 19h45

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