Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour à tous,
Comme je suis nouveau ici, avant ma question, une rapide présentation :
43 ans, Bordelais d’adoption, et bidouilleur PB à mes heures.
En fait, après avoir été technicien bureautique, je me suis intéressé à améliorer ou inventer les outils qui manquaient à mon boulot quotidien.
Après m'être essayé au scripts DOS, puis au C et C++, j'ai fini avec PowerBuilder, grâce à une mini formation que j'ai pu avoir il y a ... (vachement longtemps !)
Depuis 10 ans, je fais de la production, essentiellement en charge des transferts de fichiers dans la banque ou je travaille (CFT pour les connaisseurs.)
Et là encore, les outils d'exploit ne sont pas à la hauteur, j'essaie donc de faire les miens.
Bref, je suis un piètre programmeur, et donc beaucoup de questions !
Puis-je poser la première ?
Pour gérer une cartographie des serveurs de ma boîte, j'ai besoin de créer dynamiquement ces dits-serveurs (j'utilise un user object graphique) et je souhaite les lier entre-deux par des lignes
Donc, ces lignes doivent pouvoir être déplacées et redimensionnées.
Or, lorsque je « créé » une nouvelle ligne via CREATE, elle est bien instanciée, j’ai accès à ses propriétés, mais impossible de la rendre visible !
Ligne LINE
Ligne = CREATE LINE
Ah oui, j’utilise PowerBuilder 9.0 build 5507
Pouvez-vous m’aider ?
Merci d’avance
Hors ligne
Bonjour et
Je pense qu'il faut utiliser un OpenUserObject.
Sinon tu as aussi la solution de faire ça dans une datawindow, par exemple :
ls_create = 'create line(band=background x1="'+ls_x1+'"y1="'+ls_y1+'" x2="'+ls_x2+'" y2="'+ls_y2+'"tag="'+is_object+'" pen.style="0" pen.width="5" pen.color="8388608" pointer="cross!" name=newline background.mode="2" background.color="1073741824" ) ' dw_1.modify(ls_create)
Hors ligne
Bonjoru erasorz !
Et merci pour ta réponse.
Je ne vois pas en fait comment gérer ma ligne avec un openUserObject.
j'ai déja tenté, mais difficile d'en modifier les attributs (de taille et placement)
Voilà la version actuelle, ou rien n'est dynamique :
A chaque nouveau traitement de prod, je dois donc modifier et recompiler. Pas pratique, et surtout non paramétrable par mes collègues !
Donc, maintenant tout mon paraméatrge est en base, je créé mes Bloc dynamiquement, mais comment les relier !
je m'arrache les cheveux sur ce problème depuis des mois.
Hors ligne
Une solution qui marche : créer un custom visual (uo_line) qui contient une ligne (ln_line). Appeler un openuserobject sur une instance de uo_line.
Ensuite tu peux modifier les paramètres à ta guise :
uo_line lu_line w_1.openuserobject( lu_line, 0, 0 ) lu_line.ln_line.beginx = 100 lu_line.ln_line.beginy = 100 lu_line.ln_line.endx = 500 lu_line.ln_line.endy = 500 lu_line.ln_line.linethickness = 50 lu_line.ln_line.linecolor = 10000
Hors ligne
Ca semble l'idéal, mais avant que je me lance à essayer (je suis très lent ...), mon custom visual, si la ligne est en diagonale, sera alors un gros carré, non ?
et donc, il masquera tout ou partie de son copain d'à côté, s'il est en avant plan ? (ou sera masqué par son pote, s'il est derrière ...
A moins que l'on puisse rendre transparent tout ce qui n'est pas le contrôle LINE dans le custom visual ? c'est possible, ça ?...
Hors ligne
Oui, il suffit de mettre BackColor = Transparent dans uo_line.
Le code suivant :
uo_line lu_line, lu_line2, lu_line3 parent.openuserobject( lu_line, 100, 100 ) lu_line.ln_line.beginx = 100 lu_line.ln_line.beginy = 100 lu_line.ln_line.endx = 500 lu_line.ln_line.endy = 500 lu_line.ln_line.linethickness = 50 lu_line.ln_line.linecolor = 10000 parent.openuserobject( lu_line2, 100, 100 ) lu_line2.ln_line.beginx = 200 lu_line2.ln_line.beginy = 100 lu_line2.ln_line.endx = 200 lu_line2.ln_line.endy = 500 lu_line2.ln_line.linethickness = 30 lu_line2.ln_line.linecolor = 0 parent.openuserobject( lu_line3, 100, 100 ) lu_line3.ln_line.beginx = 100 lu_line3.ln_line.beginy = 200 lu_line3.ln_line.endx = 500 lu_line3.ln_line.endy = 200 lu_line3.ln_line.linethickness = 20 lu_line3.ln_line.linecolor = rgb(255,0,0)
produira ça :
Hors ligne
Mais c'est exactement ce que je veux ça !!!
Mais je n'ai pas la valeur "TRANSPARENT" dans mon attribut BackColor de mon CustomVisual ....
Problème de version ?...
Hors ligne
SBM a écrit:
Mais je n'ai pas la valeur "TRANSPARENT" dans mon attribut BackColor de mon CustomVisual ....
Problème de version ?...
Probablement... -----> migration PB12.5
ou alors, passer par une DW...
Hors ligne
ben ce sera la 12.5 alors ... En commande actuellement !
et je garde ton idée dans un coin, car c'est ce que je vais utiliser !
Donc un grand merci à toi Erasorz !
Hors ligne
Mais... as tu essayé le code ?
Parce que OpenUserObject est bien nécessaire pour insérer dans la fenêtre un objet créé dynamiquement, mais l'objet conserve ses propriétés (la ligne ne devient pas un visual user object de base). Vérifié à l'instant sur PB9, il n'y a pas d'attribut backcolor pour une ligne, pourquoi voudrait tu le spécifier ? En l'occurrence, une ligne ne donne pas un carré plein.
Ou alors j'ai raté un épisode ?
Hors ligne
seki a écrit:
Parce que OpenUserObject est bien nécessaire pour insérer dans la fenêtre un objet créé dynamiquement, mais l'objet conserve ses propriétés (la ligne ne devient pas un visual user object de base). Vérifié à l'instant sur PB9, il n'y a pas d'attribut backcolor pour une ligne, pourquoi voudrait tu le spécifier ? En l'occurrence, une ligne ne donne pas un carré plein.
Ou alors j'ai raté un épisode ?
C'est le uo container de la ligne qu'il faut mettre en transparent, sinon il masque le reste (p.ex pour les lignes diagonales qui sont incluses dans un rectangle)
Hors ligne
erasorz a écrit:
seki a écrit:
Parce que OpenUserObject est bien nécessaire pour insérer dans la fenêtre un objet créé dynamiquement, mais l'objet conserve ses propriétés (la ligne ne devient pas un visual user object de base). Vérifié à l'instant sur PB9, il n'y a pas d'attribut backcolor pour une ligne, pourquoi voudrait tu le spécifier ? En l'occurrence, une ligne ne donne pas un carré plein.
Ou alors j'ai raté un épisode ?C'est le uo container de la ligne qu'il faut mettre en transparent, sinon il masque le reste (p.ex pour les lignes diagonales qui sont incluses dans un rectangle)
Et oui !
Voilà ce que ça donne en reprenant le code de erasorz en PB9 :
Il manque juste la possibilité de metter le BackGround de l'UO en transparent, ce que je n'ai aps dans cette version ...
Il y a une valeur de couleur, pour le transparent ? que je pourrais tenter de modifier à l'OpenUserObject ?
Hors ligne
foon a écrit:
Pour les couleurs, c'est ici
Merci foon ...
Et je viens d'essayer, dans ma version, il me met le fond en blanc, et toujours pas en transparent.
J'ai bien l'impression que je ne pourrais aps m'en sortir comme ça, en V9
En tous cas merci à tous pour votre aide à un nouveau venu !
J'espère à mon tour pouvoir aider !
Hors ligne
SBM a écrit:
J'ai bien l'impression que je ne pourrais aps m'en sortir comme ça, en V9
Et en utilisant l'autre méthode : dessiner dans une DW ? edit : peut-être que cette discussion peut t'aider ?
Si tu as des images en plus des lignes, tu peux aussi aussi utiliser l'objet picture dans la DW
Le truc du jour : pour jouer et prototyper dans une DW, la DW Debug Machine est un outil irremplaçable
Dernière modification par seki (04-01-2012 10:46:31)
Hors ligne
Punaise, c'est vraiment un boulet de ne pas pouvoir créer de lignes dynamiquement dans une fenêtre / userobject...
J'essaie de dessiner des tableaux dynamiquement (et je ne souhaite pas passer par une datawindow); je vais essayer le dessin directement avec l'API windows, il faut peut-être passer par le u_canvas / canvas.pbx.
Hors ligne