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 :

Fermer une application dans la routine OnCreate


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Fermer une application dans la routine OnCreate
    Bonjour.
    Il est impossible de fermer un programme (comprenant une seule fiche) dans la routine "OnCreate" par "[NomDeLaFiche].Close;", ni sous W2000, ni sous XP. L'instruction "[NomDeLaFiche].Release;" fonctionne de manière "sale", c'est-à-dire qu'après exécution il est impossible de recompiler l'application : l'exécutable reste "ouvert". Enfin l'instruction "[NomDeLaFiche].Free;" plante méchamment ...
    La seule méthode qui SEMBLE fonctionner proprement est "Application.Terminate ;" !
    Je m'explique : je dois initialiser un périphérique USB et en cas d'absence de celui-ci quitter le programme sans autre forme de procès.
    Avez-vous aussi déjà remarqué ce problème ?
    Dernière modification par Roland Chastain ; 05/06/2016 à 09h17. Motif: changé le titre

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 593
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    je n'appellerai pas ça un bug de Delphi (AMHA ce comportement est "valable" avec toutes les versions), il s'agit plutôt une mauvaise utilisation du OnCreate.
    Si le code se trouvait dans le OnShow ou le OnActivate de la fiche le problème ne se poserait pas (du moins pas de la même façon)

    Schéma :
    dans le OnCreate initialiser le périphérique
    dans le OnActivate si périphérique non initialisé Close;

  3. #3
    Invité
    Invité(e)
    Par défaut Merci ...
    pour la réponse rapide. Mais on peut voir cela comme on veut : il y a 30 ans, chez un grand fabricant de matériel et logiciels, il n'y avait pas de bugs, seulement des "features" ...

  4. #4
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 768
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 768
    Par défaut
    Fais gaffe à OnActivate: cette méthode est appelée lorsqu'on l'application récupère le focus (appeler ou pas )

    Colle un Application.Terminate dans le OnShow et assure toi que dans le OnClose l'action est caFree c'est plus sûr

  5. #5
    Invité
    Invité(e)
    Par défaut Je "commence" à comprendre ...
    Voilà, j'ouvre mon périphérique USB dans ma routine en mode "OnCreate", en cas d'échec je termine par "ApplicationTerminate" ; cela fonctionne sauf ... que mon programme est passé dans le second onglet, celui des processus, dans le gestionnaire des tâches. Et donc impossible de recompiler pour modifications avant d'avoir arrêté ce processus, qui au passage doit "bouffer" des ressources pour rien ! Comment faire pour terminer "proprement" ? PostMessage(Self.Handle, 16, 0, 0) ne marche pas non plus. A moins que tout ceci ne soit lié à la dll de contrôle de l'interface USB qui aurait "des problèmes" ?
    Une autre curiosité est que des "OnActivate" et "OnDeactivate" définis via les événements de la fiche principale ... sont ignorés, maintenant que ma routine d'initialisation est en mode "onCreate" : il faut que je mette "Application.On(de)activate:= ..." dans ladite routine d'initialisation. Bizarre ... Auparavant, quand ma routine d'initialisation était définie dans l'événement "OnActivate", cela marchait et je redéfinissais l'événement OnActivate dans la routine. OnDeactivate n'a jamais marché via la gestion d'événements de la fiche principale !
    J'attends vos suggestions !
    Dernière modification par Invité ; 06/06/2016 à 07h23.

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    409
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 409
    Par défaut
    au pire utilise un timer que tu actives dans onCreate, ou tu cré un message personnalisé et tu l'envoie avec PostMessage (pas SendMessage qui est bloquant) depuis ton create cela devrais suffire je pense

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

Discussions similaires

  1. [phpMyAdmin] Tables qui ne se réparent pas dans phpMyAdmin avec bug Roundcube
    Par cedrus dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 7
    Dernier message: 11/04/2013, 10h42
  2. [AC-2007] Bug dans application sur PC avec runtime
    Par AndréPe dans le forum Runtime
    Réponses: 1
    Dernier message: 03/04/2012, 09h02
  3. Bug dans DeskI avec objets condition
    Par Zeusviper dans le forum Deski
    Réponses: 6
    Dernier message: 20/10/2010, 17h48
  4. [DEV] Bug dans mon éditeur de carte avec Cocoa (et OpenGL)
    Par Ceylo dans le forum Développement OS X
    Réponses: 5
    Dernier message: 12/10/2007, 19h34
  5. Réponses: 1
    Dernier message: 13/12/2006, 09h04

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