Le forum (ô combien francophone) des utilisateurs de Powerbuilder.







Bonjour c'est encore moi
Cette fois ci je demande votre aide parce que je n'arrive pas trop à dechiffrer le code contenu dans l'expression du objet de type text dans ma datawindow.
if (IsNull (id_cde_sortie),if (palette_bloquee = 'O', rgb (128, 128, 128), If(mod(getrow(),2)=0, 15790320, 1073741824)), rgb (128, 200, 255))
Je sais que cette expression permettra une coloration des lignes de ma datawindow (du bleu pour spécifier que c'est une commande en cours ou sinon une alternance de deux couleurs : violet assez pale et blanc).
Si vous pouviez m'aider à decomposer les if imbriqués ce serait sympa
Merci d'avance pour votre aide
Dernière modification par Nephtis (17-08-2007 11:59:53)
Hors ligne










if (IsNull (id_cde_sortie), if (palette_bloquee = 'O', rgb (128, 128, 128), If(mod(getrow(),2)=0, 15790320, 1073741824 ) ), rgb (128, 200, 255) )
comme cela ?
Hors ligne








Comme ça, ça va mieux ?
if (IsNull (id_cde_sortie) , if (palette_bloquee = 'O' , rgb (128, 128, 128) , If(mod(getrow(),2)=0 , 15790320 , 1073741824) ) , rgb (128, 200, 255) )
Damned ! 1 min 15 s de retard !
Dernière modification par shahin (16-08-2007 12:20:37)
Hors ligne










shahin a écrit:
Damned ! 1 min 15 s de retard !
Mais non ... c'est pas pareil ...
On peut faire varier
- les ',' en debut ou fin de ligne
- les '(' & ')' en debut ou fin de ligne
Comme on veut on chois ....
Hors ligne







En fait ce que je comprenais pas c'est le fonctionnement du if ( pour comprendre que les deuxièmes et troisièmes arguments correspondent respectivement au bout de code à executer en cas de truevalue et falsevalue)
Donc pour mes if imbriqués cela reviendrait-il à :
If (IsNull (id_cde_sortie) Then If (palette_bloquee = 'O') Then rgb(128,128,128) ElseIf(mod(getrow(),2)=0) Then 15790320 Else 1073741824 End If Else rgb(128,200,255) EndIf
Je préfère bien décomposer les if sinon je trouve que c'est assez illisible
Aussi à quoi correspondent les chiffres 15790320 et 1073741824 des mes premiers Else (c'est surement pour la coloration synthaxique ligne par ligne mais je ne vois pas comment Pb interprete ces deux chiffres)
Dernière modification par Nephtis (16-08-2007 12:47:08)
Hors ligne
Nephtis a écrit:
En fait ce que je comprenais pas c'est le fonctionnement du if (
pour comprendre que les deuxièmes et troisièmes arguments correspondent respectivement au bout de code à executer en cas de truevalue et falsevalue)
Donc pour mes if imbriqués cela reviendrait-il à :Code: pb
If (IsNull (id_cde_sortie) Then If (palette_bloquee = 'O') Then rgb(128,128,128) ElseIf(mod(getrow(),2)=0) Then 15790320 Else 1073741824 End If Else rgb(128,200,255) EndIf
Je préfère bien décomposer les if sinon je trouve que c'est assez illisible
Aussi à quoi correspondent les chiffres 15790320 et 1073741824 des mes premiers Else (c'est surement pour la coloration synthaxique ligne par ligne mais je ne vois pas comment Pb interprete ces deux chiffres)
C'est le résultat de la fonction RGB() soit : rouge + vert * 256 + bleu * 65536
Hors ligne








Nephtis a écrit:
En fait ce que je comprenais pas c'est le fonctionnement du if (
pour comprendre que les deuxièmes et troisièmes arguments correspondent respectivement au bout de code à executer en cas de truevalue et falsevalue)
Bien vu.
En fait, il y a deux powerscipts : le powerscript lui-même et le langage d'expression des datawindow
le if(,,) de la datawindow est l'équivalent de l'opérateur ternaire "?:" des langages C et consors
Et si t'as du temps à perdre, lire Ecrire sur une seule ligne
Dernière modification par shahin (16-08-2007 14:14:10)
Hors ligne










Hors ligne







J'ai testé les couleurs avec le ColourPicker (merci Pick Ouic )
Mais lorsque je teste la couleur avec le code 1073741824 : j'obtient le code rgb(255,255,8447)
Sachant que chaque couleur est codée sur 255, comment se comporte pb alors que je lui passe un bleu à 8447?
Hors ligne








C'est une couleur système (à priori : Window Background)
L'avantage des couleurs systèmes est que l'utilisateur peut les personnaliser.
par exemple, la plupart d'entre nous ont un "window background" blanc et un "window text" noir, mais certaines personnes les inversent (ce qui fait ressembler Windows à DOS)
Hors ligne







Merci pour vos reponses, je vais me replonger un peu plus sur l'expression parce que elle me semble assez bizarre comparé au résultat qu'elle donne
Distribution de pépites ...
Hors ligne







Vu que je vient tout juste de m'attaquer à ce problème, je solicite encore votre aide pour comprendre ce qui ne va pas dans mon code.
Ce que je souhaite faire c'est
Si mon code de sortie est nul et que le code d'observation est différent de 1 alors
traitement pour colorier une ligne sur 2 (et test aussi si c'est bloqué)
Sinon si mon code de sortie est nul et que le code d'observation est égal à 1 alors
couleur "jaune"
Sinon si mon code de sortie n'est pas nul et que le code d'observation est différent de 1 alors
couleur "bleue"
Sinon
couleur "peche"
Fin des Si
J'ai codé ceci :
if ((IsNull (id_cde_sortie) AND cde_obs <> '1') ,if (palette_bloquee = 'O' , rgb (128, 128, 128) , If(mod(getrow(),2)=0 , 15790320 , 1073741824)) , if ((IsNull (id_cde_sortie) AND cde_obs = '1') , rgb(255,255,0) , if (((NOT IsNull (id_cde_sortie)) AND cde_obs <> '1') , rgb(128,200,255) , rgb(253,191,183))))
Mais dans l'execution je n'ai que la couleur peche (rgb(253,191,183)) alors que j'ai par exemple de lignes dont le code sortie est nul
Où est ce que j'ai fait une boulette? 
Hors ligne











Essaie cette expression:
if (IsNull (id_cde_sortie), if( cde_obs = '1',rgb(255,255,0) , if (palette_bloquee = 'O', rgb (128, 128, 128), If(mod(getrow(),2)=0, 15790320, 1073741824))), if (cde_obs <>'1', rgb(128,200,255), rgb(253,191,183))))
NB: J'ai fait ça sous notepad faute de mieux, il est possible qu'il manque des parenthèses: A toi de corriger
Hors ligne







foon a écrit:
Essaie cette expression:
Code: pb
if (IsNull (id_cde_sortie), if( cde_obs = '1',rgb(255,255,0) , if (palette_bloquee = 'O', rgb (128, 128, 128), If(mod(getrow(),2)=0, 15790320, 1073741824))), if (cde_obs <>'1', rgb(128,200,255), rgb(253,191,183)))[s])[/s]
NB: J'ai fait ça sous notepad faute de mieux, il est possible qu'il manque des parenthèses: A toi de corriger
Ca se rapproche de ce que je veut, j'ai testé (il y avait juste une parenthese en trop à la fin) et maintenant ça entre bien dans la toute première condition mais quand il faut entrer dans la condition pour avoir du bleu (code sortie non nul et code obs <> 1) et bien ça me sort du peche
J'essaierais de debugguer un peu plus ça lorsque j'aurais le temps
Non finalement c'était bon, le problème venais de mes données. En effet je teste si mon code d'observation est different de 1 mais ce qu'il faut savoir c'est que la valeur null n'est pas considérée comme une valeur différente de 1. D'où le fait que je rentrait toujours dans mon else.
Dernière modification par Nephtis (28-08-2007 10:30:44)
Hors ligne