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 :

problème avec "fsMDIChild"


Sujet :

Langage Delphi

  1. #1
    Membre habitué Avatar de stfanny31
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 254
    Points : 163
    Points
    163
    Par défaut problème avec "fsMDIChild"
    salem
    bon voici mon problème sur le quelle je travaille depuis......4jr , déjà
    mon programme crée une fenêtre FAGENT sur une fénétre mère P1 comme suite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TP1.BTagent1Click(Sender: TObject);
    begin
    FAGENT:=tFAGENT.Create(P1);                  
    fagent.FormStyle:=fsMDIChild;        
    FAGENT.show;                                      
    end;
    mais si cette fenétre fagentje fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    p1.label1.visible:=false;
    cela marche pas
    après longue et longue et très longue reflection j'ai trouvé le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    fagent.FormStyle:=fsNormal;        
    p1.label1.visible:=false;
    fagent.FormStyle:=fsMDIChild;
    cela marche mais le problème est que la fenêtre disparé puis réaparé a nouveau ,ce qui n'est pas vrément classe dans un programme
    quelqu’un a une idée pour m'aidé

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 213
    Points : 41 477
    Points
    41 477
    Billets dans le blog
    63
    Par défaut
    Bonjour

    Pour une fenêtre Child il faut déjà que P1 soit de type fsMDIForm .
    Ensuite , je n'ai jamais essayé mais je crois que on ne peut pas changer le type de fsNormal a fsMDIChild une fois la forme crée .

    Voici comment je faisais (au siècle dernier avec D3)

    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
     
    // TGlobale est déclarée fsMDIForm
    uses Reception, // contient TFormRecept
            Controle    // contient  TQRControle
     
    // une fenêtre enfant (fsMDIChild)
    procedure TGlobale.Reception1Click(Sender: TObject);
    begin
    TFormRecept.Create(Globale);
    end;
     
    // Une fenêtre modale (fsNormal)
    procedure TGlobale.Controler1Click(Sender: TObject);
    var C : TQRControle;
    begin
    C:=TQRControle.Create(nil);
    try
     C.ShowModal;
    finally
     C.Free;
    end;  
    end;
    Attention aux événements onFormClose de la fenêtre enfant a bien mettre Action:=caFree pour 'libérer' celle-ci
    de même au niveau du projet ne pas créer la fenêtre au démarrage (sauf si voulu bien sur)

    Maintenant , après maintes lectures sur le 'faut-il abandonner le MDI ?' sans réponses satisfaisantes , je suis passé au mode "Docking de Formes" a ma grande satisfaction (a quelques détails près)

    Quant à la partie Label de la Forme P1 , j'ai pas trop compris , ce label est visible sous la forme enfant ? a coté ? un p1.Label.repaint ou refresh devrait suffire (je vais faire un petit essai pour le fun )

    Re : Après un essai (D3) et des surprises
    La base : 2 Formes Form1 (MDIForm) et Form2 (MdiChild)
    Form1 contient 1 bouton et un label
    Form2 2 boutons , un pour cacher le label , un pour fermer la forme et faire réapparaitre le label

    1° essai : A l'appel du programme Impossible de voir le label , seulement le bouton ... donc test impossible
    2° essai : Un panel align : alclient contenant le bouton et le label , impossible de voir la fenêtre enfant
    3° essai : le panel aligné à gauche ou a droite , même pas besoin de l'instruction refresh ou repaint juste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm2.Button1Click(Sender: TObject);
    begin
    Form1.Label1.Visible:=False;
    end;
    Re : un essai des modifications des 'styles de forme'

    Curieux , j'ai essayé le changement de type de la forme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    procedure TForm2.Button3Click(Sender: TObject);
    // passage en mode 'Normal' = Undock
    begin
    formStyle:=fsNormal;
    end;
     
    procedure TForm2.Button4Click(Sender: TObject);
    // passage en mode MDI = Dock
    begin
    formStyle:=fsMDIChild;
    end;
    Cela fonctionne à mon grand étonnement
    et cela a presque le même effet qu'un Undocking/Docking

    Moralité : "MDI = Docking de Forme ?"
    En plus : le merge des menus ?
    En moins : Pas de possibilité d'en faire une fenêtre flottante ?
    je vais pas épiloguer davantage

  3. #3
    Membre habitué Avatar de stfanny31
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 254
    Points : 163
    Points
    163
    Par défaut désolé pr le retard
    merci a vous
    désolé pr le retard j"avais des problème de compte
    mais:
    cette solution marche que pr un seul label
    y'a pas une solution plus scientifique

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 213
    Points : 41 477
    Points
    41 477
    Billets dans le blog
    63
    Par défaut
    Citation Envoyé par stfanny31 Voir le message
    1 -cette solution marche que pr un seul label
    2 -y'a pas une solution plus scientifique
    1- Faux j'ai essayé avec plusieurs labels posé dans le panel
    2-ma démarche à défaut d'être 'scientifique' est expérimentale , ce qui est le premier pas de toute démarche scientifique (enfin lorsque l'on a une formation non littéraire)

    N'est ce pas plutôt l'interface utilisateur (le dessin des écrans )qu'il faudrait remettre en cause ?

  5. #5
    Membre habitué Avatar de stfanny31
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 254
    Points : 163
    Points
    163
    Par défaut
    merci a vous Mr SergioMaster

    N'est ce pas plutôt l'interface utilisateur (le dessin des écrans )qu'il faudrait remettre en cause ?
    c'est sur que dans mon projet ,j'ai pas un panel et 2 label
    j'ai un pageControl sur le quelle j'ai mis un plusieurs label et a chaque fois que je clique sur un label j'ai une fenêtre enfant qui apparaît
    j'ai mis un label directement sur le pageControl cela marche mais si je met un deuxième cela marche pas !!!

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 213
    Points : 41 477
    Points
    41 477
    Billets dans le blog
    63
    Par défaut
    Si je comprend bien :
    la forme Principale MDIForm contient un TPageControl ?
    le PageControl a plusieurs onglets ?
    sur un des panels du TPageControl il y a plusieurs TLabels ? ceux-ci servant en gros de Item de Menu pour ouvrir des fenêtres enfants ?
    Ces fenêtres enfants doivent pouvoir cacher un ou plusieurs Labels ?

  7. #7
    Membre habitué Avatar de stfanny31
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 254
    Points : 163
    Points
    163
    Par défaut
    exactement Ca

  8. #8
    Membre habitué Avatar de stfanny31
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 254
    Points : 163
    Points
    163
    Par défaut
    Allo Y'a qulqu'un qui peut m'aidé

  9. #9
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 213
    Points : 41 477
    Points
    41 477
    Billets dans le blog
    63
    Par défaut
    Pleurer ne servira a rien (certains travaillent et ne passent pas leur temps a résoudre les problèmes des autres sur le forum, attention au carton jaune)

    Ceci dit et comme je le supposais , j'ai fait un programme contenant exactement ce que j'ai cité . PageControl se comportant exactement comme le panel (voir 3° essai) le résultat ne s'est pas fait attendre :
    un ou plusieurs labels se cachent ou réapparaissent correctement en fonction de la forme enfant !

    Donc : Avant de donner une solution toute cuite a une étudiante , l'étudiante devrait se prendre par la main et rechercher ses fautes de programmation . Surtout que la solution est déjà dans la discussion

  10. #10
    Membre émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 507
    Points : 2 779
    Points
    2 779
    Billets dans le blog
    10
    Par défaut
    Envoie moi les sources sous forme de zip. Je vais essayer dans l'après midi de te remettre tout celà d'équerre.

  11. #11
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 815
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 815
    Points : 13 532
    Points
    13 532
    Par défaut
    Citation Envoyé par ALWEBER Voir le message
    Envoie moi les sources sous forme de zip. Je vais essayer dans l'après midi de te remettre tout celà d'équerre.
    Ce n'est pas le but de ce forum

  12. #12
    Membre émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 507
    Points : 2 779
    Points
    2 779
    Billets dans le blog
    10
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    Ce n'est pas le but de ce forum
    Sauf si l'on fait profiter les utilisateurs de ce forum de l'expérience tout en respectant la confidentialité éventuelle du programme.

  13. #13
    Inactif
    Homme Profil pro
    Analyste-programmeur Delphi
    Inscrit en
    Décembre 2003
    Messages
    490
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Analyste-programmeur Delphi

    Informations forums :
    Inscription : Décembre 2003
    Messages : 490
    Points : 287
    Points
    287
    Par défaut
    Citation Envoyé par stfanny31 Voir le message
    Allo Y'a quelqu'un qui peut m'aider ?
    Salut Fanny,

    Il faut dire que ton pb n'est très clairement exposé.
    J'ai fait ce que expose dans ton 1er post, et cela fonctionne bien.
    J'ai simplement ajouté un 2e bouton pour faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    p1.label1.visible:=false;
    Je me doute que ce n'est pas exactement ce que tu veux...

    Attention, je suis en XE2, vire les préfixes de unités.

    Fiche mère (FormStyle à fsMDIForm)
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    unit Unit8;
     
    interface
     
    uses
      Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
      Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
     
    type
      TP1 = class(TForm)
        BtnBTagent1: TButton;
        Button1: TButton;
        Label1: TLabel;
        procedure BtnBTagent1Click(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      P1: TP1;
     
    implementation
     
    {$R *.dfm}
     
    uses Unit9;
     
    procedure TP1.BtnBTagent1Click(Sender: TObject);
    begin
      Application.CreateForm(TFAgent, FAgent);
      FAgent.FormStyle := fsMDIChild;
      FAgent.show;
    end;
     
    procedure TP1.Button1Click(Sender: TObject);
    begin
      Label1.Hide;
    end;
     
    end.
    Fiche fille :

    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
     
    unit Unit9;
     
    interface
     
    uses
      Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
      Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
     
    type
      TFAgent = class(TForm)
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      FAgent: TFAgent;
     
    implementation
     
    {$R *.dfm}
     
    end.
    Source du projet :

    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
    program Project8;
     
    uses
      Vcl.Forms,
      Unit8 in 'Unit8.pas' {P1},
      Unit9 in 'Unit9.pas' {FAgent};
     
    {$R *.res}
     
    begin
      Application.Initialize;
      Application.MainFormOnTaskbar := True;
      Application.CreateForm(TP1, P1);
      Application.CreateForm(TFAgent, FAgent);
      Application.Run;
    end.

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

Discussions similaires

  1. [Shell] Problème avec le Back-quote (ksh)
    Par bob94700 dans le forum Linux
    Réponses: 3
    Dernier message: 27/01/2008, 12h45
  2. Sudo problème avec les simples quotes
    Par Tronche dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 23/03/2007, 12h02
  3. [MySQL] Problème avec un double quote
    Par wormseric dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 26/01/2007, 14h44

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