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 forme dans le OnActivate


Sujet :

Delphi

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 56
    Points : 32
    Points
    32
    Par défaut fermer une forme dans le OnActivate
    bonjour,
    voici mon problème, dans le Onactivate de ma forme je teste une condition, si ma condition est vérifiée j'exécute des instructions sinon je ferme ma forme mais après un ShowMessage.
    voici le code :
    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
     
    {Instructions......}
    with Adoquery1 do
    begin
    SQL.Clear;
    SQL.Add('Select NumOrdonnance As NumOrd');
    SQL.Add('From Ordonnance');
    SQL.Add('Where CodePatient ='+IdPatient);
    Active:=true;
    end; 
    if not (Adoquery1.IsEmpty) then
     begin
      TabReqVide:=true;
      Label9.Caption:=Label9.Caption+' '+ inttostr(ADOQuery1Numord.Value);
     end
    else
     begin
      TabReqVide:=false;
      ShowMessage (' Acucune Ordonnance pour ce Patient ! ');
      close;
    le problème c'est que ma forme ne se ferme pas après le showMessage !!!
    ma forme est appelée depuis le menu principale avec un ShowModal.
    merci d'avance.

  2. #2
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    et avec un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     ModalResult := mrCancel;
    ?
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Si c'est un ShowModal, il est déclaré en "virtual", il est donc tout à fait envisageable de redéfinir ShowModal avec override au lieu d'un OnActivate !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function TMaForm.ShowModal: Integer; // override;
    begin
      if HaveOrdonnance(IdPatient) then 
       Result := inherited ShowModal();
      else
        Result := mrAbort;
    end;
    HaveOrdonnance est une fonction contenant ton code actuel du OnActivate, le Résultat de HaveOrdonnance sera not Query.IsEmpty
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 56
    Points : 32
    Points
    32
    Par défaut
    merci Linkin mais ça marche pas avec

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 56
    Points : 32
    Points
    32
    Par défaut
    Merci ShaiLeTroll pour ta vite réponse mais c'est quoi le Override ?, ou doit je déclarer ma fonction ?
    c'est un peut flou pour moi,
    y a pas une méthode simple pour interrompre l'activation d'une forme dans son OnActivate !

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    virtual\override sont les mots clés pour désigner les méthodes redéfinissables\rédéfinies, c'est dans le cadre du polymorphisme, de l'héritage en POO, un peu difficile a expliquer ici : Méthodes virtuelles et dynamiques

    A Lire XVI-C-4. Utilisation d'un constructeur et d'un destructeur, notions sur l'héritage
    Cet article du Guide Pascal et Delphi, montre la première utilisation de override avec les destructeurs !

    Faudrait tenter de Changer le ModalResult à la limite durant le OnShow mais ce n'est pas très propre !

    Sinon, tu dois mettre dans la parte interface

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function ShowModal: Integer; override;
    ton code ressemblera à

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    type
      TMaForm = class(Form)
        ...
      public
        function ShowModal: Integer; override;
        ...
      end;
    TMaForm étant ton type de fenêtre !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  7. #7
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Pour ma part je n'utiliserai pas le onActivate pour cela, car le OnActivate se déclenche à chaque fois que la fenêtre reprend le focus (donc réexécution du code).

    Il serait peut être mieux de faire le test et de n'afficher la fenêtre que si le résultat est positif.
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  8. #8
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Salut,

    Fais ton test avant ??? comme le propose @rayek se sera plus simple

    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
    25
    26
    27
    // a mettre dans la form appelante
    with Adoquery1 do
    begin
    SQL.Clear;
    SQL.Add('Select NumOrdonnance As NumOrd');
    SQL.Add('From Ordonnance');
    SQL.Add('Where CodePatient ='+IdPatient);
    Active:=true;
    end; 
    if not (Adoquery1.IsEmpty) then
     begin
      With TFormAppele.Create(Application) do
      Begin
        Try
          TabReqVide:=true;
          Label9.Caption:=Label9.Caption+' '+ inttostr(ADOQuery1Numord.Value);
          Showmodal;
        finally
          Release;
        end;
      end;
     end
    else
     begin
      TabReqVide:=false;
      ShowMessage (' Acucune Ordonnance pour ce Patient ! ');
      close;
    @+

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 56
    Points : 32
    Points
    32
    Par défaut
    je pense que je ferai le test avant le showmodal de ma form
    Merci les gars

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

Discussions similaires

  1. [C#] Comment ouvrir une form dans un panel
    Par Le Basque dans le forum Windows Forms
    Réponses: 7
    Dernier message: 28/02/2007, 12h31
  2. [C# 2.0] Fermer une Form dans un événement
    Par Mast3rMind dans le forum Windows Forms
    Réponses: 2
    Dernier message: 07/11/2006, 11h05
  3. [Form close] Impossible de fermer une form
    Par valoji dans le forum Bases de données
    Réponses: 4
    Dernier message: 17/03/2006, 15h12
  4. fermer une fiche dans l'évènement OnActivate
    Par Soulama dans le forum Composants VCL
    Réponses: 7
    Dernier message: 08/03/2006, 14h26
  5. Comment insérer une form dans une autre form ?
    Par marsupilami34 dans le forum Composants VCL
    Réponses: 4
    Dernier message: 19/07/2005, 11h15

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