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 :

ComboBox en OwnerDraw: Comment supprimer le rectangle de sélection ?


Sujet :

Composants VCL Delphi

  1. #1
    Membre du Club Avatar de papadrago
    Inscrit en
    Juillet 2006
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 59
    Points : 45
    Points
    45
    Par défaut ComboBox en OwnerDraw: Comment supprimer le rectangle de sélection ?
    Bonjour,

    Je veux utiliser une combobox en ownerdraw pour simuler une "ComboStringGrid". Ca marche bien mais je n'arrive à me débarasser du rectangle de sélection en pointillé.
    Il y a au moins 3 raisons pour vouloir s'en débarasser :
    • les pointillés ne sont pas toujours effacés quand on déplace la sélection, donc ça bave un peu.
    • si on utilise des couleurs dans le OnDrawItem, le rectangle pointillé est tracé en couleur complémentaire ou quelque chose comme ça
    • et enfin: j'ai pas envie de le voir.

    Quelqu'un sait comment se débarasser de ce truc ?
    Merci

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    As tu changé la valeur du Handled ?
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre du Club Avatar de papadrago
    Inscrit en
    Juillet 2006
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 59
    Points : 45
    Points
    45
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    As tu changé la valeur du Handled ?
    D'après ce que je comprends dans la doc, Handled est utilisé par le TDrawItemEvent CLX mais pas celui VCL, et je suis en D7. Désolé pour le manque de précision.

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Effectivement, pour le Handled, ce n'est que CLX ... et je n'avais pas fait attention ...

    Ces pointillés, même si tu déborde du Rect fourni, cela les dessines (d'ailleurs, ils là avant ou après ton propre dessin ...) ?
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Membre du Club Avatar de papadrago
    Inscrit en
    Juillet 2006
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 59
    Points : 45
    Points
    45
    Par défaut
    Les pointillés sont ajoutés après le OnDrawItem.

    Si on peut pas s'en débarrasser, il faut faire avec...

    1/ Je traçais une séparation horizontale en Rect.Bottom au lieu de Rect.Bottom - 1 d'ou quelques problèmes que j'essayais de résoudre en effaçant un rectangle décalé de 1 vers le haut... A cause de ça, les pointillé étaient mal effacés.

    2/ Reste la couleur complémentaire. J'affiche l'item sélectionné en bleu. Pour éviter d'avoir les pointillés en complémentaire (jaune), je remet la fonte en noir et j'écris quelque chose qui ne se voit pas sinon la nouvelle couleur n'est pas prise en compte. Ca donne ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
          // set text color, blue when selected, and write item
          if odSelected in State
            then Canvas.Font.Color := clBlue
            else Canvas.Font.Color := clBlack;
          Canvas.TextOut (Rect.Left + 5, Rect.Top + 2, Items [Index]);
     
          // force black color to avoid complementary color for selection rectangle
          Canvas.Font.Color := clBlack;
          Canvas.TextOut (Rect.Left, Rect.Top + 2, ' ');
    Si vous avez quelque chose de plus élégant, je suis preneur.

  6. #6
    Membre du Club Avatar de papadrago
    Inscrit en
    Juillet 2006
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 59
    Points : 45
    Points
    45
    Par défaut
    Bon, ben, finalement, j'ai posté la question sur borland.public.delphi.vcl.components.using.general.

    Il y a deux solutions pour effacer le rectangle de focus :

    1) Appeler DrawFocusRect dans le OnDrawItem. Ca marche bien dans la liste mais ça ne marche pas dans mon appli dans la boite d'édition meme en testant sur odComboBoxEdit.

    2) "sous classer la propriété WindowProc de la ComboBox" ... mais là, c'est au dela de mes compétences !

  7. #7
    Membre du Club Avatar de papadrago
    Inscrit en
    Juillet 2006
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 59
    Points : 45
    Points
    45
    Par défaut
    Une solution simple et élégante est décrite là :

    http://groups.google.com/group/borla...e71c8afedf835f

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

Discussions similaires

  1. Comment supprimer les doublons
    Par djelloulc dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 17/09/2013, 14h30
  2. Comment supprimer le dernier élément d'un combobox
    Par gryffondor8392 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 31/01/2011, 20h59
  3. Comment dessiner un rectangle de sélection ?
    Par nds75000 dans le forum VB.NET
    Réponses: 0
    Dernier message: 11/07/2010, 16h52
  4. Réponses: 0
    Dernier message: 24/05/2008, 13h55
  5. [vbexcel]Comment supprimer les doublons dans une combobox?
    Par Mugette dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 24/11/2005, 11h12

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