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 :

parent et showmodal


Sujet :

Langage Delphi

  1. #1
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    805
    Points
    511
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 805
    Points : 511
    Par défaut parent et showmodal
    bonjour a tous ,

    je suis sous W7 et XE.

    j'ai besoin de changer le fonctionnement d'une application , ce changement consiste à insérer une fenêtre show-modale dans un panel de la form principale.

    Sous sa forme primaire (avant insertion dans le panel) tout fonctionne bien.

    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
     
    function OuvreArretSurDefaut(Contener:Tpanel;lignedef:integer):integer;
    begin
         result:=0;
         if assigned(FArretSurDefaut) then
         begin
             FArretSurDefaut.Free;
             FArretSurDefaut:=nil;
         end;
         FArretSurDefaut:=TFArretSurDefaut.create(application);
         Try
            FArretSurDefaut.Parent:=Contener;
            FArretSurDefaut.Height:=76;
            FArretSurDefaut.showmodal;
            result:=EtatSortie;
         Finally
             FArretSurDefaut.Free;
             FArretSurDefaut:=nil;
         end;
    end;
    Mon Soucis:
    la fenêtre insérée est show-modale, car elle doit garder la main sur la fiche principale tant qu ont ne l a pas quitté.
    Mais cette dernière perd aussi son focus et l 'application est quittée via un control+alt+sup .

    Est ce normal , avez vous une idée ..?

    merci pour vos réponses.

    mon seul problème est de perdre le focus de la fenêtre insérée

  2. #2
    Membre confirmé Avatar de JustMe
    Inscrit en
    Juillet 2002
    Messages
    479
    Points
    594
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 479
    Points : 594
    Par défaut
    Je pense que c'est normal, Un showModal est utilisé pour qu'une forme se comporte comme une boite de dialogue.
    La méthode ShowModal tend à désactiver toute autre forme jusqu'à sa fermeture donc dans ton cas désactiver la forme principale qui est le parent de ta forme modale ce qui va entrainer sa désactivation.
    Donc tu ne lui met aucun Parent c'est plus simple.

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 838
    Points
    25 910
    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 838
    Points : 25 910
    Par défaut
    Parent et Modale en même temps !
    Il fallait oser !
    Surtout qu'avec SetParent de la TForm, cela fait en sorte que le Focus reste au Parent
    Utilise Windows.SetParent, avec le HWND, cela laissera le Focus à ta sous-fenêtre mais provoquera peut-être d'autres effets de bord (en particulier sur les DBControls qui utilise le Exit pour se mettre à jour et qui n'est pas forcément bien détecté entre fenêtre)

    Tu peux très bien utiliser un Show normale mais verrouiller le reste de la fenêtre (en jouant sur des Panels ou GroupBox qui regroupent les contrôles que tu souhaites bloquer le temps de la sous-fenêtre)
    Cela éviterait des DeadLock de ce genre

    A mon avis, tu as un gros problème d'ergonomie, faudrait que tu repenses ton écran pour guider l'utilisateur mais pas le bloquer ainsi !

  4. #4
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    805
    Points
    511
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 805
    Points : 511
    Par défaut
    Merci les gars,

    Je me doutai devenir un peu gourmand avec des fenêtres modales et leurs parents, surtout que j'avais déjà essayer sans succès , mais peut être que quelqu'un avait trouvé une astuce !! .

    J'avais pensé aussi à la méthode consistant à désactiver tous les contrôles de la form1 et ne laisser que ceux de la form2 qui du coup n'aurai plus besoin d''être modale, mais c'est bien de son "modal" que j'ai besoin.

    Mon besoin est le suivant.
    Afficher une fiche (form2) avec n boutons de décision qui bloquera un séquenceur dans form1 et cela tant que fom2 est modale.

    mes solutions:
    1° Rester comme cela marche actuellement, pas d''imbrication de form2 dans form1.
    2° Positionner simplement la form2 en couverture du panel de form1 , cela devrai aller tant que la fiche sera ni redimensionner, ni déplacer (visuel assez moyen)
    3° La solution de ShaiLeTroll : Utiliser Windows.SetParent et le HWND, si je trouve des infos sur cela .. et surement vais je trouver mon bonheur ici ! .

    En plus ce choix étant directement lié a un choix design et de temps de codage .. ça risque de tourner court.

    Merci pour vos réponses qui affirment mes essais.

  5. #5
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    805
    Points
    511
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 805
    Points : 511
    Par défaut
    re salut,

    La solution sera la 2.
    la form2 étant sans bordure et la form1 n'ayant plus le focus, cela règle les problèmes liés au déplacement et redimensionnement de la form1 avec form2 dessus.
    Cela ne pourra se refaire qu'une fois la form2 fermé.

    bye.

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

Discussions similaires

  1. Parent et Create
    Par Arrown dans le forum Composants VCL
    Réponses: 4
    Dernier message: 09/10/2003, 12h13
  2. Comment reloader la frame parent?
    Par mythtvtalk.com dans le forum ASP
    Réponses: 3
    Dernier message: 27/08/2003, 12h40
  3. [Kylix] Utilisation de ShowModal()
    Par _dack_ dans le forum EDI
    Réponses: 3
    Dernier message: 01/07/2003, 10h36
  4. Conception d'une classe parente
    Par VincentB dans le forum Langage
    Réponses: 9
    Dernier message: 24/06/2003, 18h28
  5. DLL, affichage et parent...
    Par KRis dans le forum Composants VCL
    Réponses: 6
    Dernier message: 13/12/2002, 18h01

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