Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Salut à tous les masters de PB,
tout d'abord merci pour ce forum bien utile pour résoudre nos petits problèmes de dev. PB...
Voilà mon problème et la question qui en découle :
Je dois afficher dynamiquement des custom user object visuel (des petits rectangles de couleur hérité de l'objet static text ) dans un des onglets de ma fenêtre parente. Le problème c'est que je ne peux qu'afficher ces user objects (mes petits rectangles) sur une fenêtre et non sur un onglet.
La solution temporaire que j'ai trouvé est de placer une autre fenetre sous l'onglet en question mais ceci entraine une gestion globale de la fenêtre fille en fonction de la fenêtre parente (ex : instanciation / dimensionnement / déplacement / réduction, etc...)....
En clair, c'est très voir trop fastidieux !
Les méthodes d'instanciation et placement de mon custom user objet ne s'appliquent qu'aux fenêtres et non aux onglets de cette même fenêtre ....
Aussi, est ce quelqu'un parmis vous sait comment créer dynamiquement un custom user object visuel dans un onglet d'une fenêtre ?????
Moi j'ai bien cherché dans l'aide PB et sur la toile mais au final je ne sais toujours pas comment faire...
Quelqu'un peut-il m'aider car cela m'ennerve de gérer par programmation cette fenêtre fille à chacune des modifications de ma fenêtre parente.
Merci donc par avance d'apporter une ou plusieurs réponses à cette question.
Cordialement,
-------------------------------------
FmxStyle
Developpeur PB 10.5
Hors ligne
Ci joint un screenshot de l'écran en question pour vous donner une idée de quoi il retourne...
Dernière modification par fmxstyle (02-08-2007 10:01:36)
Hors ligne
à mon avis t'as pas bien fait le lien parceque je peux pas cliquer dessus et je peux même pas le sélectionner pour un copier coller...
( pas mieux pour l'image )
sinon pour une première question c'est une sacrée première question, perso je vois pas trop comment faire.
Dernière modification par rincevent (02-08-2007 10:00:55)
Hors ligne
Lien refait et corrigé....
Hors ligne
au forum.
Si j'ai bien compris, ton problème est que la fonction openUserObject ne s'applique qu'aux fenêtres ?
Il y a 2 solutions :
1) Faire modifier le cahier des charges pour ne plus faire ce genre de conneries
2) Démissionner
Il faut bien avoir conscience que si PB est le meilleur outil pour faire des applications de gestion, il n'a jamais été prévu pour faire des jeux ou de la 3D.
POURQUOI as tu besoin d'afficher ces petits rectangles ?
Si c'est pour faire des graphs, achète un activeX
Hors ligne
fmxstyle a écrit:
Ci joint un screenshot de l'écran en question pour vous donner une idée de quoi il retourne...
Excellente initiative !
Alors mes suggestions
1) Acheter un ActiveX (on change pas une équipe qui gagne)
2) dessiner dans une datawindow de type externe
C'est d'ailleurs sur ce principe qu'est construit dwExtreme
Et Buck Woolley explique comment il a fait dans son article : Not Your Father's DataWindow
Dernière modification par shahin (02-08-2007 10:15:42)
Hors ligne
shahin a écrit:
au forum.
Si j'ai bien compris, ton problème est que la fonction openUserObject ne s'applique qu'aux fenêtres ?
Il y a 2 solutions :
1) Faire modifier le cahier des charges pour ne plus faire ce genre de conneries
2) Démissionner
Il faut bien avoir conscience que si PB est le meilleur outil pour faire des applications de gestion, il n'a jamais été prévu pour faire des jeux ou de la 3D.
POURQUOI as tu besoin d'afficher ces petits rectangles ?
Si c'est pour faire des graphs, achète un activeX
Il existe d'autres solutions moins extrêmes : la DW
En powerbuilder tu peux tout faire dans une DW, y compris ce que tu montres dans ta capture d'écran.
Pour ma part, j'utilise une DW pour gérer un planning avec possibilité d'ajouter, modifier, supprimer des entrées (et donc des controles visuels) directement à la souris.
C'est pour moi la solution la plus sage et la mieux adaptée à PB.
L'avantage c'est que du coup, tu n'as plus le problème des tabpages...
Hors ligne
Les grands esprits se rencontrent Chrnico, mais quand j'ai rédigé mon premier message il n'avait pas encore fait sa capture d'écran.
PS : les #285# c'est pour gérer le multilinguisme ?
Hors ligne
shahin a écrit:
Il y a 2 solutions :
1) Faire modifier le cahier des charges pour ne plus faire ce genre de conneries
2) Démissionner
Quelle violence !
pas content Shahin aujourd'hui ?
sinon en effet ce serait sans doute plus simple si tu pouvais utiliser une DW (sur laquelle tu pourras créer dynamiquement ce que tu veux)
Dernière modification par rincevent (02-08-2007 10:48:48)
Hors ligne
rincevent a écrit:
Quelle violence !
Ce n'était pas mon intention, mais parfois il faut savoir acheter un composant plutôt que de tout faire soi même.
Hors ligne
- shahin effectivement c la gestion du multilinguisme (#285#) => d'ailleurs on gère aussi e japonnais et le chinois et c'est parfois bien galère (heureusement que PB 10.5 gère l'unicode en natif, c'était pas tellement le cas en version 9)
- L'application présentée ci dessus est une gestion de modèles horaires applicables sur un employé d'une entreprise. Celle-ci permet de définir de définir des modèles à la journée, à la semaine, etc... avec des plages d'heures (non) travaillées, de pause, de recalage horaire. Derrière nous avons un service qui gère les pointages d'entrées / sorties (via un autre écran ou via un écran tactile relié en reseau dans un atelier) et qui utilise les modèles horaires définis pour effectuer des calculs de présence, absence, etc... par employé par jour, par semaine, par mois, etc...
- J'ai bien conscience que PB est limité question graphisme mais il est vrai que la DW permets de faire plein de chose, y compris sans doute ceci. Le problème c'est que j'ai du reprendre cet écran de quelqu'un qui a donc utiliser des user object visuel ainsi qu'une liste chainée en mémoire pour gérer l'interactivité avec l'utilisateur, on doit pouvoir déplacer de gauche à droite les plages horaires et la datawindow présente en dessous rafraichi les horaires des plages en temps réels ET inversement lorsque l'on manipule la datawindow on déplace les plages horaires affichées... tout un programme quoi
=> Le code est par conséquent lourd, pas facile à maintenir voir inbitable....
- Nous allons bientôt devoir créer un assistant avec étapes pour la configuration de ces fameux modèles horaires et je pense que l'on utilisera l'objet DataWindow à l'avenir pour le faire sinon je vais recommencer à prendre la tête sur le graphique et la liste chainée qui est derrière => .
- Sinon ok pour la gestion via la datawindow donc si j'ai bien compris la chose il faudrai que je prenne une external et que j'ajoute, supprime dynamiquement des colonnes de celle-ci, non ?
Hors ligne
Je ne sais pas ce que tu as contre les liste chainées.
Quand je faisais du Java, j'étais content d'avoir les objets List.
L'important est que tout soit bien encapsulé (comme Sun l'a fait avec LinkedList)
Pour la datawindow, tu as deux façons de faire :
1) créer dynamiquement tes rectangles à la volée (je ne sais pas pourquoi tu veux ajouter de colonnes dynamiquement)
2) Lire l'article de Buck Wooley (avec un minimum d'anglais).
Sa technique permet d'animer la datawindow uniquement avec des dw.setitem().
Ta DW n'est pas forcément externe, elle peut même éventuellemenet être en shareData avec celle qui contient tes données
Hors ligne
Pour la datawindow, tu as deux façons de faire :
1) créer dynamiquement tes rectangles à la volée (je ne sais pas pourquoi tu veux ajouter de colonnes dynamiquement)
2) Lire l'article de Buck Wooley (avec un minimum d'anglais).
Sa technique permet d'animer la datawindow uniquement avec des dw.setitem().
1. Quel est la methode de l'objet Datawindow qui permettrai l'ajout dynamique d'un rectangle dans celle-ci ? CREATE ? Comment lui attribuer un nom dynamiquement pour pouvoir l'atteindre facilement ?
2. Merci pour l'article en Anglais (que je comprends fort bien par ailleurs) sur la manière de manipuler simplement les proprietés des champs d'une DW. Je vois désormais comment changer quelque uns de mes écrans afin que le code ne soit pas trop lourd et simple à maintenir. (ex : j'avais autant de champs couleurs que de colonnes, aujourd'hui je pourrai n'en utiliser qu'un pour gérer la couleur de fond de toutes mes colonnes, c'est impeccable et pas bête du tout !)
Dernière modification par fmxstyle (02-08-2007 16:34:36)
Hors ligne
J'ai regardé un peu la doc et le planning de mon collègue fait en PB, il semble qu'il utilise la méthode OpenUserObject directement sur la fenêtre avec une DW en fond qui affiche la grille avec les dates...
Est ce qu'il est possible d'ajouter dynamiquement un rectangle ou un autre objet apparent de même forme dans une DW et comment ? Je crois avoir compris qu'il faut modifer en gros le source de la DW en y ajoutant l'ensemble de la syntaxe concernant mon nouveau rectangle (utilisation du MODIFY) puis regenérer la DW avec ce nouveau source (CREATE).
Personne n'a déjà fait cela auparavant dans sa vie de développeur PB ?
Merci d'avance, je cherche et teste en attendant vos réponses.
Dernière modification par fmxstyle (03-08-2007 06:59:39)
Hors ligne
fmxstyle a écrit:
J'ai regardé un peu la doc et le planning de mon collègue fait en PB, il semble qu'il utilise la méthode OpenUserObject directement sur la fenêtre avec une DW en fond qui affiche la grille avec les dates...
Est ce qu'il est possible d'ajouter dynamiquement un rectangle ou un autre objet apparent de même forme dans une DW et comment ? Je crois avoir compris qu'il faut modifer en gros le source de la DW en y ajoutant l'ensemble de la syntaxe concernant mon nouveau rectangle (utilisation du MODIFY) puis regenérer la DW avec ce nouveau source (CREATE).
Personne n'a déjà fait cela auparavant dans sa vie de développeur PB ?
Merci d'avance, je cherche et teste en attendant vos réponses.
Vas voir l'outil DW_SYNTAX, il y a les syntax pour créer des objets dynamiquement (rectangle, étiquette, colonne, etc.).
Pour le trouver : New (Tollbar), Tool (onglet), Datawindow syntax (icone), Syntax -> Modify -> Create (menu), rectange (ddlb) :
<DW Control Name>.Modify( & "create rectangle(band=<Detail, Footer, Header, Header.<group #>, Summary, Trailer.<group #>, Background, Foreground>" + & " pointer='<Arrow!, Cross!, HourGlass!, IBeam!, Icon!, Size!, SizeNESW!, SizeNS!, SizeNWSE!, SizeWE!, UpArrow!, or cursor filename (with path)>' moveable=<0 - False, 1 - True> resizeable=<0 - False, 1 - True> x='<an integer>' y='<an integer>' height='<an integer>' width='<an integer>' name=<string>" + & " tag='<string>' brush.hatch='<0 - Horiz, 1 - BDiagonal, 2 - Vertical, 3 - Cross, 4 - FDiagonal, 5 - DiagCross, 6 - Solid, 7 - Transparent>'" + & " brush.color='<a long>' pen.style='<0 - Solid, 1 - Dash, 2 - Dot, 3 - DashDot, 4 - DashDotDot, 5 - Null>' pen.width='<an integer>' pen.color='<a long>' background.mode='<0 - Opaque, 1 - Transparent>' background.color='<a long>')")
Hors ligne
Testé et approuvé, ca marche nickel... merci Chrnico !!
reste plus qu' à créer des méthodes sur mon objet hérité de l'objet datawindow afin d'ajouter simplement une plage horaire (rectangle) au bon endroit dans ma DW.
Par contre, il faut encore que je vois comment :
1. Placer au bon endroit mes plages en fonction de celles déjà existantes
2. Gérer les liens entre ces plages pour gérer le déplacement graphique d'une ou plusieurs plage sans dépasser la légende graduée située derrière et sans chevaucher les plages situées avant et apres celle qui est en cours de déplacement. (voir screenshot)
3. Etablir un lien direct entre ma datawindow d'affichage des plages horaires graphiques et celle qui affiche les heures des plages. (Je vais voir l'histoire de la datawindow en ShareData)
Tout ca me semble prometteur et je sent que je vais limite diminuer de moitié le code actuellement en place... encore faudrait il que tout fonctionne correctement.
Le moderateur peut passer ce sujet à [RESOLU], je n'ai plus d'autres questions pour le moment...
Merci encore et à bientot pour d'autres soucis...
--------------------------------------------------
Shahin : je l'ai passé à résolu, mais es tu sûr que tu ne pouvais pas le faire toi même ? Modifier -> changer le titre
Dernière modification par fmxstyle (03-08-2007 08:33:37)
Hors ligne
Lol effectivement je n'avais pas vu...
Merci encore et autant pour moi pour le [RESOLU]
A +
Hors ligne