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

Composants VCL Delphi Discussion :

boucle sur composant memo


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Inactif  
    Inscrit en
    Février 2004
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 97
    Par défaut boucle sur composant memo
    J'ai simplifié mon programme de façon à être clair.
    Soit :
    - une form avec 3 memos (chacun avec 4 lignes données)
    - un memo devant recueillir les données d'un des 3 memos choisis grace à un Mainmenu (choix 1, choix2, choix 3)

    La bizarrerie qui provient d'une erreur de programmation c'est que
    lorsque je fais un choix : exemple ch2 (j'ai choisi le memo2 contenant 4 lignes avec F - ligne 1,
    G - ligne 2
    H - ligne 3
    J - ligne 4

    je n'obtiens QUE l'écriture des 2 premières lignes (de memo2) dans le memo4 qui recueille les données de memo2 choisi. Soit : F et G . C'est tout !
    Idem pour le même essai avec memo1 ou memo 3 ... je n'ai que les 2 premières lignes !

    D'où vient mon erreur ?

    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
    procedure traite (num :integer);
     var  j : integer;
    begin
     
       If  Form1.Components[num] IS Tmemo then
           for j:=0 to 3 do                // parcours les 4 lignes du memo choisi
           Form1.Memo4.Lines[j]:=(form1.Components[num] as Tmemo).Lines[j] ;
     
    end;
     
     
    // choix des memos (dans le mainmenu1)
     
    procedure TForm1.ch1Click(Sender: TObject);
    begin
    num_etal:=1;
    traite (num_etal-1);
    end;
     
    procedure TForm1.ch2Click(Sender: TObject);
    begin
    num_etal:=2;
    traite (num_etal-1);
    end;
     
    procedure TForm1.ch3Click(Sender: TObject);
    begin
    num_etal:=3;
    traite (num_etal-1);
    end;
    ********************* Merci d'avance !

  2. #2
    Expert confirmé
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 944
    Par défaut
    En ignorant volontairement le code "simplifié" que tu fournis (tu as peut-être enlevé les erreurs...), qq remarques:

    -prévoir un clear du Memo4
    - tu références les memos sources comme si tu étais certain que ce sont les composants 0, 1 et 2 de ta fiche. est-ce vraiment le cas ?
    - pourquoi ne pas utiliser FindComponent ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FindComponent("MonMemo"+IntToStr(num))....
    qui permet de s'affranchir du n° de composant...

    - les TMemos disposent d'une propriété Text (= tout le contenu)

  3. #3
    Inactif  
    Inscrit en
    Février 2004
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 97
    Par défaut
    Merci de la réponse qui précède.
    Effectivement je peux envisager une autre écriture du code.

    Mais l'erreur n'est pas trouvée... et j'aime bien comprendre où ça coince !
    Dans cet exemple basique je suis certain des numéros du composant sélectionné. (les contenus des memo1, 2, 3 sont différents)
    Et je vois bien les 2 premières lignes en vérification dans le memo4.
    Mais pourquoi 2 lignes seulement ... Mystère.

  4. #4
    Inactif  
    Inscrit en
    Février 2004
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 97
    Par défaut
    Le mystère s'épaissit (pour moi) ...

    J'ai ajouté dans ma procédure "traite" la ligne suivante :

    et cette fois ... je n'ai plus que la 1ère ligne du memo choisi !!!

    les 3 suivantes attendues ne sont pas au rendez-vous.

    BIGRE !

  5. #5
    Inactif  
    Inscrit en
    Février 2004
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 97
    Par défaut
    Merci encore à QI130 (attention je suis psychologue !!) qui m'a permis d'écrire un code valide avec findcomponent.

    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
    Procedure Traite(N : integer);
    Var
            ligne:string;
            cpte, j , nb_ligne : Integer;
     
    Begin
        Form1.memo4.clear;
     
    For j:= 1 to 1 do
       Begin
        For nb_ligne:= 0 to  (Form1.findComponent('memo'+ intTostr(N)) As Tmemo).lines.count-1 DO
         begin
         ligne:=(Form1.findComponent('memo'+ intTostr(N)) As Tmemo).Lines[nb_ligne];
     
         form1.Memo4.lines.Add(ligne);
     
         end;
       End;
     
    End;
     
    procedure TForm1.Ch11Click(Sender: TObject);
    begin
      num:=1;
      traite(num);
    end;
     
    procedure TForm1.Ch21Click(Sender: TObject);
    begin
      num:=2;
      traite(num);
    end;
    Mais je ne mets pas encore la balise "RESOLU" car ma question reste sans réponse ... pour l'instant !

  6. #6
    Membre éprouvé
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Par défaut
    A mon avis, tu as résolu ton problème, car justement,

    Les components[ x ] ne correspondaient pas forcément pile à tes mémo X.

    (il suffit que tu poses un composants entre temps, pour que components[ i ] soit décalé ou plus le même qu'avant...) vu que tu teste seulement

    is TMemo

    et que tu ne t'assures pas que c'est LE bon mémo

    si tu traces ton progs, que au moment voulue, tu regardes
    form1.Components[num].Name

    je pense que tu auras des surprises
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

Discussions similaires

  1. boucle sur tout les composant de la page html
    Par patricktoulon dans le forum VBScript
    Réponses: 0
    Dernier message: 13/07/2013, 16h54
  2. [XSLT] Faire une boucle sur une variable [i]
    Par PoT_de_NuTeLLa dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 07/06/2010, 12h45
  3. Boucle sur un composant
    Par ppb31 dans le forum Développement de jobs
    Réponses: 7
    Dernier message: 24/11/2009, 17h27
  4. Réponses: 2
    Dernier message: 19/03/2009, 13h54
  5. Simuler un coup de molette sur un memo...
    Par dynobremo dans le forum Composants VCL
    Réponses: 2
    Dernier message: 28/02/2003, 11h31

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