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

Langage Delphi Discussion :

[Liste - valeur d'un item] je retrouve plus ma recherche !!


Sujet :

Langage Delphi

  1. #1
    Leoxp
    Invité(e)
    Par défaut [Liste - valeur d'un item] je retrouve plus ma recherche !!
    Salut à tous,

    Je cherche à tout prix un moyen d'attribuer une valeur à chaque élément de ma liste de sorte à ce que quand l'utilisateur choisi un élément, je puisse avoir l'ID correspondant.
    En ListView il y a la propriété DATA mais là c'est une liste déroulante dont j'ai besoin...

    J'ai bien essayé avec une variable tableau parallèle que je garde en mémoire mais le problème c'est que je trie ma liste déroulante, donc les index ne correspondent plus à ceux de ma variable liste.

    J'ai donc cherché sur le forum, et je me souviens plus par quels mots clé mais je suis tombé sur un post intéressant me parlant d'un composant JVCL qui fait ce genre de chose.

    Je l'ai téléchargé, installé mais j'ai fermé la fenêtre entre temps et je me souviens plus des mots clé de ma recherche (abruti, oui je sais... )

    Quelqu'un à une solution ou une idée du composant dont il s'agit ?

    Merci

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 21
    Points : 17
    Points
    17
    Par défaut TDBQueryCombo
    Ce composant permet de faire ce que tu demandes, il alimente une Combo box à partir d'une requete.

    Tu peux aussi mettre pour chaque ligne une longueur qui fait que seul le début de la chaine est visible mais que la fin contient l'identifiant que tu recherche, du style :
    "Element 1 1"
    "Element 2 2"

  3. #3
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    Je sais pas si je réponds à ta question,
    mais tu peux utiliser l'object associé à ton item pour stocker un entier (à la place du pointeur d'objet), par un cast. Je le fais réculierement.

    Style

    var Valeur: Longint;

    Liste.AddObject( clef, TObject( Valeur ) );

    Ainsi pour retrouver ta valeur, tu fais

    Valeur := Longint( Liste.Objects[ IIndex ] )

    ....

  4. #4
    Leoxp
    Invité(e)
    Par défaut
    Je pencherais plus pour ton idée TicTacToe car allimenter la liste à partir d'une requête n'est pas possible car je stock mes données dans un fichier.
    Je vais essayer, je n'avais pas pensé à faire un TObject(maVar).

    Merci mille fois !

  5. #5
    Leoxp
    Invité(e)
    Par défaut
    Je viens de tester et en fait mon cas de figure complique tout car la valeur "code" est en fait une variable de type string. Je ne peux donc pas faire un "TObject()" dessus...

    je vais essayer de voir comment transformer un string en object...

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    a ce moment la, ton objet sera réellement un objet... qui pointe sur une chaine, mais tu dois gérer l'alloc/ et dé-alloc pour chaque element de ta liste
    si tu veux trier selon les chaines, il te faudra implémenter la fonction de comparasion de ta liste

  7. #7
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 562
    Points
    3 562
    Par défaut
    Je me suis fendu d'une unité complête et d'un exemple dans un Post. Peut être que ça t'interessera.

    c'est ici :
    http://www.developpez.net/forums/vie...r=asc&start=15

    Adapté à ton besoin, ça donne ça :

    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
    unit Unit2;
     
    interface
    uses Classes,StdCtrls;
     
    type
    TListeID=class
         private
           AStringList:TStringList;
           FComboBox: TComboBox;
           procedure SetComboBox(const Value: TComboBox);
         public
           constructor Create;
           destructor Destroy;
           procedure Clear;
           procedure UpdateComboBox;
           procedure Add(NomPrenom,Code:string);
           procedure Delete(NomPrenom:string);
           function GetCode(NomPrenom:string):string;
           function GetCodeFromCombobox:string;
           property ComboBox:TComboBox read FComboBox write SetComboBox;
         end;
     
    implementation
    uses SysUtils;
    { TListeID }
    constructor TListeID.Create;
    begin
      AStringList:=TStringList.Create;
      AStringList.Sorted:=True;
      FComboBox:=nil;
    end;
     
    destructor TListeID.Destroy;
    begin
      AStringList.Free;
      FComboBox:=nil;
    end;
     
    procedure TListeID.Add(NomPrenom,Code: string);
    begin
      AStringList.Add(NomPrenom+'='+Code);
    end;
     
    function TListeID.GetCode(NomPrenom: string): string;
    begin
      result:=AStringList.Values[NomPrenom];
    end;
     
    procedure TListeID.SetComboBox(const Value: TComboBox);
    begin
      FComboBox := Value;
    end;
     
    procedure TListeID.Delete(NomPrenom: string);
    var Index:Integer;
    begin
      Index:=AStringList.IndexOfName(NomPrenom);
      if Index<>-1 then
      AStringList.Delete(Index);
    end;
     
    procedure TListeID.UpdateComboBox;
    var i:Integer;
    begin
      if Assigned(FComboBox) then
      begin
        FComboBox.Clear;
        for i:=0 to AStringList.Count-1 do
           FComboBox.Items.Add(AStringList.Names[i]);
      end;
    end;
     
    function TListeID.GetCodeFromCombobox: string;
    begin
      if Assigned(FComboBox) then
      result:=GetCode(FComboBox.Text);
    end;
     
    procedure TListeID.Clear;
    begin
      AStringList.Clear;
    end;
     
    end.
    et ça pour l'unité principale :
    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, StdCtrls,Unit2;
     
    type
      TForm1 = class(TForm)
        ComboBox1: TComboBox;
        Label1: TLabel;
        procedure FormCreate(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
        procedure ComboBox1Change(Sender: TObject);
      private
        { Déclarations privées }
        AListeID:TListeID;
      public
        { Déclarations publiques }
      end;
     
     
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      //Creation de AListeID (A mettre dans le Oncreate)
      AListeID:=TListeID.Create;
      AListeID.ComboBox:=ComboBox1; //<--Dire avec quelle ComboBox on travaille
     
      //Remplissage de la liste (ça peut se trouver ailleurs)
      AListeID.Clear; //On vide la liste
      AListeID.Add('Stiqué Sophie','Code ABC');
      AListeID.Add('Némar Jean','Code GHI');
      AListeID.Add('Célère Jacques','Code DEF');
     
      //Remplir la combobox
      AListeID.UpdateComboBox;
    end;
     
    procedure TForm1.FormDestroy(Sender: TObject);
    begin
      AListeID.Free;
    end;
     
    procedure TForm1.ComboBox1Change(Sender: TObject);
    begin
      //On récupère l'ID pour l'afficher dans un label
      Label1.Caption:=AListeID.GetCodeFromCombobox;
    end;
     
    end.

  8. #8
    Leoxp
    Invité(e)
    Par défaut
    Merci pour toutes vos réponses.

    J'ai plutôt opté pour la simplicité (même si le code de waskol était trés intéressant). J'ai associé à la propriété "object" de chaque élément de ma combobox l'indice de l'élément correspondant dans la variable liste.

    et ça marche lol


    merci encore à tous !!

Discussions similaires

  1. Réponses: 2
    Dernier message: 31/01/2011, 10h51
  2. Réponses: 1
    Dernier message: 30/05/2007, 14h25
  3. je ne retrouve plus le lien pour lancer une recherche sur le forum
    Par harlock59 dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 2
    Dernier message: 19/04/2006, 13h44
  4. Avoir une valeur associé à chaque item d'un TComboBox
    Par dimdidi dans le forum Composants VCL
    Réponses: 10
    Dernier message: 10/03/2006, 10h15
  5. Récuperer la valeur d'un item dans un Treeview
    Par yanba dans le forum Composants VCL
    Réponses: 2
    Dernier message: 02/02/2006, 22h45

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