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 :

numérotation des composants par un boucle


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Inscrit en
    Avril 2010
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 102
    Par défaut numérotation des composants par un boucle
    Salut

    Je ne sais pas pourquoi ce code ne fonctionne pas !!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    For H := 1 to 45 do
    begin
    if (Form8.Components[H] is TQRLabel) then
    begin
    TQRLabel(Form8.Components[H]).Caption := '';
    end;
    end;

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 932
    Billets dans le blog
    6
    Par défaut
    En quoi ne fonctionne-t-il pas ?
    1) Il ne trouve pas tous les QRLabels ? S'il y en a 45 et d'autres composants sur la fiche, il faudrait qu'ils aient les indices 1 à 45 pour que ça fonctionne.
    2) En mettant le Caption à vide, ils ne sauraient être numérotés.

    Il vaudrait mieux parcourir tous les composants de la fiche de 0 à ComponentCount-1, tester s'il s'agit d'un TQRLabel, puis lui affecter quelque chose. L'inconvénient est qu'on risque de ne pas les avoir dans l'ordre, si c'est nécessaire.

    S'il s'agit d'adresser tous les TQRlabels nommés de QRLabel1 à QRLabel45 (et seulement eux), utiliser la méthode précédente en testant le nom, ou utiliser la méthode FindComponent de la fiche avec le nom voulu.

    Pour autre chose, la question était par trop vague, mais il est temps de la préciser.
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  3. #3
    Membre actif
    Inscrit en
    Avril 2010
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 102
    Par défaut
    Citation Envoyé par tourlourou Voir le message
    1)S'il y en a 45 et d'autres composants sur la fiche
    même problème


  4. #4
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 604
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    le TQRLabel me met la puce à l'oreille, il doit s'agir de Quickreport et, à ma souvenance ces composants ont un TQuickreport comme parent et non une forme

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

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 541
    Billets dans le blog
    10
    Par défaut
    Tu as besoin d'une procedure récursive. En voici un exemple que tu peux adapter à ton besoin

    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
     
      function Enumere(stNom: string; c1: TComponent): string;
      var
        i1: Integer;
      begin
        result := '';
        if c1.Name <> '' then
          result := c1.Name + ':' + c1.ClassName;
        for i1 := 0 to c1.ComponentCount - 1 do
          Enumere(stNom, c1.Components[i1]);
        if result <> '' then
          sl1.Add(stNom + '.' + result);
        result := '';
      end;
     
      procedure ParcoureForm(stNom: string; c1: TComponent);
      begin
        repeat
          if assigned(c1) then
            st1 := Enumere(stNom, c1)
          else
            showMessage(stNom);
        until st1 = '';
      end;
     
    ...
       ParcoureForm('Form8', Form8);

  6. #6
    Membre Expert Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Par défaut
    La solution d'ALWEBER est certainement la bonne, il faut que tu notes au passage 2 informations très importantes :
    • Les boucles commencent à 0
    • 45, 465 ... tu va être hors des limites, il y a ComponentCount pour ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For H := 0 to Form8.ComponentCount-1 do

  7. #7
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 604
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    je n'ai pu que vérifier avec version D3
    une forme simple avec un bouton, un memo, un Quickreport contenant un QRLabel avec valeur (caption) de départ de départ QRLabel1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure TForm1.Button1Click(Sender: TObject);
    var i : integer;
    begin
    Memo1.clear;
    for i:=0 to componentcount-1 do
     begin
      memo1.lines.Add(Components[i].Name);
      if Components[i] is TQRLabel then
        TQRLabel(Components[i]).Caption:='Changed';
     end;
    Quickrep1.Preview;  
    end;
    résultat, contrairement à mes souvenirs, le QRLabel appartient bien à la forme

    Nom : Capturer.PNG
Affichages : 303
Taille : 10,0 Ko

    Mais, attention, la version de Delphi, comme celle de quickreport peut totalement changer la donne

Discussions similaires

  1. Comment ajouter des composants par un click ?
    Par haraelendil dans le forum Composants
    Réponses: 11
    Dernier message: 18/08/2008, 18h49
  2. création des DDLs par une boucle for
    Par sophiesophie dans le forum C#
    Réponses: 27
    Dernier message: 29/05/2008, 11h29
  3. redimensionnement des composants par l'utilisateur
    Par osoumayaj dans le forum JBuilder
    Réponses: 2
    Dernier message: 05/10/2006, 10h15
  4. ouvrire des fichiers par un boucle for
    Par stiko dans le forum C++
    Réponses: 5
    Dernier message: 08/07/2006, 15h14
  5. Réponses: 5
    Dernier message: 03/02/2006, 12h12

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