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

Composants VCL Delphi Discussion :

Affichage dans un Combobox


Sujet :

Composants VCL Delphi

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 92
    Par défaut Affichage dans un Combobox
    J'utilise un Affichage couleur dans un Combobox.
    Tout est paramétrée en police 8 (font.size:=8 ).

    Tout marche mais lorsque l'utilisateur change la taille de police, le texte dans mon combobox se chevauche ...
    Comment faire pour décaler le texte plus bas, en sachant que le choix de la taille est max 12 (font.size:=12) ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure TForm2.ComboBoxCouleurDrawItem(Control: TWinControl; Index: Integer;
      Rect: TRect; State: TOwnerDrawState);
    begin
        with (Control as TComboBox).Canvas do
        begin
            FillRect(Rect);
            TextOut(30, Rect.Top,ComboBoxCouleur.Items[Index]);
            Pen.Color := clBlack;
            Brush.Color := ColorConst[Index];
            Rectangle(Rect.Left + 2, Rect.Top + 2, 24,Rect.Top + 15);
        end;
    end;

  2. #2
    Membre émérite Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Par défaut Re: Affichage dans un Combobox
    Citation Envoyé par yanba
    J'utilise un Affichage couleur dans un Combobox.
    Tout est paramétrée en police 8 (font.size:=8).

    Tout marche mais lorsque l'utilisateur change la taille de police, le texte dans mon combobox se chevauche ...
    Comment faire pour décaler le texte plus bas, en sachant que le choix de la taille est max 12 (font.size:=12) ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure TForm2.ComboBoxCouleurDrawItem(Control: TWinControl; Index: Integer;
      Rect: TRect; State: TOwnerDrawState);
    begin
        with (Control as TComboBox).Canvas do
        begin
            FillRect(Rect);
            TextOut(30, Rect.Top,ComboBoxCouleur.Items[Index]);
            Pen.Color := clBlack;
            Brush.Color := ColorConst[Index];
            Rectangle(Rect.Left + 2, Rect.Top + 2, 24,Rect.Top + 15);
        end;
    end;
    Bonjour!

    Je ne suis pas certain de comprendre totalement ton problème mais si j'avais à faire un combobox dont la taille du contenu est variable, je m'assurerais que la propriété Style du TComboBox est à csOwnerDrawVariable et j'implémenterais l'événement OnMeasureItem dans lequel j'affecterais à Height (un des paramêtres de l'événement) une hauteur relative à la font utilisée. Avec Font.Height, il m'est possible trouver la hauteur de la font en pixel (fais F1 pour plus d'info )

    Une fois que la hauteur des items du combobox est ajustée à la font utilisée, j'implémenterais l'événement OnDrawItem en positionnant mes éléments (carré de couleur et texte) de façon relative par rapport à la hauteur du Rect passé en paramêtre (en centrant le texte verticalement dans le Rect par exemple). Comme la taille du Rect change relativement à la taille de la font (grâce à OnMeasureItem), ton texte sera toujours centré dans l'espace réservé pour chaque item.

    J'espère que ça t'aidera

    a+!

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 92
    Par défaut
    1 - csOwnerDrawVariable : c'est deja fait

    2 - Je peux "jouer" avec l'événement OnMeasureItem pour résoudre mon probleme.

    Le problème, c'est que je n'arrive pas à ecrire le code de telle sorte que dans le combobox il y ait suffisament de place pour que le texte ne se chevauche pas ...

    3 - Ce que je cherchais à faire, c'est de modifier les rectangles de telle sotre qu'ils soient plus grands !!

  4. #4
    Membre émérite Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Par défaut
    Citation Envoyé par yanba
    1 - csOwnerDrawVariable : c'est deja fait

    2 - Je peux "jouer" avec l'événement OnMeasureItem pour résoudre mon probleme.

    Le problème, c'est que je n'arrive pas à ecrire le code de telle sorte que dans le combobox il y ait suffisament de place pour que le texte ne se chevauche pas ...

    3 - Ce que je cherchais à faire, c'est de modifier les rectangles de telle sotre qu'ils soient plus grands !!
    Salut!

    Ne pourrais tu pas aussi pourrais jouer avec ItemHeight de TCombobox ? Ça donne des résultats étranges (le composant se redimentionne ) mais peut-être est-ce aussi ce que tu cherches à faire...


  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 92
    Par défaut
    Je te bénis, apres dix milliards de code et d'essais infructueux, j'ai enfin une réponse qui a defaut de faire entierement ce que je veux resoud en partie mon problème.
    Certes , il aurait mieux valu que j'arrive a adapter en fonction de la taille de la police, mais bon, avec un case of + combobox, ca devrait le faire. Ce n'est pas de la Grande programmation, mais ca dépanne .

    MERCI

  6. #6
    Membre chevronné
    Avatar de Manopower
    Inscrit en
    Décembre 2003
    Messages
    516
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 516
    Par défaut
    En utilisant la méthode TextHeight cela résoudrait-il ton problème ?
    L'idée étant de tailler ton rectangle selon le texte qu'il y a dedans.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var
      UnItem : TRect;
    begin
      UnItem := Rect(0,0,Canvas.textWidth('MonItem'),Canvas.textheight('Monitem'));
     Rectangle(...)

Discussions similaires

  1. Difficulté d'affichage dans une comboBox via une requête
    Par moilou2 dans le forum VBA Access
    Réponses: 2
    Dernier message: 17/07/2008, 10h44
  2. [VB.NET] Pb d'affichage dans des COMBOBOX
    Par stephane77fr dans le forum Windows Forms
    Réponses: 1
    Dernier message: 06/08/2007, 15h46
  3. [VB.NET]Affichage dans un ComboBox
    Par ba10 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 01/10/2006, 00h37
  4. [vb.net]l'affichage dans le combobox
    Par hanan_tsdi2_deMaroc dans le forum Windows Forms
    Réponses: 5
    Dernier message: 26/05/2006, 14h34
  5. Réponses: 2
    Dernier message: 14/09/2005, 13h39

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