Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour,
Dans une datawindow, j'ai ajouté dans le Header deux Text Object que j'ai appelé test1 et test2. Ensuite, lors du lancement de mon programme, j'initialise test1 et test2 et si test1>test2 je veux que la couleur du texte de cette case change. Pour ce faire, dans l'onglet Font, rubrique Text Color, j'ai mis ceci :
if (test1 > test2, 0, 255 )
Et cela me met une erreur car test1 et test2 ne sont pas des colonnes...
Help me...
Dernière modification par poche (27-11-2007 08:43:46)
Hors ligne
J'ai bien fais ceci :
if( isNumber( test1 ) and isNumber( test2 ), if( Long( test1 ) > Long( test2 ), 0, 255 ), 0 )
Mais cela m'a mis une erreur : Excepting String Expression
Le problème est que je ne test pas sur les colonnes mais sur des Text Object!!!
Dernière modification par poche (26-11-2007 13:50:29)
Hors ligne
poche a écrit:
Le problème est que je ne test pas sur les colonnes mais sur des Text Object!!!
confer ma réponse précédente... que tu as supprimée
Hors ligne
Désolé j'ai fais une mauvaise manipulation...
Donc je ne peux pas comparer deux nombre qui sont sur une datawindow??
Hors ligne
poche a écrit:
Donc je ne peux pas comparer deux nombre qui sont sur une datawindow??
Si, si, tu peux, mais il faut utiliser des colonnes virtuelles ou des computed fields.
Sinon, je pense qu'il faut tester test1.text comme argument dans le script...
PS:
Hors ligne
Avec test1.text ne marche pas...
Hors ligne
(if long(test1)> long(test2), rgb(0,0,0),rgb(255,255,255))
et il faut que test1 et test2 soit des computedfield, pas des text.
Dernière modification par hellkinder (26-11-2007 14:14:15)
Hors ligne
Cela ne peut pas fonctionner car test1 et test2 ne sont pas des colonnes...
Hors ligne
si tu fais des compute field avec comme valeur TEST1 ete TEST2 (etant des number)
alors les 2 computes seront de type number et tu pourras faire ta comparaison
Hors ligne
antibug a écrit:
si tu fais des compute field avec comme valeur TEST1 ete TEST2 (etant des number)
alors les 2 computes seront de type number et tu pourras faire ta comparaison
Tu ouvres ta dw dans le painter. Dans le menu 'FILE, EDIT, VIEW, INSERT, ....' tu fais Insert--> Control --> Computed Field
Tu l'appelles test1.
Tu refais la meme procedure et tu l'appelles test2.
Tu les mets en number.
Et tu peux faire ta comparaison.
Dernière modification par hellkinder (26-11-2007 14:27:03)
Hors ligne
Il me demande de mettre une expression pr chaque compute field, j'ai mis "".
Après si je veux modifier ce test1, j'ai fais cecic :
This.Modify( "test_1.Expression='" + String( ll_qte_abat ) + "'")
et sa ne marche pas!!
Dernière modification par poche (26-11-2007 14:34:56)
Hors ligne
poche a écrit:
Il me demande de mettre une expression pr chaque compute field, j'ai mis "".
Après si je veux modifier ce test1, j'ai fais cecic :Code:
This.Modify( "test_1.Expression='" + String( ll_qte_abat ) + "'")et sa ne marche pas!!
dans expression du CF tu met la variable qui contient ta valeur,
pas besoin de l'affecter par script
Hors ligne
essaye :
this.setitem(1,"test1",String( ll_qte_abat ))
(meme si je pense que ca ne soit pas tres propre de travailler avec des string..mais peut être en a tu besoin comme ca)
Le modify("expression... ca sert pour initialiser automatiquement le compute à une certaine valeur.
Par exemple si tu as une colonne qui s'appelle "prix" dans ta datawindow et que tu fais :
This.Modify( "test_1.Expression= prix/2")
Des que tu modifieras ta colonne prix, ton compute se mettra à jour automatiquement avec la moitié de ton prix.
Question: comment récupère tu ta valeur ll_qte_abat? est ce que ca correspond à la valeur d'une colonne?
Dernière modification par hellkinder (26-11-2007 14:43:45)
Hors ligne
Oui mais test1 n'est pas une colonne, donc on peut pas faire de setitem...
Test_1 peux changer de valeur en cours du programme...
Hors ligne
poche a écrit:
Oui mais test1 n'est pas une colonne, donc on peut pas faire de setitem...
Test_1 peux changer de valeur en cours du programme...
As tu essayé? (le setitem)
Dernière modification par hellkinder (26-11-2007 14:47:50)
Hors ligne
Au risque de me répéter, pourquoi n'utilises-tu pas des colonnes virtuelles en lieu et place de des statics texts (lesquels ne me semblent pas
appropriés pour l'utilisation que tu veux en faire)?
Hors ligne
je viens d'essayer sa compile mais ça ne marche pas, le champs de test_1 est vide...
Hors ligne
poche a écrit:
je viens d'essayer sa compile mais ça ne marche pas, le champs de test_1 est vide...
C'est à toi de l'initialiser dans le code:
test_1.text = ll_qte_abat
Hors ligne
Et bien ecoute, regarde ton type de compute, verifie qu'elle soit en number... Perso, mes computes, je les remplis avec des setitem, et en plus je leur mets des dropdown. Donc je pense que le setitem fonctionne tres bien. Maintenant, ca depend avec quoi tu les remplis.
Que te renvois le setitem en debug?
Ta variable a t elle bien une valeur?
C'est bien un COMPUTED FIELD ton test1 ??????
Dernière modification par hellkinder (26-11-2007 14:53:48)
Hors ligne
J'ai essayer avec des compute field, pourquoi pas avec des colonnes virtuelles, pouvez vous me dire la procédure svp car la je bug...
Hors ligne
les setitem c'est sur les computed field que tu les a fait? on est d'accord? pas sur des champs text?
Hors ligne
oui, c sur le compute, mais comment vois t'on le type du compute, je ne les pas trouvé dans les propriétés??
Et lorsque l'on fais un setitem sur un compute, ou vas la valeur qu'on a affecter, dans "Compute Expression"???
Hors ligne
relis la discussion.
Dernière modification par hellkinder (26-11-2007 14:59:24)
Hors ligne
poche a écrit:
J'ai essayer avec des compute field, pourquoi pas avec des colonnes virtuelles, pouvez vous me dire la procédure svp car la je bug...
Pour les colonnes virtuelles, il suffit de les ajouter dans le SELECT de ta datawindow:
SELECT is_colonne1, is_colonne1, 1 as "test_1" FROM my_table
Hors ligne
mais si je fais ça, ça se mettra dans le Detail et non dans le Header de la dw...
Hors ligne