Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour, j'ai bien trouvé des réponses sur : resolu
Je vais choisir de faire le Modify, mais j'ai l'impression (en lisant le code) que ça va modifier la couleur de toute la colonne et pas seulement la couleur de la cellule qui se trouve dans la colonne1 4éme ligne
dw_planning.modify("projects_project_name_AM_"+string(ll_col)+".background.color='"+string(ll_color_value)+"'"
Je me trompe ?
Je passe par le Modify, car les changements de couleur se font en dynamique suite à des actions sur des boutons.
Merci
Dernière modification par pBLove (30-12-2020 14:39:22)
Hors ligne
Oui, pour modifier une propriété d'un control de la datawindow à la ligne, tu doit passer par une expression, soit dans le code d'origine de ton dataobject, soit ment en powerscript via un modify.
Par contre, dans ton extrait de code, tu affectes une constante a la propriété et non une expression.
Par exemple pour colorer col_1 sur la ligne courrante en rouge :
dw_1.modify("col_1.background.color=''0~tif(getrow()=currentrow(),255,rgb(255,255,255))")
Hors ligne
Merci XLAT
Je permet la multi selection de lignes
Sur le click de mon bouton j'ai mis le code suivant
long ll_row string ls_color = string(RGB(52, 201, 36)) ll_row = dw_bkg.getSelectedRow(0) dw_bkg.Modify("c_TwngVehRegNo.Background.mode=0") DO WHILE ll_row > 0 dw_bkg.Modify("c_TwngVehRegNo.Background.Color="+ls_color) ll_row = dw_bkg.getSelectedRow(ll_row) LOOP dw_bkg.SelectRow(0,false)
Je le modifier en
long ll_row string ls_color = string(RGB(52, 201, 36)) ll_row = dw_bkg.getSelectedRow(0) dw_bkg.Modify("c_TwngVehRegNo.Background.mode=0") DO WHILE ll_row > 0 dw_bkg.Modify("c_TwngVehRegNo.Background.Color=''0~tif(getrow()=ll_row,144,"+ls_color+")") ll_row = dw_bkg.getSelectedRow(ll_row) LOOP dw_bkg.SelectRow(0,false)
Mais ça le fait pas avec ma boucle
Dernière modification par pBLove (29-12-2020 13:42:28)
Hors ligne
Bonjour, je vous expose mon problème.
J'ai une datawindows pour laquelle je ne peux plus afficher de colonne à l'écran. Mais je dois intégrer une colonne "code couleur" modifiable. Donc j'ai proposé de ne pas l'afficher, mais de colorer les lignes d'une colonne deja affichée en fonction de cette colonne "code couleur"
-> Là je pensais que mettre le background color en fonction de ma colonne directement dans la definition de ma datawindows etait la bonne solution
L'utilisateur doit pouvoir modifier les couleurs
J'ai donc mis en place 4 boutons "vert,jaune,rouge,rien" et une multi selection de lignes, pour qu'au clic je puisse modifier la valeur (pour les lignes selectionnées) de la colonne "code couleur" et changer le background de l'autre colonne.
-> Là je pensais passer par le Modify
J'ai fait plusieurs essais avec, mais rien de bon.
Donc plutôt que de partir dans tous les sens, pour vous quelle est la meilleur solution :
Passer par une coloration conditionnelle directement définie dans la colonne de la datawindow et voir/faire en sorte que l'affichage se modifie après avoir modifié la valeur de la colonne non affichée ?
Passer par un Modify (comme dans mon bout de code) au click sur un bouton ?
Merci
Hors ligne
Bonjour,
Dans ce cas, pourquoi faire compliqué quand on peut faire simple avec : isselected() http://infocenter-archive.sybase.com/he … lected.htm
;-)
dw_bkg.Modify("c_TwngVehRegNo.Background.Color=''0~tif(isselected(),144,"+ls_color+")")
Et pas besoin de boucle.
Dernière modification par xlat (24-12-2020 11:37:50)
Hors ligne
Salut et encore merci Xlat, j'espère que tu passes de bonnes fêtes.
j'ai essayé ton code , mais ça ne fait rien.
J'ai essayé ce code
long ll_row string ls_color = string(RGB(52, 201, 36)) string ls_color2 = string(RGB(250,0,0)) ll_row = dw_bkg.getSelectedRow(0) DO WHILE ll_row > 0 dw_bkg.object.v_color[ll_row]="VERT" ll_row = dw_bkg.getSelectedRow(ll_row) LOOP dw_bkg.SelectRow(0,false) dw_bkg.Modify("c_TwngVehRegNo.Background.mode=0") //dw_bkg.Modify("c_TwngVehRegNo.Background.Color=''0~tif(v_color = '0', rgb(255, 0, 0), if(v_color = 'VERT', rgb(52, 201, 36), if(v_color = '1', rgb(52, 201, 36), rgb(192, 192, 192))))") dw_bkg.Modify("c_TwngVehRegNo.Background.Color=''0~tif(v_color = 'VERT',"+ls_color+","+ls_color2+")") dw_bkg.SelectRow(0,false)
Mais rien non plus, comme si la partie "tif ..." n'était pas interprétée car si je remplace par
dw_bkg.Modify("c_TwngVehRegNo.Background.Color="+ls_color+"")
ça met toute la colonne en vert
Dernière modification par pBLove (29-12-2020 13:47:01)
Hors ligne
Bonjour,
Regarde le retour du modify en utilisant l'expression, ça te retourne soit une chaîne vide, soit un message d'erreur.
Hors ligne
Merci pour ton aide xlat, tu as etait mon soutient dans ce long tunnel
il faut que je penses plus souvent à regarder les codes retour des fonctions, pas évident la gymnastique entre les différents langages.
Il y avait 2 erreurs de syntaxe : le double guillemet et les caractères d'échappement
La bonne syntaxe est :
dw_bkg.Modify( "c_TwngVehRegNo.Background.Color='0~tIf(v_color=~~'VERT~~'," +String(RGB(52, 201, 36)) + "," +String(RGB(250,0,0)) + ")'")
Encore merci et longue vie à ce forum
Hors ligne