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 :

Changer la valeur text d'un ComboBox


Sujet :

Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2002
    Messages : 213
    Points : 109
    Points
    109
    Par défaut Changer la valeur text d'un ComboBox
    Lorsque j'ouvre le drop down d'un ComboBox, chaque ligne est composée de 2 paramètres séparé par un double pipe (||).
    J'aimerais que lorsque j'ai séléctionné le bon item, la valeur text retournée ne comporte que le premier paramètre.

    Pour cela, j'ai la fonction suivante sur l'Event OnSelect :
    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
     
    procedure TFrmMeubles.DataChangeSelect(Sender: TObject);
    var
      position : integer;
      temp : String;
    begin
      if Sender is TComboBox then
      begin
        with sender as TComboBox do
        begin
          position := AnsiPos('||',TComboBox(Sender).Items.ValueFromIndex[ItemIndex]);
          temp := Copy(TComboBox(Sender).Items.ValueFromIndex[ItemIndex],0,position-1);
          TComboBox(Sender).Text := temp;
        end;
      end;
    end;
    Malheureusement cela ne fonctionne pas!
    Le code en lui même fonctionne, mais pas sur l'Event OnSelect, j'en ai essayé d'autres mais toujours sans résultat.
    Quelqu'un a t il une idée?

    Merci, David
    Mais quelle bordel !

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

    Sur l'évènement OnSelect du ComboBox, j'ai codé ceci:
    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
     
    procedure TForm1.ComboBox1Select(Sender: TObject);
    var
      ItemText: string;
    begin
      with TComboBox(Sender) do begin
        // Texte de l'item
        ItemText := Items[ItemIndex];
        ShowMessage(ItemText);
        // Partie gauche
        ShowMessage(Copy(ItemText, 1, Pos('||',ItemText)-1));
        // Partie droite
        ShowMessage(Copy(ItemText, Pos('||',ItemText)+2, Length(ItemText)));
      end;
    end;
    @+

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2002
    Messages : 213
    Points : 109
    Points
    109
    Par défaut
    Merci pour ta réponse, mais mon problème se situe à la mise à jour du champ Text de mon ComboBox.
    Si je fais un showmessage de ma la valeur Temp, j'ai la bonne valeur qui m'est retournée!
    On dirait que la valeur Text est mise à jour après mon opération mais je ne trouve pas ou :o
    Mais quelle bordel !

  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
    Oui, effectivement je n'avais pas fait attention au fait que tu voulais changer le Text du ComboBox !

    Un petit test avec ce code montre que le text est bien changé à l'appel de la procédure mais immédiatement mis à jour à la sortie.

    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
     
    procedure TForm1.ComboBox1Select(Sender: TObject);
    var
      position : integer;
      temp : String;
    begin
      if Sender is TComboBox then
      begin
        with sender as TComboBox do
        begin
          position := AnsiPos('||', Items[ItemIndex]);
          temp := Copy(Items[ItemIndex],0,position-1);
          Text := temp;
          ShowMessage(Text + ' ' + IntTosTr(ItemIndex));
        end;
      end;
    end;
    Il va falloir trouver autre chose

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2002
    Messages : 213
    Points : 109
    Points
    109
    Par défaut
    Citation Envoyé par Claudius40
    Un petit test avec ce code montre que le text est bien changé à l'appel de la procédure mais immédiatement mis à jour à la sortie.

    Il va falloir trouver autre chose
    C'est précisement ce que j'essaye de faire

    Par contre c'est loin d'être aussi évident
    Mais quelle bordel !

  6. #6
    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
    Re,

    Peut-être l'écriture d'un composant hérité de TComboBox, qui gère les multicolonnes, largeur du combo, largeur de la liste, N° de la colonne qui alimente le Text du combo, etc...

    Bien sûr ça ne se fait pas en 5 minutes

    @+

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2002
    Messages : 213
    Points : 109
    Points
    109
    Par défaut
    Citation Envoyé par Claudius40
    Re,

    Peut-être l'écriture d'un composant hérité de TComboBox, qui gère les multicolonnes, largeur du combo, largeur de la liste, N° de la colonne qui alimente le Text du combo, etc...

    Bien sûr ça ne se fait pas en 5 minutes

    @+
    Oui j'y ai pensé!
    Mais l'idée que j'ai eu partait plus sur un composant maison du genre EditBox avec un ListView, qui correspondrait mieux aux besoins
    Mais cela représente à mon avis quelques heures de travail
    Mais quelle bordel !

  8. #8
    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
    Bon je viens de faire ça.

    J'ai posé sur ma form un TEdit et TListView en vsReport avec deux colonnes (un code, un libellé).

    Un changement de sélection dans le ListView alimente la propriété Text avec le code dans le TEdit. Et à l'inverse lorsque que tu tapes un texte dans le TEdit celui-ci va chercher la première occurence dans le TListView.

    Tu pourras sûrement optimiser le comportement, mais c'est une idée de base.

    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
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.ListView1SelectItem(Sender: TObject; Item: TListItem;
      Selected: Boolean);
    begin
      Edit1.Text := Item.Caption;
    end;
     
    procedure TForm1.Edit1Change(Sender: TObject);
    var
      FoundItem: TListItem;
    begin
      with ListView1 do begin
        FoundItem := FindCaption(0, Edit1.Text, True, True, False);
        if FoundItem <> nil then begin
          OnSelectItem := nil;
          ItemIndex := FoundItem.Index;
          FoundItem.MakeVisible(False);
          OnSelectItem := ListView1SelectItem;
        end;
      end;
    end;
     
    end.
    @+

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2002
    Messages : 213
    Points : 109
    Points
    109
    Par défaut
    Merci

    Mais comme le signale delphi-ni dans son Post, il y a d'autres paramètres à prendre en compte!
    Je vais donc encore essayer de persévérer de ce coté la et voir ou se passe la dernière mise à jour du champ text du ComboBox
    Mais quelle bordel !

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2002
    Messages : 213
    Points : 109
    Points
    109
    Par défaut
    J'ai testé a peu près tous les EVENT possibles mais le dernier est bien le OnSelect et du coup ... je sèche complètement!

    Par contre, modifier le champ text depuis un autre composant fonctionne ...
    Mais quelle bordel !

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2002
    Messages : 213
    Points : 109
    Points
    109
    Par défaut
    Je viens de faire des tests plus approfondis et il semblerait qu'après chaque EVENT, le champ text du ComboBox soit mis à jour!

    Comment puis je faire pour rajouter un EVENT?
    Genre UpdateText
    Mais quelle bordel !

  12. #12
    Membre régulier
    Inscrit en
    Septembre 2006
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 81
    Points : 86
    Points
    86
    Par défaut
    un evenement est une procedure qui répond à un message. Pour spécifier a quel message une procédure doit répondre on utilise le mot reservé "message".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    procedure MonEvent(var msg : TMessage); message WM_USER +1;
    begin
     //le code a executer
    end;
    Dans cet exemple, quand ton objet va recevoir le message WM_USER + 1, il va executer la procédure. Maintenant il va falloir modifier le code pour insérer un endroit ou on envoie le message a ton objet .. et ca, ca va etre moins glop Sinon il y a deja certains message prédefinis.. mais je doute que celui que tu veux faire existe par défaut

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2002
    Messages : 213
    Points : 109
    Points
    109
    Par défaut
    Est ce que CM_TEXTCHANGED pourrait correspondre aux changement de text du combobox?
    Mais quelle bordel !

  14. #14
    Membre régulier
    Inscrit en
    Septembre 2006
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 81
    Points : 86
    Points
    86
    Par défaut
    Je peux pas te répondre sans essayer je l'ai fait que avec des messages prédéfinis de windows mais ceux que j'ai utilisés commencaient toujours par WM_ ... essaye.. tu verra bien

Discussions similaires

  1. Réponses: 0
    Dernier message: 28/05/2014, 12h21
  2. Changer texte dans un comboBox sans appeler d'événements
    Par ToupetMan dans le forum Windows Presentation Foundation
    Réponses: 9
    Dernier message: 03/09/2011, 22h47
  3. Réponses: 9
    Dernier message: 13/01/2010, 23h44
  4. Récuperer la valeur texte d'une combobox dans un datagridview
    Par Delphi-ne dans le forum Windows Forms
    Réponses: 0
    Dernier message: 19/03/2009, 10h17
  5. Réponses: 5
    Dernier message: 01/05/2007, 04h59

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