Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour!
Voià, j'aimerais pouvoir changer la couleur d'une ligne d'une datawindow si son paramètre Truc est différent de celui de la ligne précédente. Le problème c'est que je sais pas trop comment m'y prendre.
Il m'avait sembler avoir vu un topic un peu dans le même genre sur pbadonf mais après recherche, ça ne semble pas correspondre avec mes besoins.
Je pensais mettre une sorte de
if(not(truc[row]=truc[row-1]),rgb(x,y,z),rbg(x2,y2,z2))
mais je sais pas où le mettre ni comment sont vraiment gerer les couleurs (car il faudra que je récupère aussi la couleur de la ligne précédente).
Merci de m'éclairer un peu
Gros bisoux
Dernière modification par Mr Pink Eyes (22-08-2007 15:28:52)
Hors ligne
Dans la propriété "Background color" de chacune de tes colonnes
Hors ligne
Okay, merci!
Et pour récuperer la couleur d'une autre ligne ?
Hors ligne
Mr Pink Eyes a écrit:
Okay, merci!
Et pour récuperer la couleur d'une autre ligne ?
Méthode de sioux (Y'en a d'autres peut-être plus belles, mais bon): ajouter un champ compute caché dans lequel tu codes l'expression suivante:
if(not(truc[row]=truc[row-1]),"rgb(x,y,z)","rbg(x2,y2,z2)")
Ensuite, tu récupères pour ta ligne l'expression affichée dans la compute
=> Tu as ta couleur
Hors ligne
Aarghhhhhhhhhhhh !
Tu peux pas faire autrement ?
Genre if(mod (getrow(),2))=0, , ) ?
Hors ligne
shahin a écrit:
Aarghhhhhhhhhhhh !
Tu peux pas faire autrement ?
Genre if(mod (getrow(),2))=0, , ) ?
Arf! celle-ci sera mieux effectivement.
A force de chercher des trucs tordus pour faire tourner NS-DK, je raconte n'importe nawak
C'est mon tour!
Hors ligne
:\ en fait disons que je veux faire un coup bleu, un coup vert. Donc faut que je sache si je dois changer du vert au bleu ou du bleu au vert. Et là je vois pas trop comment y arriver avec ta méthode...
Hors ligne
il me semblait qu'il fallait mettre la position relative, dans ton cas : column_name[-1]
cela ne fonctionne pas avec les computes, uniquement les colonnes
par contre si c'est simplement pour alterner : effectivement avec un modulo de 2 (ou plus) et getrow()
Hors ligne
eRaSorZ a écrit:
il me semblait qu'il fallait mettre la position relative, dans ton cas : column_name[-1]
cela ne fonctionne pas avec les computes, uniquement les colonnes
Ouais, exactement. En fait le changement de couleur se fait en fonction de l'égalité ou non d'une colonne par rapport à la ligne précédente.
Dernière modification par Mr Pink Eyes (22-08-2007 14:50:48)
Hors ligne
Y'a pas, il va falloir que tu te palluches un script de mise à jour de ta dw.
Il faut reprendre l'idée du champ caché, mais qui peut prendre 3 valeurs
(exemple: 1 = Pas de couleur,
2 = bleu,
3 = vert )
Dans l'expression de ton backgroundcolor, tu testes la valeur du champ, et tu appliques le RGB qui va bien.
Et dans ton script de mise à jour de ta dw, tu mets à jour la valeur du champ caché en fonction:
- De la valeur de "truc" courant et de "truc" de la ligne précédente
- Et de la valeur de ton champ caché de la dernière ligne précédente pour laquelle tu as affiché bleu ou vert
Hors ligne
Okay, ça me va comme idée. C'est ce que j'avais grosso-modo en tête mais je voulais savoir si on pouvait passer par les priopriétés des champs.
Comment on récupère une ligne en Powerscript ? Un dw.Object.Row.Color ? un truc du genre ? J'ai encore un peu de mal avec les trucs dans le genre
Hors ligne
Non, pas d'usine à gaz via powerscript !
la réponse de shahin est la bonne :
dans la propriété BackgroundColor de la ligne il faut simplement coder
if(mod(getrow(),2)=0, vert, bleu)
La fonction modulo retournera 0 une ligne sur deux, ce qui changera la couleur de tes lignes une ligne sur deux.
Hors ligne
Chrnico a écrit:
Non, la réponse de shahin est la bonne
dans la propriété BackgroundColor de la ligne il faut simplement coder
if(mod(getrow(),2)=0, vert, bleu)
La fonction modulo retournera 0 une ligne sur deux
Sauf que j'ai cru comprendre qu'il ne s'agissait pas d'avoir les lignes bleues ou vertes alternativement, mais:
Des lignes bleues tant que "truc" est identique, puis des lignes vertes, puis des lignes bleues etc...
Et là, c'est plus
Hors ligne
foon a écrit:
Chrnico a écrit:
Non, la réponse de shahin est la bonne
dans la propriété BackgroundColor de la ligne il faut simplement coder
if(mod(getrow(),2)=0, vert, bleu)
La fonction modulo retournera 0 une ligne sur deuxSauf que j'ai cru comprendre qu'il ne s'agissait pas d'avoir les lignes bleues ou vertes alternativement, mais:
Des lignes bleues tant que "truc" est identique, puis des lignes vertes, puis des lignes bleues etc...
Et là, c'est plus
Exactement! Une ligne sur deux, je m'en serai sorti ^^
Hors ligne
Dans ce cas, il faut faire un compute avec cumulativesum(if(toto=toto[-1],0,1)) et dans le Background if(mod(compute,2)=0, vert, bleu)
Hors ligne
Chrnico a écrit:
Dans ce cas, il faut faire un compute avec cumulativesum(if(toto=toto[-1],0,1)) et dans le Background if(mod(compute,2), vert, bleu)
Ca, ça devrait effectivement faire l'affaire. chrnico
Hors ligne
Chrnico a écrit:
Dans ce cas, il faut faire un compute avec cumulativesum(if(toto=toto[-1],0,1)) et dans le Background if(mod(compute,2), vert, bleu)
Le if(mod(compute,2), vert, bleu) ne lu iplait pas... TRU/FALSE Expression expected. Si en plus PB fait le difficile!
Edit : il suffisait de mettre if(mod(compute,2)=0, vert, bleu)! Merci Chrnico!!
Dernière modification par Mr Pink Eyes (22-08-2007 15:21:46)
Hors ligne
=0
j'ai corrigé la ligne, va voir
Hors ligne
Plus rapide que moi ^^
Hors ligne
Okay, tout marche impec'!
Distribution de pépites! (dans la limite du raisonnable ;))
Hors ligne
Mr Pink Eyes a écrit:
Distribution de pépites! (dans la limite du raisonnable ;))
Pas pour moi: j'ai été archimauvais sur ce coup là (y'a que la question que j'ai bien pigé)
Cela dit, faire du PB sans PB c'est pas facile tous les jours...
Hors ligne
foon a écrit:
Cela dit, faire du PB sans PB c'est pas facile tous les jours...
T'inquiète Foon, avec un peu de chance tu feras du VB 6 à la rentrée
Hors ligne