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 :

ComboBox et largeur de liste variable


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 ComboBox et largeur de liste variable
    Est il possible d'avoir la largeur de la liste d'un combobox plus grande que la largeur du combobox lui même?
    Je m'explique, j'ai des combobox contenant des valeurs de type :
    • 0981223||Belgique
    • 0981224||France
    • 0981225||Italie

    Il se peut aussi parfois que le nombre avant le double pipe "||" soit plus court et la description plus longue.
    Lorsque je sélectionne mon item dans la liste, je ne retourne que la première valeur (numérique) dans le text du combobox
    J'aimerais donc avoir un combo avec une largeur courte et sa liste avec une largeur plus longue.

  2. #2
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 561
    Points : 3 955
    Points
    3 955
    Par défaut
    Cadeau :
    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
     
    procedure AdjustComboBoxListWidth(Combo: TComboBox);
    var
      I: integer;
      WCurr, WMax: integer;
    begin
      // Détermination de la largeur maximale en pixel pour tous les articles de la
      // liste
      with Combo do
      begin
        WMax := 0;
        for I := 0 to Items.Count-1 do
        begin
          WCurr := Canvas.TextWidth(Items[I]);
          if WCurr > WMax then
            WMax := WCurr;
        end;
        if (WMax + GetSystemMetrics(SM_CXFRAME)) > Width then
          WMax := WMax + GetSystemMetrics(SM_CXFRAME);
        // Tient compte de la largeur de l'ascenseur (V-Scrollbar) si présent
        if Items.Count > DropDownCount then // ascenseur présent
          WMax := WMax + GetSystemMetrics(SM_CXVSCROLL);
        // Ajustement proprement dit
        if WMax > Width then
          SendMessage(handle, CB_SETDROPPEDWIDTH, WMax, 0);
      end;
    End;
     
    // Exemple d'utilisation dans TComboBox.OnDropDown
    procedure TFrmRechercheAvanceeCRE.cbb_StatutCREDropDown(Sender: TObject);
    begin
      if Sender is TComboBox then
        AdjustComboBoxListWidth(Sender as TComboBox);
    End;
    Ajuste la taille de la combobox à la taille de son plus grand item.

    cdlt

    e-ric

  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 la réponse mais en réalité, ce que je cherche, c'est d'avoir une largeur différente pour la liste (drop down) que pour le ComboBox

  4. #4
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 561
    Points : 3 955
    Points
    3 955
    Par défaut
    as-tu bien lu mon message ? ou j'ai mal compris...

    e-ric

  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
    Si j'ai bien compris ton message, tu adaptes la largeur du ComboBox par rapport à la chaine de caractère la plus longue dans le drop down.

    Ce que j'essaye de faire, c'est d'avoir une largeur de DropDown de 200 pour une largeur de ComboBox de 100 par exemple

  6. #6
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 933
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 933
    Points : 15 381
    Points
    15 381
    Par défaut
    Salut !

    Mon grain de sel :
    Il se peut aussi parfois que le nombre avant le double pipe "||" soit plus court
    Si déjà tu formattais ce "premier" champ pour qu'il ait une longueur constante ?
    Avec une police fixe et la fonction "Format" (F1) ?
    Sinon, il est possible de dessiner complètement la dropdown liste à la mano, j'avais vu ça il y a longtemps...

    --
    jp

  7. #7
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 561
    Points : 3 955
    Points
    3 955
    Par défaut
    un peu d'imagination, voyons !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    procedure TFrmRechercheAvanceeCRE.cbb_StatutCREDropDown(Sender: TObject);
    begin
      if Sender is TComboBox then
         SendMessage((Sender as TComboBox).handle, CB_SETDROPPEDWIDTH, 200, 0);
    End;
    La largeur de la combobox se règle à la conception ou par code.

    e-ric

  8. #8
    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 Jipété
    Salut !

    Mon grain de sel :
    Si déjà tu formattais ce "premier" champ pour qu'il ait une longueur constante ?
    Avec une police fixe et la fonction "Format" (F1) ?
    Sinon, il est possible de dessiner complètement la dropdown liste à la mano, j'avais vu ça il y a longtemps...

    --
    jp
    Ce n'est malheureusement pas possible, je reprends des valeurs qui existe depuis déjà bien longtemps

    Citation Envoyé par e-ric
    un peu d'imagination, voyons !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    procedure TFrmRechercheAvanceeCRE.cbb_StatutCREDropDown(Sender: TObject);
    begin
      if Sender is TComboBox then
         SendMessage((Sender as TComboBox).handle, CB_SETDROPPEDWIDTH, 200, 0);
    End;
    La largeur de la combobox se règle à la conception ou par code.

    e-ric
    Super! C'est exactement ce que je recherchais!

    Par contre ... il est dans la FAQ sur ce même site

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

Discussions similaires

  1. [Toutes versions] Combobox liste variable (encore :S)!
    Par bobo1425 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 21/11/2009, 16h40
  2. [D6] Agrandir largeur zone liste d'une ComboBox
    Par Lung dans le forum Delphi
    Réponses: 4
    Dernier message: 29/01/2007, 10h06
  3. [CSS] largeur de zone variable
    Par dor_boucle dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 18/02/2005, 17h59
  4. [Merise] liste variable de propriétés
    Par Oberown dans le forum Schéma
    Réponses: 10
    Dernier message: 31/08/2004, 15h36

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