Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour, pourais-je avoir un peu de documentation, sur comment colorer lle texte de ma datawindow, sur base d'une condition sur la valeur d'un champ x.
Merci bcp !
Hors ligne
Salut
Dans les propriétés du contrôle à colorier, onglet Font, valeurs TextColor ou BackGround color, clique sur le bouton 'différent rouge' et saisis une formule, p.ex
if ( x > 100 , RGB(255,200,200), RGB(255,255,255) )
NB1 : le bouton se transformera en 'égal vert' pour indiquer que la valeur est donnée par une condition.
NB2 : ce principe reste valable pour la plupart des propriétés des contrôles de DW.
NB3 : bien évidemment tu peux construire des conditions très complexes avec plusieurs niveaux de condition imbriqués, voire utiliser des fonctions globales dans les formules
HTH
Dernière modification par rsz (05-12-2006 09:34:54)
Hors ligne
Merci bcp frangin ! Tu viens là de rendre un service imense !
Hors ligne
comment pourrais-je colorer une case (RGB = 255,255,153) d'une datawindow freeform que lorsqu'elle a le focus ?
Hors ligne
if(getrow()=currentRow(),RGB = 255,255,153,couleurdefaut)
Hors ligne
J'ai oublié de préciser que ma datawindow allait recevoir ne nombreux dataobjets (je me vois mal aller coder cette ligne dans toutes les zones de tous mes dataobjets !)
Y a-t-il une solution à coder dans le ItemFocusChanged par exemple ?
Hors ligne
le principe je pense est de faire un describe dans une boucle sur le nombre de dataobject, tu récupère le nom et ensuite tu lui code son attibut background.color
si quelqu'un voit autre chose.....
Hors ligne
Hors ligne
j'ai fait une boucle qui parcourt toutes les colonnes. dans cette boucle j'ai écris ca :
this.modify( "#" + string(ll_compteur) + ".background.color='1073741824~tif(getrow()=currentRow(), RGB(255,255,153), RGB(255,255,255))'")
ca me mets tous mes champs en jaune !
C'est peut-être parce qu'on teste la ligne courante (getrow=currentrow) et non la colonne ... ?!
Hors ligne
abdelta a écrit:
C'est peut-être parce qu'on teste la ligne courante (getrow=currentrow) et non la colonne ... ?!
Comme dirait ma fille : Bah oui !
Si le but est de montrer à l'utilisateur où il est en train de saisir, n'est il pas suffisant de cocher "Show Focus rectangle" ?
Hors ligne
Tu as essayé le IsSelected() dans ton expression?
Sinon, la solution de Shahin est la plus simple, si tes utilisateurs acceptent
d'avoir une surbrillance de leur champ d'une autre couleur que le jaune
Dernière modification par foon (20-04-2007 08:21:17)
Hors ligne
foon a écrit:
Tu as essayé le IsSelected() dans ton expression?
IsSelected fait référence à la ligne sélectionnée (toujours pas la colonne !)
Sinon, la solution de Shahin est la plus simple, si tes utilisateurs acceptent
d'avoir une surbrillance de leur champ d'une autre couleur que le jaune
Malheureusement la charte gaphique imposée nous fait mettre le champ actif en jaune.
Hors ligne
j'ai codé dans l'événement ItemFocusChanged de ma datawindow :
is_act_col = dwo.Name this.modify( is_prec_col + ".Background.Color = '1073741824'") this.modify( is_act_col + ".Background.Color = rgb(255,255,153)") is_prec_col = dwo.Name
mais ca ne change pas la couleur !
Est-ce que vous voyez quelque chose qui va pas ?
Hors ligne
Le mode du background est opaque ou transparent sur tes colonnes?
Hors ligne
il me semble que j'avais eut un soucis si c'était en transparent, dans le code je ne pouvais pas le changer..
Hors ligne
si c'est pas un probleme d'opacité, voila un code qui fonctionne chez moi que tu met dans itemfocuschanged:
gs_couleur_champ_enable = string (rgb(255,255,153)) gs_couleur_champ_disable = string (rgb(255,255,255)) this.modify ("nomdetacolonne.background.color=~""+gs_couleur_champ_disable +"~tif(GetRow()<>CurrentRow(),"+gs_couleur_champ_disable+","+gs_couleur_champ_enable+")~"")
Je viens de le tester et ca marche tres bien
Je te souhaite bonne chance, car j'ai bien passé 1h à chercher quand utiliser des cotes ou double cotes ou tilde...bonne eclatante!
Dernière modification par hellkinder (20-04-2007 10:10:52)
Hors ligne
Il faudrait rajouter la ligne suivante si tes colonnes sont en mode transparent, avant d'appliquer le changement de couleur:
this.modify( is_act_col + ".Background.Mode=0")
Hors ligne
ah cool c'est bon a savoir merci
Hors ligne
Mes colonnes étaient bien en opaque
J'ai mis ceci avant venir voir vos réponses et ca marche aussi
is_act_col = dwo.Name this.modify( is_prec_col + ".Background.Color = '1073741824'") this.modify( is_act_col + ".Background.Color = '10092543'") is_prec_col = dwo.Name
En fait, j'ai calculé l'équivalent long de RGB(255,255,153). Ca donne 10 092 543.
1 073 741 824 c'est la couleur pour WindowBackgroundColor !
Hors ligne
...La blague de Denisot
Ok, autant pour moi, il aurait effectivement fallu faire comme
Hellkinder:
is_act_col = dwo.name this.modify( is_prec_col + ".Background.Color = '1073741824'") this.modify( is_act_col + ".Background.Color = '" + string(rgb(255,255,153))+ "'") is_prec_col = dwo.name
Merci abdelta
Hors ligne