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 :

MDI : acceder à un composant sur toutes les form enfant


Sujet :

Delphi

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 549
    Points : 226
    Points
    226
    Par défaut MDI : acceder à un composant sur toutes les form enfant
    Bonjour

    J ai une appli mdi avec une form enfant (form3)... le clic sur un bouton affiche une form2 en showmodal (elle est cree avec le main et visible=false)

    J aimerais au clic sur cette form2, pouvoir modifier tous les edits dont le nom est ed_erase_line de toutes les form3 crees. Cet evenement me permettant (onchange) d'acceder à la procedure desiree

    j ai bien tenté ça mais ça ne produit aucun resultat...enfin pas celui souhaité...

    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
     for I := 0 to MdiChildCount - 1 do
        begin
          if MDIChildren[I] is tform3 then
          begin
            with MaForm as tform3 do
            begin
              for J := 0 to MaForm.ComponentCount - 1 do
              begin
                if MaForm.Components[J] is TEdit then
                begin
                  with MyEdit as TEdit do
                  begin
                    if MyEdit.Name = 'ed_erase_line' then
                      MyEdit.Text := '33';
                  end;
                end;
              end;
            end;
          end;
        end;
    l'ideal serait bien entendu que j'accede directement à la procedure erase_line(no_line) de toutes les forms3 crees...

    un peu d aide serait bienvenue....
    merci

    stephane

  2. #2
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 036
    Points : 40 941
    Points
    40 941
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    il me semble que le problème dans ton code est que tu n'utilises pas les formes 'pointées" par MDIChildren ou alors il manque une ligne dans 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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // MaForm : Tform3; ?
    // myEdit : TEdit;
    
     for I := 0 to MdiChildCount - 1 do
        begin
          if MDIChildren[I] is tform3 then
          begin
            MaForm:=MDIChildren[I] as Tform3;
            with MaForm as tform3 do // le with me semble de trop
            begin
              for J := 0 to MaForm.ComponentCount - 1 do
              begin
                if MaForm.Components[J] is TEdit then
                begin
                  MyEdit:=MaForm.Components[J]; 
                  with MyEdit as TEdit do  // idem with en trop
                  begin
                    if MyEdit.Name = 'ed_erase_line' then
                      MyEdit.Text := '33';
                  end;
                end;
              end;
            end;
          end;
        end;
    autre remarque , il est un peu 'bête' de faire une recherche sur tous les composants de la forme alors qu'on en cherche qu'un dont on connait le nom , donc , plutôt qu'une boucle sur les composants de MaForme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MyEdit:=TEdit(MaForm.FindComponent('Edit1'));
      If MyEdit<>Nil then MyEdit.Text:='33';
    on pourrait donc peut être compacter tout ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    for I := 0 to MdiChildCount - 1 do
        begin
          if MDIChildren[I] is tform3 then   
          begin 
             TEdit(MDIChildren[i].FindComponent('Edit1'));
      If MyEdit<>Nil then MyEdit.Text:='33';
          end;
        end;
    l'ideal serait bien entendu que j'accede directement à la procedure erase_line(no_line)
    sans Delphi sous la main pour tester , je pense que le principe restera le même

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    for I := 0 to MdiChildCount - 1 do
        begin
          if MDIChildren[I] is tform3 then   
          begin 
             MDIChildren[i].erase_line(33); // le problème étant le no_line 
          end;
        end;
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 549
    Points : 226
    Points
    226
    Par défaut
    Merci

    Le pb venait aussi du fait que je comptais les fenetres filles dans une autre fenetre que la mere...donc j avais toujours 0,pourtant elles avaient été crees par create(application)...je pensais qu'elles etaient accessible partout.

    au clic sur mon bouton dans la fenetre cree :
    et, dans le mainform:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TForm1.RazGrids;
    var
      I: integer;
      MaForm: tform3;
    begin
      for I := 0 to MdiChildCount - 1 do
        if MDIChildren[I] is tform3 then
        begin
          MaForm := MDIChildren[I] as tform3;
          MaForm.erase_line(33);
        end;
    effectivement les with sont en trop...

    Merci

    Je mets resolu mais une petite question malgré tout:
    Est il possible de boucler sur les MdiChild depuis une autre form que le main ?
    J entends par autre form une fille ou une fenetre non child ?

  4. #4
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 036
    Points : 40 941
    Points
    40 941
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par sp2308 Voir le message
    Je mets resolu mais une petite question malgré tout:
    Est il possible de boucler sur les MdiChild depuis une autre form que le main ?
    J entends par autre form une fille ou une fenetre non child ?
    ben oui , il suffit d'indiquer la form "parente"

    MainForm.MdiChildCount;
    MainForm.MDIChildren[i];
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 549
    Points : 226
    Points
    226
    Par défaut
    Merci.
    Je savais avec les forms Child, mais je n imaginais pas que cela etait possible avec les autres forms (pas mdi)...

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 28/06/2014, 19h40
  2. boucle sur tout les composant de la page html
    Par patricktoulon dans le forum VBScript
    Réponses: 0
    Dernier message: 13/07/2013, 16h54
  3. Réponses: 2
    Dernier message: 30/01/2009, 14h01
  4. Trouer les textures sur toutes les formes
    Par sivaller dans le forum OpenGL
    Réponses: 2
    Dernier message: 02/06/2008, 10h50
  5. Modifier les alias sur toutes les form
    Par mozcity dans le forum Bases de données
    Réponses: 2
    Dernier message: 06/10/2006, 08h08

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