Aide - Recherche - Membres - Calendrier
Version complète : Couleurs dans DrawItem d'un gridEx
Les Forums de PalmAttitude.org > GENERAL PalmOS > Développement sous PalmOS > Développement HB++
Orabig
Je constate des choses bizarres autour du code que j'ai écris dans crocoWords pour afficher le tableau des scores. Je vais essayer d'être clair.

J'ai utilisé un gridEx, dont la deuxième colonne est un champ de type userDraw. C'était nécessaire, car je voulais pouvoir afficher le texte en deux couleurs différentes selon les cas (noir ou gris).

Voici mon code (simplifié) :
CODE
Private Sub grdScores_DrawItem(ByVal iRow As Integer, ByVal iCol As Integer, ByVal lItemData As Long, ByVal iLeft As Integer, ByVal iTop As Integer, ByVal iWidth As Integer, ByVal iHeight As Integer)
    grdScores.TextColor=hbColorBlack
        tPartie.LookupUniqueID lItemData
        if tPartie.Joueur=CROCO_PLAYER then grdScores.TextColor=hbColorGray
        grdScores.TextOut iLeft,iTop,tPartie.Joueur,hbTextAlignTop+hbTextAlignLeft,109
End Sub


Or, quand une ligne est sélectionnée, j'ai un affichage différent sur le simulateur (Garnet), et sur mon T5. Voici les screens :

Sur le T5 :
Sur le simulateur :

J'ai deux problèmes :
icon_arrow.gif Sur le simulateur, je ne comprends pas pourquoi le texte s'affiche en blanc. C'est bien, mais c'est étonnant, car ma procédure commence par grdScores.TextColor=hbColorBlack. En résumé, ca marche, alors que ca devrait pas.
icon_arrow.gif Sur le T5, c'est la couleur de fond qui n'est pas bonne. Je pensais que l'OS changerait correctement l'attribut BackColor de mon grid si la ligne est sélectionnée. On voit bien que la couleur de fond derrière le texte est trop sombre par rapport à ce que ça devrait être. En résumé, ca ne marche pas, alors que ça devrait. Quel code faut-il mettre pour que la couleur de fond soit correcte ?

Merci de votre aide à ceux qui comprennent wink.gif
Payalba
Tu es sure que la case n'est pas sélectionée ?

En general, je réinitialise systematiquement des forcolor, backcolor et textcolor quand je dessine dans le gridex.
Orabig
CITATION(Payalba @ 14/03/2008 à 12:34 ) *
Tu es sur que la case n'est pas sélectionée ?

Heu, non, au contraire, je suis sur que la case est sélectionnée.

CITATION(Payalba @ 14/03/2008 à 12:34 ) *
En general, je réinitialise systematiquement des forcolor, backcolor et textcolor quand je dessine dans le gridex.

Ha ben, justement, t'as pas un bout de code pour ça, qui récupère les bonnes couleurs ?
Payalba
Je regarde ce que j'ai en stock
Payalba
Voila je fais des trucs comme ça :

CODE
Dim cDB as clsDataBase

    GridListe.DrawFont = hbFontStandard
    if iRow = 0 then
        GridListe.BackColor = uicolor(hbUIFormFrame)  'HTMLCOlor("mediumblue")
      GridListe.ForeCOlor = uicolor(hbUIFormFrame) 'HTMLCOlor("mediumblue")
        GridListe.TextColor = HTMLColor("White")
        GridListe.Rectangle iLeft, iTop, iLeft+iWidth-1 , iTop+iHeight-1,hbRectBorderSolid+hbRectFillSolid
        select case iCOl
            case 0
                GridListe.TextOut iLeft+(iWidth-1)/2,iTop,"Classes", hbTextAlignCenter
            case else
                GridListe.CopyArea iLeft+(iWidth-10)/2,iTop+(iHeight-10)/2,10,10,imgdeplacement,1,1
        end select
    else

        if iRow = gridListe.ROw then
            GridListe.BackColor = HTMLCOlor("dodgerblue")
             GridListe.ForeCOlor = GridListe.BackColor

        else
            if iRow mod 2 = 1 then
                    GridListe.BackColor = HTMLCOlor("ghostwhite")
                  GridListe.ForeCOlor = GridListe.BackColor
            else
                    GridListe.BackColor = HTMLCOlor("cornsilk")
                  GridListe.ForeCOlor = GridListe.BackColor
            end if
        end if
        GridListe.TextColor = uicolor(hbUIFormFrame) 'HTMLColor("mediumblue")
        GridListe.Rectangle iLeft, iTop, iLeft+iWidth-1 , iTop+iHeight-1,hbRectBorderSolid+hbRectFillSolid

        Set cDB = listeDB.Item(CInt(lItemData))
        select case iCol
            case 0
                GridListe.TextOut iLeft+2,iTop,cDB.nom, hbTextAlignLeft
            case 1

                if cDB.carte = 0 then
                    GridListe.CopyArea iLeft+(iWidth-10)/2,iTop+(iHeight-10)/2,10,10,imgPalm,0,0

                else
                    GridListe.CopyArea iLeft+(iWidth-10)/2,iTop+(iHeight-10)/2,10,10,imgSD,0,0

                end if
        end select
     end if
Orabig
Merci de ton aide ! cool.gif

Je suis parti de ton code, mais les couleurs n'étaient pas tout à fait correctes par rapport à ce que je voulais.
Au final, je suis arrivé à ça : (après quelques tatonnement)
CODE
    grdScores.BackColor = uicolor(hbUIFormFill)
  grdScores.TextColor = uicolor(hbUIFieldTextHighlightForeground)
  if iRow = grdScores.Row then ' car grdScores.SelectionMode=hbSelectRow
    grdScores.BackColor = uicolor(hbUIDialogFill)
    grdScores.TextColor = uicolor(hbUIFieldText)
  end if


Ca marche à la fois sur mon T5, et sur le simulateur.
En fait, ce qu'il me manque, c'est un petit récap simple et visuel des différentes constantes utilisées dans uicolor(), car je m'y perds un peu (et on peut pas dire que l'aide HB++ soit d'une grande... aide... sur le sujet)

Merci en tout cas.
Payalba
CITATION(Orabig @ 14/03/2008 à 17:44 ) *
Merci de ton aide ! cool.gif


De rien

CITATION(Orabig @ 14/03/2008 à 17:44 ) *
En fait, ce qu'il me manque, c'est un petit récap simple et visuel des différentes constantes utilisées dans uicolor(), car je m'y perds un peu (et on peut pas dire que l'aide HB++ soit d'une grande... aide... sur le sujet)

J'ai le même soucis, je me suis fait un projet de test et je tatone sourire.gif
Patrice
Chapitre "UI Color Data Types" dans le PalmOS Reference Guide wink.gif
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.
Invision Power Board © 2001-2008 Invision Power Services, Inc.