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 :

Apparence dans un composant DBGrid


Sujet :

Composants VCL Delphi

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2004
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 60
    Points : 38
    Points
    38
    Par défaut Apparence dans un composant DBGrid
    Bonjour à tous,

    J'ai un souci d'ordre visuel avec les composants DBGrid, je m'explique :

    J'utilise des composants DBGrid pour lesquels j'affecte les propriétés "DefaultDrawing" à "True" et "DrawingStyle" à "GdsThemed" pour que ma grille s'adapte au style Windows utilisé.

    Lorsque j'utilise l'évènement "OnDrawColumnCell" pour faire un traitement particuliers sur les lignes de ma grille et que je sélectionne une ligne dans ma grille, elle apparait en surbrillance (ok ca me va) mais dans une police qui ressemble à du gras avec compression des caractères entre eux. Donc ce n'est pas très lisible.

    Si je mets la propriété "DefaultDrawing" à "False" je n'es plus le problème de police mais du coup la ligne en surbrillance n'apparait plus.

    J'ai ajouté en pièces jointes deux images pour être plus clair

    Quelqu'un a-t-il une idée ? D'avance merci
    Images attachées Images attachées   

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 705
    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 705
    Points : 25 581
    Points
    25 581
    Par défaut
    Une problématique à laquelle mon responsable et moi on s'est frotté, on colore nos lignes en alternance pour faciliter la lecture d'une ligne, sans compter les couleurs de texte que l'on change

    J'ai conservé le thème gdsClassic car je développe sous XP
    mon responsable lui développe sous Seven, il a pu gérer le GdsThemed
    On travail chacun sur une appli différente. il n'y a pas de mélange de thème

    Pense à gérer les différentes situations, si tu fais un code pour gérer Aero, un retour sur XP te provoquera d'autres anomalies du genre

    Sous Aero, joue avec la transparence dans tes OnDraw

    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    SetBkMode(dynamic_cast<TDBGrid*>(Sender)->Canvas->Handle, TRANSPARENT);

    Et si tu veux un HIGHLIGHT Aero alors force GradientFill si tu comptes redessiner le texte via DrawText

    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    GRADIENT_RECT gradientRect = { 0, 1 };
          TRIVERTEX triVertext[ 2 ] = {Rect.left, Rect.Top, GetRValue(clWhite) << 8,GetGValue(clWhite) << 8, GetBValue(clWhite) << 8, 0x0000, Rect.right, Rect.bottom, 240 << 8, 255 << 8, 255 << 8, 0x0000};
          GradientFill(dynamic_cast<TDBGrid*>(Sender)->Canvas->Handle, triVertext, 2, &gradientRect, 1, GRADIENT_FILL_RECT_V);


    Sous XP ou gdsClassic, force SetBkMode en OPAQUE et SetBkColor(Handle, GetSysColor(COLOR_HIGHLIGHT));
    utilise CheckWin32Version(6, 0) pour savoir quoi choisir

    En plus de tout cela, il faut savoir que le centrage varie d'un pixel d'où ton doublon de texte (tu vois en fait le texte d'origine et le tient)

    Pour GdsThemed sur Aero
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Rect.top += 2;
        Rect.Left += 2;
    Pour gdsClassic ou XP

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Rect.top += 2;
        Rect.Left += ((Rect.Width() + 1) % 2); // Le clHighlightText déborde sous le clRed pour une colonne d'une largeur paire, cela dépend même de la largeur du texte lors du calcul du DT_CENTER
    Sur le DrawCell d'une TStringGrid, j'ai vu un décalage, CellRect renvoi le bon Rect contrairement à celui passé en paramètre, à voir dans une TDBGrid si cela peut améliorer les choses

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      // Le Rect fourni est décalé de trois pixels depuis XE2 ??? !!!
      if (StringGrid->DefaultDrawing)
        Rect = StringGrid->CellRect(ACol, ARow);

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mai 2004
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 60
    Points : 38
    Points
    38
    Par défaut
    Merci pour toutes ces infos, ca va m'être très utile.
    Je travail avec Delphi XE3 sur Seven mais c'est vrai que certains de mes clients exploitent les applis encore sous XP, donc j'ai du boulot (environ 300 grilles)

    Donc toutes tes infos en code Delphi ca donne quoi ???

    Car moi la seule chose que je fais c'est remplir l'évenemement "OnDrawColumnCell"

    Voici un exemple de ce que je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      Try
        If UtilisateurAdministrateur.AsBoolean Then DBGrid1.Canvas.Font.Color := ClMaroon
                                               Else DBGrid1.Canvas.Font.Color := ClBlack;
        DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
      Except
      End;
    D'avance merci pour ton aide

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 705
    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 705
    Points : 25 581
    Points
    25 581
    Par défaut
    Citation Envoyé par rivierebruno22 Voir le message
    Donc toutes tes infos en code Delphi ca donne quoi ???
    -> devient .,
    << devient shl,
    {} devient begin end,
    Voir GradientFill et paramètres,
    les objets C++Builder sont les mêmes en Delphi

    Citation Envoyé par rivierebruno22 Voir le message
    Je travail avec Delphi XE3 sur Seven mais c'est vrai que certains de mes clients exploitent les applis encore sous XP, donc j'ai du boulot (environ 300 grilles)
    Oui, il te faudra tester sur les deux OS et varier aussi les thèmes !
    Sinon, que tu aies 300 grilles ou juste 3, fait un objet qui t'assiste dans cette tache avec un code flexible et réutilisable, tu ne vas pas faire 300 copier-coller évidemment !

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mai 2004
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 60
    Points : 38
    Points
    38
    Par défaut
    J'ai un peu de mal avec tout ca lol

    Je ne vois pas comment régler mon décalage d'un pixel ni a quel moment le faire.

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 705
    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 705
    Points : 25 581
    Points
    25 581
    Par défaut
    C'est beaucoup de bricolage dans le code que je maintiens, certaines grilles n'utilisent QUE nos fonctions communes d'affichage de DBGrid (à base de FillRect, GradientRect et DrawText) et certains selon la situation, utilise ces fonctions ou alors directement DefaultDrawColumnCell

    Pour le décalage c'est uniquement si tu utilises DrawText
    Si tu n'utilise QUE DefaultDrawColumnCell, j'ignore pourquoi tu as cet effet, surement le SetBkMode TRANSPARENT (je sais que mon collègue a tâtonné à ce sujet)

    Etant sous XP, je ne peux pas te dire ce qu'il faut faire pour que cela soit joli en Seven, moi j'ai justement corrigé les adaptions faites pour Seven qui ne fonctionnait pas sous XP ou en mode gdsClassic, en gros, j'ai géré la "non-regression"

    J'ai forcé toutes mes listes en gdsClassic pour ne pas me prendre la tête, déjà l'appli lors du passage de 2007 à XE2 s'est retrouvé "thèmé", j'ai du corriger pas mal de truc à cause du passage du style 2K au style XP

  7. #7
    Nouveau membre du Club
    Inscrit en
    Mai 2004
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 60
    Points : 38
    Points
    38
    Par défaut
    Salut ShaiLeTroll

    Désolé de répondre que maintenant, pas mal de taf
    Je pense avoir trouvé une parade qui donne quelque chose de propre à l'affichage.
    J'ai fixé la fonte de la grille sur "Tahoma" et la qualité sur "fqClearTypeNatural"

    En faisant ca, je n'ai plus le phénomène de superposition de caractère...

    Merci de ton aide en tout cas

Discussions similaires

  1. Réponses: 5
    Dernier message: 16/07/2012, 17h56
  2. Ecrire du texte en couleurs dans un composant
    Par wutang dans le forum Composants
    Réponses: 11
    Dernier message: 12/07/2004, 11h55
  3. Une image dans un composant ?
    Par bjl dans le forum Composants VCL
    Réponses: 2
    Dernier message: 20/03/2003, 12h28
  4. A propos du composant DBGrid
    Par _Rico_ dans le forum C++Builder
    Réponses: 2
    Dernier message: 24/07/2002, 10h18

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