Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Salut, c'est de nouveau moi :D
J'avance petit à petit dans mon développement.
Mon problème d'aujourd'hui :
J'ai une datawindow avec plein de champs. J'ai également des boutons (d'ailleurs c'est pas des boutons mais des statictext pour simuler des boutons enfoncés ou non) et selon le bouton cliqué, j'affiche tel ou tel champ.
Actuellement, sur le click d'un bouton, j'ai
champ1.visible = true
champ2.visible = true
champ3.visible = false
champ4.visible = false
....
Mais j'ai beaucoup de champs.
Je voudrais donc savoir si quelqu'un connait une façon plus simple de gérer ce système d'affichage ?
Peut-être avec les expressions mais je ne connais pas du tout.
Merci
Hors ligne
tu travailles sur quelle version de pb ?
pour utiliser des pseudos boutons ?
car, si tu as la possibilité de mettre des boutons sur ta datawindow, c'est beaucoup mieux ! et plus facile à gerer.
tu peux aussi mettre tout ton script pour gerer l'acces des champs ?
A+
Hors ligne
J'utilise PB 9
Je peux mettre des boutons dans la datawindow mais ils ne peuvent pas avoir l'apparence de bouton enfoncés. C'est pour ça que j'utilise des statictext et que je joue avec le border en Lowered ou Raised.
J'aimerais éviter, si possible, de mettre champ1.visible = true pour chaque champ sous chaque bouton.
Hors ligne
je viens de creer une fonction globale...
mais tu peux l'integrer dans ta window... ou dans un user objet
le meme principe,
tu copies le contenu dans un fichier texte
tu sauvegardes en tant que "f_colonne_visible.srf"
et tu l'importes sur ton projet.
$PBExportHeader$f_colonne_visible.srf global type f_colonne_visible from function_object end type forward prototypes global subroutine f_colonne_visible (datawindow adw_dw, string as_colonne[], string as_visible[]) end prototypes global subroutine f_colonne_visible (datawindow adw_dw, string as_colonne[], string as_visible[]);/**********************************************************************************************/ /* Nom : f_colonne_visible */ /* But : */ /* Arguments: */ /* Appel : */ /* Remarques: */ /* Histo : SKA - sept 2006 */ /**********************************************************************************************/ long ll_i string ls_modify for ll_i = 1 to upperbound(as_colonne) ls_modify = ls_modify + ' ' + as_colonne[ll_i] + ".visible=" +as_visible[ll_i] next if ll_i > 0 then adw_dw.modify(ls_modify) end if end subroutine
Apres ca,
voila le script que j'utilise...
si ca peut te faciliter la tache ?
il faut juste que tu mettes les noms de colonnes concernées,
et si elles doivent etre invisible ou non...ect...
string ls_colonne[] string ls_visible[] ls_colonne[1] = "scommandbutton" ls_colonne[2] = "scheckbox" ls_visible[1] = '1' ls_visible[2] = '0' f_colonne_visible(dw_detail,ls_colonne,ls_visible)
Hors ligne
Tu passes par un fonction, c'est pas bête.
Je vais voir ça.
Par contre, y'a pas un moyen d'utiliser l'expression sur Visible des champs dans une datawindow ?
Ca m'aurait permis de comprendre le fonctionnement :D
En tout cas merci, ça va bien m'aider ce truc :D
Hors ligne
Regarde bien le code...
Ca ne concerne que les colonnes des datawindows...enfin, de la datawindow concernée plutot...
Hors ligne
Oui, c'est ce qu'il me faut
Par contre, va quand même falloir que je me tape une ligne pour chaque champ (ls_colonne[1] = "scommandbutton") donc ça revient un peu au même
Ce qui aurait été super bien, c'est qu'il soit possible de rattacher des champs à un group box, comme ça, tu rends visible ou non seulement le group box
Bon ben, à l'attaque, je me tape les lignes :D
Dernière modification par Steph (28-09-2006 14:28:58)
Hors ligne
ca, c'est pas trop dur !
une fois que tu as etabli ta liste des colonnes,
apres, il suffit juste de faire du copier-coller...
et la fonction se chargera du reste...
Hors ligne
Ca marche niquel :D
Par contre, j'ai changé quelque trucs :
J'ai déclaré le ls_colonne en variable d'instance et initialisé avec tous les champ à l'ouverture de la fenêtre.
J'ai pas mis de ls_visible par contre j'ai dupliqué la boucle pour afficher et changé l'appel de la fonction :
FOR ll_i = 1 TO 59 ls_modify = ls_modify + ' ' + a_s_colonne[ll_i] + ".visible=" + a_s_etape1 NEXT FOR ll_i = 60 TO 83 ls_modify = ls_modify + ' ' + a_s_colonne[ll_i] + ".visible=" + a_s_etape2 NEXT FOR ll_i = 84 TO 93 ls_modify = ls_modify + ' ' + a_s_colonne[ll_i] + ".visible=" + a_s_etape3 NEXT
fw_colonne_visible(dw_derogation, ls_colonne, '1', '0', '0')
Comme ça, selon où je clique, j'ai juste à changer les 1 et 0 dans l'appel :D
Merci bien
Hors ligne