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 fermer un form1 dans un script?


Sujet :

Langage Delphi

  1. #1
    Membre régulier

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 85
    Points : 100
    Points
    100
    Par défaut comment fermer un form1 dans un script?
    Bonjour,

    je souhaiterais avoir vos lumières sur la fermeture automatique d'un form1 lorsqu'on active un form2
    J'ai rajouté un process (form1.close) mais il semble que Pascal ne tient compte que du 1er process (form2.showmodal)

    Merci pour vos futures réponses si vous avez des idées...

    Je vous transmets ci-dessous le script:
    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.BitBtn1Click(Sender: TObject);
    
    begin
    
    //module où se trouve la table1 et la datasource
    with Datamodule3 do
    
    begin
    if ( (table1.Locate('Libelle_Ville',Edit2.text,[locaseInsensitive]))and (table1.Locate('ID_Ville',Edit3.text,[locaseInsensitive])) )then
      form2.showmodal;
    form1.close
    else
      ShowMessage('essaye encore!!');
    
    end;

  2. #2
    Membre éprouvé
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Points : 963
    Points
    963
    Par défaut
    ajoute dans l'événement form2.OnShow
    Ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      form2.show;
    form1.close
    Ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     form1.close;
     form2.showmodal;

  3. #3
    Membre averti Avatar de archonte
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 341
    Points : 392
    Points
    392
    Par défaut
    Citation Envoyé par jakol Voir le message
    Bonjour,

    je souhaiterais avoir vos lumières sur la fermeture automatique d'un form1 lorsqu'on active un form2
    J'ai rajouté un process (form1.close) mais il semble que Pascal ne tient compte que du 1er process (form2.showmodal)

    Merci pour vos futures réponses si vous avez des idées...
    Probablement à cause d'une coquille : un bloc doit être encadré par begin ... end !!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if ( (table1.Locate('Libelle_Ville',Edit2.text,[locaseInsensitive]))and (table1.Locate('ID_Ville',Edit3.text,[locaseInsensitive])) )
    then
      begin
      form2.showmodal;
      form1.close;
      end
    else
      ShowMessage('essaye encore!!');
    
    end;
    "Je n'ai jamais rencontré d'homme si ignorant qu'il n'eut quelque chose à m'apprendre."
    Galilée

  4. #4
    Membre régulier

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 85
    Points : 100
    Points
    100
    Par défaut
    salut merci pour vos réponse
    vos propositions ne fonctionnent pas dans le Onshow et OnActivate du form2

    Même si c'est bien pensé...la "coquille" ne marche pas non plus....

  5. #5
    Membre régulier

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 85
    Points : 100
    Points
    100
    Par défaut
    J'ai trouvé le lien ci-dessous:

    http://www.developpez.net/forums/d47...ivation-form1/

    j'ai caché form1 lorsque form2 est activé et j'ai crée un bouton "fermer" (qui ferme form1) dans form2

    Lorsque je lance l'executable...ça marche mais après je ne peux plus développer sur le projet...Il semble que l'executable est en cours d'execution lorsque je lance le project...

    J'ai fait un copier coller de l'executable, ça marche nikel ...Mais au niveau du codage...c'est pas très propre...

    Merci pour l'aide dans ma recherche

  6. #6
    Membre averti Avatar de archonte
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 341
    Points : 392
    Points
    392
    Par défaut
    - As-tu testé tes conditions dans le if .. then : qu'est-ce que tu obtiens avec un simple showmodal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TForm1.BitBtn1Click(Sender: TObject);
    begin
    //module où se trouve la table1 et la datasource
      with Datamodule3 do
        begin
          if ( (table1.Locate('Libelle_Ville',Edit2.text,[locaseInsensitive]))and (table1.Locate('ID_Ville',Edit3.text,[locaseInsensitive])) )
          then showmodal('Cdt validées')      
          else
                 ShowMessage('essaye encore!!');
        end;
    end;
    - Est-ce que ta form1 ne serait pas ta form principale par hasard ? parce que tu ne peux pas fermer ta form principale sans terminer ton application ...
    "Je n'ai jamais rencontré d'homme si ignorant qu'il n'eut quelque chose à m'apprendre."
    Galilée

  7. #7
    Membre régulier

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 85
    Points : 100
    Points
    100
    Par défaut
    Citation Envoyé par archonte Voir le message
    - As-tu testé tes conditions dans le if .. then : qu'est-ce que tu obtiens avec un simple showmodal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TForm1.BitBtn1Click(Sender: TObject);
    begin
    //module où se trouve la table1 et la datasource
      with Datamodule3 do
        begin
          if ( (table1.Locate('Libelle_Ville',Edit2.text,[locaseInsensitive]))and (table1.Locate('ID_Ville',Edit3.text,[locaseInsensitive])) )
          then showmodal('Cdt validées')      
          else
                 ShowMessage('essaye encore!!');
        end;
    end;
    Oui le form1 est la principale...


    - Est-ce que ta form1 ne serait pas ta form principale par hasard ? parce que tu ne peux pas fermer ta form principale sans terminer ton application ...

  8. #8
    Membre chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Points : 1 765
    Points
    1 765
    Par défaut
    Salut

    Pour afficher la form2 et masquer la form1, il suffit de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Form1.Hide;
    Form2.Show;
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Form1.Visible:=false;
    Form2.visible:=true;
    Bonne chance !

  9. #9
    Membre régulier Avatar de khaled-benloucif
    Inscrit en
    Octobre 2008
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Octobre 2008
    Messages : 74
    Points : 77
    Points
    77
    Par défaut
    Je suis pour ce qu'a dit Mick605. Je rajoute dans le cas ou ta Form1 est la MainForm, penses à la ré-afficher lors de la fermeture de Form2 dans son évènement OnHide:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    begin
     Form1.Visible:= true
    end
    Ou encore gères l'arrêt de ton application en passant par Form1 depuis Form2 ou la fiche dont tu te retrouves
    to be xor not to be, that's the flag

  10. #10
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 534
    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 534
    Points : 25 082
    Points
    25 082
    Par défaut
    Citation Envoyé par jakol Voir le message
    J'ai rajouté un process (form1.close) mais il semble que Pascal ne tient compte que du 1er process (form2.showmodal)
    ShowModal est bloquant tant que Form2 est affiché, cela reste sur ShowModal (c'est une boucle à l'intérieur), une fois Form2 fermé, cela ferme Form1

    Normalement, la proposition de Montor est valable, il faut bien mettre le Close puis le ShowModal dans un Begin\End commle le disait archonte.
    Enfin, pense à indenter ton 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
    procedure TForm1.BitBtn1Click(Sender: TObject);
    begin
      //module où se trouve la table1 et la datasource
      with Datamodule3 do
      begin
        if ( (table1.Locate('Libelle_Ville',Edit2.text,[locaseInsensitive]))and (table1      .Locate('ID_Ville',Edit3.text,[locaseInsensitive])) )then
        begin
          form1.Close(); // ou form1.Hide(); // ou form1.Release(); si tu ne l'utilisera plus jamais ensuite, donc aucun évènement dessus après ce OnClick
          form2.ShowModal(); 
        end
        else
          ShowMessage('essaye encore!!');
      end;
    end;
    Il faut biensur vérifier si tu n'as pas une Action particulièrement dans le Form1.OnClose, pour une fenêtre Style fsNormal, c'est caHide (cela ne libère pas la fenêtre mais la cache, en général, c'est le plus pratique, cela permet de gérer soit même la libération par un FreeAndNil) ou une contrainte dans OnCloseQuery !

    Enfin, si Form1 est la 1ère fenêtre créé, il faut faire attention, si elle est considéré comme la MainForm, sa fermeture fermera ton programme (surement juste après la fermeture de Form2 grace au ShowModal)

    On suppose aussi que tu es bien en SDI, que ne mélanges par Modal et MDIChild
    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

  11. #11
    Membre régulier

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 85
    Points : 100
    Points
    100
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    ShowModal est bloquant tant que Form2 est affiché, cela reste sur ShowModal (c'est une boucle à l'intérieur), une fois Form2 fermé, cela ferme Form1

    Normalement, la proposition de Montor est valable, il faut bien mettre le Close puis le ShowModal dans un Begin\End commle le disait archonte.
    Enfin, pense à indenter ton 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
    procedure TForm1.BitBtn1Click(Sender: TObject);
    begin
      //module où se trouve la table1 et la datasource
      with Datamodule3 do
      begin
        if ( (table1.Locate('Libelle_Ville',Edit2.text,[locaseInsensitive]))and (table1      .Locate('ID_Ville',Edit3.text,[locaseInsensitive])) )then
        begin
          form1.Close(); // ou form1.Hide(); // ou form1.Release(); si tu ne l'utilisera plus jamais ensuite, donc aucun évènement dessus après ce OnClick
          form2.ShowModal(); 
        end
        else
          ShowMessage('essaye encore!!');
      end;
    end;
    Il faut biensur vérifier si tu n'as pas une Action particulièrement dans le Form1.OnClose, pour une fenêtre Style fsNormal, c'est caHide (cela ne libère pas la fenêtre mais la cache, en général, c'est le plus pratique, cela permet de gérer soit même la libération par un FreeAndNil) ou une contrainte dans OnCloseQuery !

    Enfin, si Form1 est la 1ère fenêtre créé, il faut faire attention, si elle est considéré comme la MainForm, sa fermeture fermera ton programme (surement juste après la fermeture de Form2 grace au ShowModal)

    On suppose aussi que tu es bien en SDI, que ne mélanges par Modal et MDIChild
    Salut
    j'ai utilisé les process dans l'ordre ci-dessous et le programme n'est plus exécution lorsque je ferme le form2:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    form2.ShowModal;
       form1.Release;
             form1.close;


    Merci

  12. #12
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 534
    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 534
    Points : 25 082
    Points
    25 082
    Par défaut
    Pourquoi tu indentes ?
    Faut indenter quand c'est utile !

    Sinon pourquoi Release ET Close ? En plus l'ordre est maladroit !

    Tu as un problème de MainForm, utilise uniquement Hide , sinon, il faut créer Form2 avant Form1 dans le DPR
    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

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

Discussions similaires

  1. Comment voir les erreurs dans les scripts Ironpython?
    Par PomFritz dans le forum Sharpdevelop
    Réponses: 0
    Dernier message: 02/03/2011, 20h11
  2. [Batch] Comment remplacer le character = dans un script batch ms dos ?
    Par Battosaiii dans le forum Scripts/Batch
    Réponses: 5
    Dernier message: 18/05/2010, 20h23
  3. comment printer un integer dans un script
    Par gouilmi dans le forum Adaptive Server Enterprise
    Réponses: 2
    Dernier message: 15/06/2009, 12h58
  4. Réponses: 8
    Dernier message: 30/08/2006, 10h08
  5. [FLASH MX2004] Comment mettre une pause dans un script
    Par vbcasimir dans le forum Flash
    Réponses: 3
    Dernier message: 16/02/2006, 09h47

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