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 :

ComponentCount à problème


Sujet :

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 ComponentCount à problème
    J'ai un petit programme avec sur la FORM :
    - 8 RadioButton,
    - 1 Memo
    - 4 Button

    A certains moment je cherche à savoir quel RadioButton est coché.
    J'utilise le code suivant pour déterminer son index :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for i := 0 to ComponentCount -1 do
              if Components[i] is TRadioButton then
                with  Components[i] as TRadioButton do
                   if CHECKED then numero_radio:=i;
     
                    numero_radio:=numero_radio-1;
    Dans ce cas je suis obligé d'enlever 1 pour avoir le bon index.

    Problème : si je rajoute un simple LABEL à ma FORM le numéro n'est plus bon !
    (Il faut enlever 2 !!)
    Que se passe-t-il donc ? Mon nb de buttonRadio ne varie pas pourtant.
    MERCI de vos explications éclairées ...

  2. #2
    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
    Bonjour,

    Ce numéro est pour quel usage après ce traitement ?
    Car si l'usage est pour un FindComponent après ta boucle, ceci est normal.
    Ce sera meme de plus en plus aléatoire.

    Quand on pose des composants, il sont nommés automatiquement
    'Label1', Label2'...
    'RadioButton1', RadioButton2' ..

    Components[ 0 ] peut être le composant nommé 'Label1'
    Components[ 1 ] peut être le composant 'nommé' RadioButton3'

    --> auquel cas, le 1 de Label1 n'a rien a voir avec l'indice du tableau de composant 0

    Enfin, si j'ai bien compris ton interrogation

    Donc au lieu de sauver l'indice, il te faut sauver le nom du composant pour l'utiliser dans le FindComponents éventuellement.
    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 ;-)

  3. #3
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 938
    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 938
    Billets dans le blog
    6
    Par défaut
    à quoi peut donc bien te servir d'avoir l'index ?

    mieux vaut garder un pointeur
    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 !

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Luxembourg

    Informations forums :
    Inscription : Septembre 2006
    Messages : 6
    Par défaut
    Essaye avec l'évenement OnClick sur tes RadioButton comme ceci.
    ce petit progr. ne fait qu'afficher le numéro du Radio qui a été clické en dernier mais tu peux faire appel à la même fonction dans chaque procédure sans oublier un paramètre "NrChecked".

    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
     
    type
      TForm1 = class(TForm)
        RadioButton1: TRadioButton;
        RadioButton2: TRadioButton;
        RadioButton3: TRadioButton;
        RadioButton4: TRadioButton;
        RadioButton5: TRadioButton;
        RadioButton6: TRadioButton;
        RadioButton7: TRadioButton;
        RadioButton8: TRadioButton;
        Button1: TButton;
        procedure RadioButton1Click(Sender: TObject);
        procedure RadioButton2Click(Sender: TObject);
        procedure RadioButton3Click(Sender: TObject);
        procedure RadioButton4Click(Sender: TObject);
        procedure RadioButton5Click(Sender: TObject);
        procedure RadioButton6Click(Sender: TObject);
        procedure RadioButton7Click(Sender: TObject);
        procedure RadioButton8Click(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
        NrChecked : integer;
      public
        { Public declarations }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.RadioButton1Click(Sender: TObject);
    begin
        NrChecked := 1;
    end;
     
    procedure TForm1.RadioButton2Click(Sender: TObject);
    begin
    NrChecked := 2;
    end;
     
    procedure TForm1.RadioButton3Click(Sender: TObject);
    begin
    NrChecked := 3;
    end;
     
    procedure TForm1.RadioButton4Click(Sender: TObject);
    begin
    NrChecked := 4;
    end;
     
    procedure TForm1.RadioButton5Click(Sender: TObject);
    begin
    NrChecked := 5;
    end;
     
    procedure TForm1.RadioButton6Click(Sender: TObject);
    begin
    NrChecked := 6;
    end;
     
    procedure TForm1.RadioButton7Click(Sender: TObject);
    begin
    NrChecked := 7;
    end;
     
    procedure TForm1.RadioButton8Click(Sender: TObject);
    begin
    NrChecked := 8;
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      ShowMessage('Num Checked : ' + IntToStr(NrChecked));
    end;
     
    end.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 129
    Par défaut
    Pourquoi ne pas utiliser le tag des radiosbouttons pour les referencer?
    parce que la l'index de composant c'est pas le top à mon avis


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for i := 0 to ComponentCount -1 do
              if Components[i] is TRadioButton then
                with  Components[i] as TRadioButton do
                   if CHECKED then numero_radio:=Components[i].tag;
    Mais bon il faudrait en savoir plus sur le but/besoin pour faire un truc plus carré.

    edit:j'avais pas fait gaffe, mais pour les radios bouttons, logiquement un seul doit etre coché sur le controle non? j'ai pas delphi sous la main, mais normalement tu as une propriété du controle qui englobe les radios pour savoir lequel est coché, tout simplement.

  6. #6
    Inactif  
    Inscrit en
    Février 2004
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 97
    Par défaut
    En fonction du numéro repéré j'ouvre un fichier texte associé qui est affiché dans un memo.

    Ex : pour RadioButton1 j'ouvre Memo_truc1.txt
    pour Radiobutton2 : memo_truc2.txt etc...

    La réponse de Malone me paraît intéressante.
    Celle de Tic Tac Toe donne l'explication du phénomène.

    Merci à tous.
    Il faut que je teste l'usage de "tag" avant de marquer résolu.

  7. #7
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 938
    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 938
    Billets dans le blog
    6
    Par défaut
    et si tu appelais tes RadioButton "Memo_Truc1.txt" etc et récupérais le RadioButton Sender d'un OnClick :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    with Sender as TRadioButton do Fichier:=Name;
    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 !

  8. #8
    Inactif  
    Inscrit en
    Février 2004
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 97
    Par défaut
    Usage de tag : plus possible pour moi vu que je l'utilise déjà (créé dynamiquement pour un autre usage --> mon post précédent!)

    Tourlourou : c'est une idée ... Je regarde. mais je ne fais pas de click sur le RadioButton pour cet usage : uniquement pour appeler le texte du memo qui s'affichera.
    J'ai besoin de savoir combien j'ai de Radiobutton VISIBLES à un certain moment lorsque je veux en créer un dynamiquement : par un click sur simple Button nommé par ex. "Ajout d'un mémo" ou "Suppression d'un memo"

    En fait j'aurai dû utiliser un RadioGroup !!! (Les items m'auraient sauvé la mise je crois)

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

Discussions similaires

  1. Problème d'installation oracle 8.1.7 sous NT
    Par Anonymous dans le forum Installation
    Réponses: 7
    Dernier message: 02/08/2002, 14h18
  2. Problème d'impression
    Par IngBen dans le forum C++Builder
    Réponses: 7
    Dernier message: 22/05/2002, 11h37
  3. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10
  4. Réponses: 6
    Dernier message: 25/03/2002, 21h11

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