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 :

petit problème de formshow


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 98
    Par défaut petit problème de formshow
    Bonjour,

    Je vous explique mon pb.
    J'ouvre une fiche (Fiche1) en showmodal. dans le onshow de cette fiche, j'ouvre une autre fiche (Fiche2) en showmodal.
    Je voudrais que quand on clique sur annuler de Fiche2, cela annule/ferme aussi Fiche1 mais impossible, je ne trouve pas de moyen d'y arriver.

    Suite à un autre post sur un sujet similaire, j'ai essayé de fermer ma fiche dans le activate, cela ferme bien la fiche mais le prog reste bloqué car en suivant le point d'arrêt il va dans le formshow, ensuite dans le activate, ensuite il revient dans le TCustomForm.ShowModal après le show. Donc le modalresult est remis à 0 et il attend un évènement qui ne viendra jamais car la fiche est fermée...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        Show;
        try
          SendMessage(Handle, CM_ACTIVATE, 0, 0);
          ModalResult := 0;
          repeat
            Application.HandleMessage;
            if Application.FTerminate then ModalResult := mrCancel else
              if ModalResult <> 0 then CloseModal;
          until ModalResult <> 0;
    planchez bien la-dessus pendant le week-end ;-)
    et sur ce, Joyeux Noël

    Isa

  2. #2
    Membre émérite Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Par défaut
    Citation Envoyé par isachat666
    Bonjour,

    Je vous explique mon pb.
    J'ouvre une fiche (Fiche1) en showmodal. dans le onshow de cette fiche, j'ouvre une autre fiche (Fiche2) en showmodal.
    Je voudrais que quand on clique sur annuler de Fiche2, cela annule/ferme aussi Fiche1 mais impossible, je ne trouve pas de moyen d'y arriver.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.FormShow(Sender: TObject);
    begin
      if Form2.Showmodal = mrCancel then
        self.Close;
    end;

  3. #3
    Membre Expert
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 288
    Par défaut
    Bonjour,

    Isa, si ta fiche 1 est ta Form principale, un simple :

    Sut ton bouton Annuler doit suffire.

    Mais je ne dois pas avoir tout saisi

  4. #4
    Membre émérite Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 16
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Par défaut
    La réponse de Slimjoe semble correcte.
    C'est l'idée d'isa qui me paraît être d'une autre galaxie !

    Joyeuse Pâques !

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 98
    Par défaut
    oui l'idée de Slimjoe est tout à fait correcte, cependant si la solution était si simple que cela je n'aurais pas besoin de vos lumières
    La fiche étant affichée en modal le close ne fait que mettre le modalresult à mrcancel sans fermer la fiche, ensuite l'exécution du onshow se poursuit et je suis de retour à la case départ (le modalresult est remis à zéro et ma fiche est toujours affichée...)
    Mon idée n'est pas d'une autre galaxie, c'est la façon dont le programme a été conçu qui vient d'ailleurs............. et je dois juste m'adapter, mais pour ce point là je ne trouve pas de solution. Evidemment si je fais un show au lieu d'un showmodal ça fonctionne mais la fenêtre ne se comporte plus du tout comme je le souhaite pour les autres actions....
    Isa

  6. #6
    Membre Expert

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

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

    Informations forums :
    Inscription : Août 2002
    Messages : 1 296
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    procedure TForm1.FormShow(Sender: TObject);
    begin
      if Form2.Showmodal = mrCancel then
        ModalResult := mrCancel; // Mettre le résultat que l'on veut (None etc ...)
    end;

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 98
    Par défaut
    Citation Envoyé par Linkin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    procedure TForm1.FormShow(Sender: TObject);
    begin
      if Form2.Showmodal = mrCancel then
        ModalResult := mrCancel; // Mettre le résultat que l'on veut (None etc ...)
    end;
    J'avais bien compris merci
    mais ce que j'explique c'est que cela ne fonctionne pas dans mon cas. Quelle que soit la valeur qu'on affecte à modalresult, le modalresult est remis à zéro dans le TCustomForm.ShowModal ...
    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
     
    .../...
      try
        Show; //mon FormShow s'exécute modalresult = mrcancel tout est ok
        try
          SendMessage(Handle, CM_ACTIVATE, 0, 0);
          ModalResult := 0; //retour à la case départ et la fiche n'est pas fermée...
          repeat
            Application.HandleMessage;
            if Application.FTerminate then ModalResult := mrCancel else
              if ModalResult <> 0 then CloseModal;
          until ModalResult <> 0;
          Result := ModalResult;
          SendMessage(Handle, CM_DEACTIVATE, 0, 0);
          .../...
    c plus clair comme ça ?
    Isa

  8. #8
    Membre émérite Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Par défaut
    Salut!

    Je n'ai probablement pas bien compris le problème alors j'ai une question :

    Citation Envoyé par isachat666
    J'ouvre une fiche (Fiche1) en showmodal. dans le onshow de cette fiche, j'ouvre une autre fiche (Fiche2) en showmodal.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
      try
        Show; //mon FormShow s'exécute modalresult = mrcancel tout est ok
        try
          SendMessage(Handle, CM_ACTIVATE, 0, 0);
          ModalResult := 0; //retour à la case départ et la fiche n'est pas fermée...
          repeat
            Application.HandleMessage;
            if Application.FTerminate then ModalResult := mrCancel else
              if ModalResult <> 0 then CloseModal;
          until ModalResult <> 0;
          Result := ModalResult;
          SendMessage(Handle, CM_DEACTIVATE, 0, 0);
    Où est le ShowModal ?

    Je me trompe peut-être (et ça ne serait pas la 1ère foi ) mais je crois que tu ne pourras pas utiliser le ModalResult si la fiche n'est pas modale (Show ce n'est pas ShowModal).

  9. #9
    Membre Expert

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

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

    Informations forums :
    Inscription : Août 2002
    Messages : 1 296
    Par défaut
    Ce code est le code de la VCL pour ShowModal.

Discussions similaires

  1. un petit problème d'algo
    Par supertramp dans le forum Algorithmes et structures de données
    Réponses: 22
    Dernier message: 12/10/2004, 20h13
  2. Petit problème de décimales !
    Par ridan dans le forum Langage SQL
    Réponses: 5
    Dernier message: 11/09/2004, 21h24
  3. Réponses: 17
    Dernier message: 13/07/2004, 20h37
  4. petit problème premier plan, arrière plan
    Par gros bob dans le forum OpenGL
    Réponses: 4
    Dernier message: 19/04/2004, 12h00
  5. [jointure] Petit problème sur le type de jointure...
    Par SteelBox dans le forum Langage SQL
    Réponses: 13
    Dernier message: 13/02/2004, 18h55

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