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 :

TcomboBox j'y comprend rien !


Sujet :

Delphi

  1. #1
    Membre averti

    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 35
    Par défaut TcomboBox j'y comprend rien !
    Bonsoir à tous.

    Voilà, ça fait 2 jours que je sèche sur Tcombobox. (Il ne dégage pourtant pas de chaleur)

    J'ai consulter toutes les docs sur le site, le menu aide de mon Delphi.
    Il y a bien des infos mais ça me dépasse je suis pourtant pas un "con beau gosse".

    Quelqu'un peut-il me mettre sur la voie parce qu'entre combobox.Items.Add
    combobox.AddItem rien ne marche pour rentrer des trucs dans ces boites.

    Ce que veux est très simple:
    Je voudrais qu'apparaisse dans le menu déroulant de ma combobox, une liste de phrase, par exemple: mineur harmonique, Majeur, mineur mélodique etc.
    Je précise que ces phrases seront déjà dans le combobox à l'exécution du programme. (le but n'est pas d'entrée des phrases pendant l'exécution du programme. Précisè-je). J'ai l'impression que c'est une histoire d"addItem", mais ce que j'ai essayé ne marche pas. j'ai un message qui me dit qu'il me manque des paramêtres.

    Dans un second temps je voudrais qu'en séléctionnant une des phrases de ma combobox ça m'enclenche une action dans le programme.
    Le cas échéant si quelqu'un pouvait me fournir un lien ou une indication sur la syntaxe de cette boiboite.

    J'espère avoir été clair.

    Merci d'avance.

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Billets dans le blog
    1
    Par défaut
    Bonsoir,

    TCombox.Items.Add est effectivement la méthode à appeler avec en paramètre une valeur qui représente un item de la liste déroulante (donc autant d'appels que d'items en théories).

    Néanmoins si votre liste est fixe et n'a pas besoin d'être générée à l'exécution, ne vous embêtez pas, allez sur la fiche, sélectionnez le composant, dans les propriétés cherchez Items et cliquez sur les trois petits points. Là vous allez avoir une fenêtre de saisie, tapez tout vos items en séparant chacun par des retours charriots.

    Et le tour est joué.

    Ensuite pour détecter que l'utilisateur sélectionne un item, vous devez répondre à l'évènement OnChange du composant, puis utiliser la propriété ItemIndex de ce dernier qui vous donnera quel est l'index de l'item actuellement sélectionné.

  3. #3
    Membre averti

    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 35
    Par défaut
    Merci Aka Guymelef. j'item !!

    L'explication était très clair. J'ai même pas eu mal à mon neurone.

    Finalement ça m'intrigue cette histoire d'entrée dans le combobox!

    Je voudrais pas abuser mais comment se fait-il que quand je tape
    ComboBox1.ItemsAdd ('Gamme Japonaise 1');
    Il n'y ai pas d'erreur mais que 'Gamme Japonaise 1' n'apparaisse pas dans ma Combobox? (Je crois que je vais finalement avoir besoin d'ItemsAdd dans un proche avenir, quand je saurais comment stocker les données entrées.)

    Delphi serait-il anti-nipon !

  4. #4
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Par défaut
    D'abord, il manque le point entre Items et Add mais je suppose que c'est une faute de frappe puisqu'il n'y a pas d'erreur à la compil.

    Quand tu cliques sur la flèche de la combobox, les items doivent apparaître.

    Si tu veux qu'un item particulier soit apparent, il faut coder
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ComboBox1.Text := ComboBox1.Items[NoItem];
    où NoItem est compris entre 0 et ComboBox.Items.Count -1.

    Bonne chance

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Billets dans le blog
    1
    Par défaut
    En fait dans un ComboBox (plus exactement dans un TStrings) tu peux associer à chaque item (chaîne de caractères) un objet quelconque mais ce n'est pas obligatoire.

    Du coup tu as en fait trois méthodes pour ajouter des items à un TComboBox.

    • TComboBox.AddITem( Item:String; AObject:TObject ) : permet d'ajouter un item visible plus un objet (passer NIL dans AObject si pas nécessaire de stocker un objet pour l'item)
    • TComboBox.Items.Add( const S:string ) : équivalant à TComboBox.AddITem( S, NIL )
    • TComboBox.Items.AddObject(const S: string; AObject: TObject) : équivalant à TComboBox.AddITem( S, AObject )


    Maintenant l'important c'est aussi de savoir où tu as placé ton code pour ajouter tes items dans la ComboBox, si tu l'as placé dans un endroit où le code n'est pas exécuté ou seulement exécuté sur une action précise (clic de bouton, etc...) alors c'est normal que tu ne les voient pas.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 29
    Par défaut
    A la conception, si ta ComboBOx est en csSimple
    ComboBox1.Items.Add ('Gamme Japonaise 1'); ne sera pas visible;
    Il faut être en csDropDown ou csDropDownList.

  7. #7
    Membre averti

    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 35
    Par défaut
    Merci à tous pour vos précieuses infos.
    J'ai réussi à faire ce que je voulais.

    Juste une question Aka Guymelef dans la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TComboBox.AddITem( Item:String; AObject:TObject )
    Tu dis qu'on peut ajouter un item ça je comprend, mais un objet? je vois pas de quoi tu parle. Ça veut dire qu'on peut mettre autre chose qu'une chaine de caractère dans une Combobox? Peux tu me donner un exemple?

    Je met nil dans AObject ça veut dire que j'écrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TComboBox.AddITem( Item:String; AObject:NIL )
    ???

    Pareil pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TComboBox.Items.Add( const S:string )
    C'est pour mettre une constante dans la combobox?

    Excuses moi de mon ignorance, j'ai encore tout à apprendre.

    Merci!

  8. #8
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Billets dans le blog
    1
    Par défaut
    Alors déjà il faut distinguer la partie déclarative de l'appel.

    Dans une partie déclarative on a des choses du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TComboBox.AddITem( Item:String; AObject:TObject )
    Cela nous indique généralement qu'une classe possède une méthode de type procédure ou fonction (retournant une valeur typée donc) puis les paramètres, en premier on a le nom logique du paramètre puis le type de donnée attendu.

    Après dans l'appel on a plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var
      cbToto: TComboBox;
     
    [...]
     
    cbToto.AddItem( 'Gamme Japonaise 1', NIL );
    Les noms des paramètres et leur types sont remplacés par des variables ou des constantes. Ainsi qu'on on dit passer NIL (pour un objet) cela revient donner comme valeur du paramètre NIL plutôt qu'une variable.

    Après quand je marque équivalent c'est équivalent au niveau des appels ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    cbToto.AddItem( 'Gamme Japonaise 1', NIL );
    // équivalent à
    cbToto.Lines.AddObject( 'Gamme Japonaise 1', NIL );
    // équivalent à
    cbToto.Lines.Add( 'Gamme Japonaise 1' );
    Les trois appels donnent strictement le même résultat.

    Enfin la présence (mystérieuse ) du paramètre AObject.
    Le TComboBox s'appuie sur un objet de type TStrings pour stocker les chaînes et les afficher dans sa liste déroulante, c'est la propriété Items.
    On peut considérer TStrings comme une liste de chaîne en vérité sauf que par défaut l'objet propose plus, on peut associer pour chaque chaîne un objet quelconque. Cet objet est accessible via la propriété Objects du TStrings suivant le même indice que pour aller chercher la chaîne.

  9. #9
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Par défaut
    Salut
    Supposons que j'ai une classe TJeux declaré comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
      TJeux = Class
       private
          FTitre : String;
          FEditeur : String;
       public
          property Titre : string read FTitre write FTitre;
          property Editeur : string read FEditeur write FEditeur;
      end;
    J'ai déclarer 3 variable de type TJeux : Cmr, Nfs, Rbr avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
      Cmr := Tjeux.Create;
      Cmr.Titre := 'Collin McRae';
      Cmr.Editeur := 'Codemaster';
      Nfs := TJeux.Create;
      Nfs.Titre := 'Need For Speed';
      Nfs.Editeur := 'Electronic Arts';
      Rbr := TJeux.Create;
      Rbr.Titre := 'Richard Burns Rallye';
      Rbr.Editeur := 'Eidos Interactive';
    Examinons les code suivants :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    //cbTitre un ComboBox
      cbTitre.Items.Add(Nfs.Titre); 
      cbTitre.Items.Add(Cmr.Titre);
      cbTitre.Items.Add(Rbr.Titre);
    Ce code va peupler le combo box avec uniquement le titre.
    Maintenant, nous alons utiliser AddItem ou Items.AddObject qui est pareil
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      cbTitre.AddItem(Nfs.Titre,Nfs);
      cbTitre.Items.AddObject(Cmr.Titre,Cmr);
      cbTitre.Items.AddObject(Rbr.Titre,Rbr);
    Ici nous avons associer à chaque titre l'objet jeux correspondant.
    Mais ou est l'interêt ???
    Imaginons que notre fiche permet de lister les jeux mais aussi d'afficher les informations correspondants à chaque jeux selectionné
    Pour recupérer l'information du jeux correspondnat au titre selectionné dans le combo, on fera comme ceci dans l'evenement OnSelect du Combobox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      edTitre.Text := TJeux(cbTitre.Items.Objects[cbTitre.ItemIndex]).Titre;
      edEditeur.Text  := TJeux(cbTitre.Items.Objects[cbTitre.ItemIndex]).Editeur;
    Ceci a été possible car nous avons associé un item avec un objet.
    J'espère t'avoir un peu eclairé

  10. #10
    Membre averti

    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 35
    Par défaut
    J'ai pas encore bien integré les notions de class, public et private.
    c'est là que je me rend compte que j'ai pas encore été assez loin avec la doc.

    Mais je vais me pencher sur la question!

    En tous cas je pense que vais garder tous les renseignement que vous m'avez fourni et je les consulterais le moment venu.
    Il faut quand même que je potasse un peu plus le vocabulaire de Delphi.

    Avec les exercices de ce site ça va le faire, je pense!

    Merci encore à tous deux de m'aiguiller.

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

Discussions similaires

  1. TIdCmdTCPServer ! J'y comprend rien
    Par flash_math dans le forum Delphi
    Réponses: 1
    Dernier message: 07/07/2006, 18h28
  2. Mise en forme de texte, IE ne comprend rien
    Par Sunsawe dans le forum Balisage (X)HTML et validation W3C
    Réponses: 13
    Dernier message: 11/06/2006, 21h17
  3. Positionnement CSS, j'comprends rien !!
    Par guano dans le forum Mise en page CSS
    Réponses: 10
    Dernier message: 16/01/2006, 16h40
  4. error : does not name a type // je n'y comprends rien
    Par djobanaille dans le forum C++
    Réponses: 6
    Dernier message: 19/11/2005, 10h25
  5. [MX]boutons...j'y met du mien mais j'comprend rien!
    Par skapull dans le forum Flash
    Réponses: 5
    Dernier message: 25/03/2004, 18h55

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