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 :

FindComponent avec TListBox


Sujet :

Delphi

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 41
    Points : 27
    Points
    27
    Par défaut FindComponent avec TListBox
    Bonjour,

    Je regardais le forum et je suis tombé sur la commande FindComponent

    J'ai voulu la mettre en application : pour les edit, label, c'est ok. Mais pour un listbox, gros bug. Pourquoi ???
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     TListBox(FindComponent('ListBox'+IntToStr(i))).Items.Add('e');
    Merci

    PS : je ne sais pas si je dois mettre ce message en 'debutant' ou 'composant'

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 71
    Points : 102
    Points
    102
    Par défaut
    Salut,
    ton code marche si le nom existe, sinon message d'erreur
    il faut vérifier que le composant existe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    var
        ListBox : TListBox;
    ...
    ListBox := TListBox(FindComponent('ListBox'+IntToStr(I)));
    if ListBox <> nil then
        ListBox.Items.Add('e')
    else
        ShowMessage(Format('Le ListBox N°%d n''existe pas!',[I]));
    maintenant tu devrais trouver ton problème
    @+

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 41
    Points : 27
    Points
    27
    Par défaut
    Il est là mon probleme, il ne trouve pas mon ListBox1
    J'ai un ListBox1 et un ListBox2

    J'ai meme essayé avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ListBox := TListBox(FindComponent('ListBox1'));
    if ListBox <> nil then ListBox.Items.Add('e')
    else ShowMessage(Format('Le ListBox N°%d n''existe pas!',[I]));

  4. #4
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    FindComponent est une méthode de TComponent.

    Quel est ce composant au moment de l'appel ? Autrement dit, que représente Self ?
    La fiche (TForm)?

    @+

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 41
    Points : 27
    Points
    27
    Par défaut
    Salut

    FindComponent est une méthode de TComponent.

    Quel est ce composant au moment de l'appel ? Autrement dit, que représente Self ?
    La fiche (TForm)?
    Bon, apres avoir fait des recherches sur le net pour comprendre ta question, je dirai que c'est Form1 qui sera chargé d'afficher le composant ListBox1

    Chaque fois que je suis dans la partie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if Fields[0].AsString='2010'
    J'ai 'bug' qui s'affiche. Pour simplifier, j'ai enlever 'i' pour le remplacer par 'ListBox1', le but étant de comprendre mon erreur.

    Merci pour votre aide

    Sinon, je t'ai mis le bout de 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
    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
     
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ADODB, DB, StdCtrls;
     
    type
      TForm1 = class(TForm)
        DataSource1: TDataSource;
        ADOConnection1: TADOConnection;
        ADOTable1: TADOTable;
        ADOQuery1: TADOQuery;
        DataSource2: TDataSource;
        ListBox1: TListBox;
        procedure FormCreate(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.FormCreate(Sender: TObject);
    var ListBox : TListBox;
    begin
       With ADOQuery1 do
          begin
              SQL.Clear;
              SQL.Add('Select Adhesion, Nom From KB');
              Open;
              while not ADOQuery1.Eof do
                begin
                    if Fields[0].AsString='2010' then
                      begin
                          ListBox := TListBox(FindComponent('ListBox1'));
                          if ListBox <> nil then
                            ListBox.Items.Add('Non renouvellant')
                          else
                            ShowMessage('bug !');
                      end
                    else
                      ListBox1.Items.Add(Fields[1].AsString);
                    ADOQuery1.Next;
                end;
     
          end;
       close;
    end;
     
    end.

  6. #6
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Points : 4 384
    Points
    4 384
    Par défaut


    @Claudius: bien vu!
    @yannba: d'après ton code, puisque tu utilise l'intruction ton appel à FindComponent fait donc appel à la méthode Findcomponent de ADOQuery1, or ce dernier ne contient pas de composant ListBox, d'où ton bug.
    il faudrait faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Form1.FindComponent('ListBox1')

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 41
    Points : 27
    Points
    27
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Form1.FindComponent('ListBox1')
    Merci à vous 3, effectivement c'était la solution.

    Juste encore une question evarisnea :
    la méthode Findcomponent de ADOQuery1, ... ne contient pas de composant ListBox,
    J'ai cherché dans l'aide de Delphi, je n'ai trouvé nulle part cette affirmation.
    Tu le sais comment ?

  8. #8
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Points : 4 384
    Points
    4 384
    Par défaut
    pour faire court, TADOQuery n'est pas un conteneur de composants, tu n'as donc pas pu déposer ton ListBox dessus!

    en fait, tu as du déposer ton ListBox sur la fiche, ou sur un objet conteneur (TPanel, TGroupBox, TTabSheet, etc...) car or tu ne peux pas déposer ton ListBox sur un TADOQuery , d'où ma conclusion que le Owner (cf. aide delphi) du ListBox est la fiche (vu aussi les composants déclarés dans la définition de la classe).

    comme tu as le bon réflexe de consulter l'aide, il te serait intéressant de la lire à propos des propriétés Components, Owner, Parent, Controls

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 41
    Points : 27
    Points
    27
    Par défaut
    J'ai lu justement l'explication mais j'avoue qu'avec la tienne j'ai de suite tout compris.

    Merci encore

  10. #10
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Points : 4 384
    Points
    4 384
    Par défaut

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

Discussions similaires

  1. findcomponent avec timage
    Par sys1 dans le forum Débuter
    Réponses: 3
    Dernier message: 15/11/2013, 19h49
  2. Récupérer le nom des fichiers avec TListBox
    Par cincap dans le forum Débuter
    Réponses: 2
    Dernier message: 19/05/2009, 10h02
  3. TlistBox avec couleur
    Par rvzip64 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 20/12/2008, 11h51
  4. Problème avec le composant TListBox
    Par Chyokyka dans le forum Débuter
    Réponses: 11
    Dernier message: 25/11/2007, 12h42
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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