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 :

Finir une application


Sujet :

Composants VCL Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    172
    Détails du profil
    Informations personnelles :
    Âge : 83
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2002
    Messages : 172
    Points : 101
    Points
    101
    Par défaut Finir une application
    Bonjour à chacun,

    Dans l'événement OncloseQuery, j'introduis un message de confirmation de fin pour que l'utilisateur soit prévenu d'une éventuelle erreur de sa part ( fermer alors qu'il ne le souhaite pas).
    J'aimerais que cette précaution ne soit pas lancée quand c'est Windows lui-même qui interrompt l'application.
    Comment faut-il faire pour éviter l'ouverture de la boite de fin quand Windows se ferme?
    Merci de votre aide.

  2. #2
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 670
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 670
    Points : 7 040
    Points
    7 040
    Par défaut
    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
    type 
      TForm1 = class(TForm) 
      private 
        procedure WMEndSession(var Msg: TWMEndSession); message WM_ENDSESSION; 
      public 
      end; 
     
    implementation 
     
    {$R *.DFM} 
     
    procedure TForm1.WMEndSession(var Msg: TWMEndSession); 
    begin 
      if Msg.EndSession = True then 
        ShowMessage('Windows is shutting down!'); 
      inherited; 
    end;
    Il y a cet évènement qui est sensé détecter la fermeture de Windows : ca peut peut-être t'aider ...


  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    172
    Détails du profil
    Informations personnelles :
    Âge : 83
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2002
    Messages : 172
    Points : 101
    Points
    101
    Par défaut
    Je fais un essai, merci

  4. #4
    Membre expérimenté

    Inscrit en
    Mai 2002
    Messages
    720
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 720
    Points : 1 594
    Points
    1 594
    Par défaut
    De mémoire, le WM_ENDSESSION à la facheuse habitude de se déclencher après le OnCloseQuerry. Ma solution consiste à ne pas utiliser cet évènement, mais à utiliser Exit dans OnClose pour annuler la fermeture (OnClose se produit après WM_ENDSESSION)...

    Un peu moche, mais efficace

    Bon dev'

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    172
    Détails du profil
    Informations personnelles :
    Âge : 83
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2002
    Messages : 172
    Points : 101
    Points
    101
    Par défaut
    Bonjour,
    Merci à Smortex qui m'a permis de trouver la réponse à mon pb.
    Effectivement, le WM_ENDSESSION n'évite pas de poser la question. Cette information fournie par Lung me sera utile une autre fois. Merci à lui.
    Je vous propose ci-dessous le code qui fonctionne correctement chez moi:
    Si l'utilisateur demande la fermeture, la boite d'avertissement fonctionne, Si Windows est en cours de fermeture, il ne se passe rien.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      if MessageDlg(Quitter,mtCustom,[mbYes,mbNo],0)=mrYes then
      begin
        if MediaPlayer1.Mode=mpPlaying then MediaPlayer1.Stop;
        Fcfg.rep:=ExtractFilePath(Application.ExeName);répertoire de l'app
        sauveparam;// *.INI
      end
      else Action:=caNone;
    end;
    // ceci se comprend grâce au code suivant de Borland, dans Forms
    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
    20
    21
    22
    23
    24
     
    procedure TCustomForm.Close;
    var
      CloseAction: TCloseAction;
    begin
      if fsModal in FFormState then
        ModalResult := mrCancel
      else
        if CloseQuery then
        begin
          if FormStyle = fsMDIChild then
            if biMinimize in BorderIcons then
              CloseAction := caMinimize else
              CloseAction := caNone
          else
            CloseAction := caHide;
          DoClose(CloseAction);
          if CloseAction <> caNone then// Explication ici
            if Application.MainForm = Self then Application.Terminate
            else if CloseAction = caHide then Hide
            else if CloseAction = caMinimize then WindowState := wsMinimized
            else Release;
        end;
    end;

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

Discussions similaires

  1. executer une application a distance : Sockets ? RPC ? CORBA?
    Par a_hic dans le forum Développement
    Réponses: 5
    Dernier message: 30/05/2006, 13h02
  2. Accès à une application ouverte (OLE Automation ?)
    Par PascalB dans le forum C++Builder
    Réponses: 6
    Dernier message: 17/06/2002, 14h39
  3. Réponses: 1
    Dernier message: 13/05/2002, 09h19
  4. [Kylix] Execution d'une application hors de l'edi
    Par Sadam Sivaller dans le forum EDI
    Réponses: 1
    Dernier message: 20/04/2002, 23h22
  5. Réponses: 2
    Dernier message: 15/04/2002, 12h56

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