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
    744
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 744
    Points : 500
    Points
    500
    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
    Bye et bon code...

    Ce n'est pas tant l'aide de nos amis qui nous aide , mais notre confiance dans cette aide .

  2. #2
    Membre confirmé Avatar de JustMe
    Inscrit en
    Juillet 2002
    Messages
    479
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 479
    Points : 593
    Points
    593
    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.
    <On fait la science avec des faits, comme on fait une maison avec des pierres : mais une accumulation de faits n'est pas plus une science qu'un tas de pierres n'est une maison> **Poincaré**

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 447
    Points : 24 849
    Points
    24 849
    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 !
    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
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    744
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 744
    Points : 500
    Points
    500
    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.
    Bye et bon code...

    Ce n'est pas tant l'aide de nos amis qui nous aide , mais notre confiance dans cette aide .

  5. #5
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    744
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 744
    Points : 500
    Points
    500
    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.
    Bye et bon code...

    Ce n'est pas tant l'aide de nos amis qui nous aide , mais notre confiance dans cette aide .

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

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