Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour à tous,
J'ai besoin de connaître la largeur totale d'un dataobject pour afficher ou non certaines options si il dépasse de la datawindow.
Est-ce possible ? et comment ?
Hors ligne
en faisant un describe ça ne marche pas?
http://pbadonf.fr/forum/viewtopic.php?id=57
Hors ligne
dw_1.width
Attention: Cà donne la largeur en unités PB: Il faut convertir au besoin...
Dernière modification par foon (23-03-2007 10:27:34)
Hors ligne
foon a écrit:
Code: pb
dw_1.width
ca me donne que la largeur de la datawindow
ce que je veux c'est la largeur de l'objet
j'ai essayé ca :
string ls_largeur ls_largeur = this.Object. emp_name.Width
mais je ne sais pas à quoi correspond emp_name danc ca marche pas
au secours !
Hors ligne
Salut,
Le emp_name correspond au nom de ta colonne dans ta datawindow (par exemple).
Hors ligne
Bonjour abdelta,
Ton code te permet effectivement de récupérer la largeur de la colonne emp_name dans le dataobject.
Pour avoir la largeur totale du dataobject, il te faut récupérer la position du champ
le plus à droite de ton dataobject, et y ajouter sa largeur.
Par exemple, si emp_name est ton champ le plus à droite dans ton dataobject, tu fais:
Long ll_width ll_width = Long( this.object.emp_name.X ) + Long( this.object.emp_name.width )
(PS: Je ne sais pas s'il existe réellement la possibilité de récupérer en direct la largeur totale d'un dataobject,
en faisant un describe par exemple)
Hors ligne
Je veux bien mais je ne connais pa à l'avance le nom de ma dernière colonne (c'est toujours des dataobjects de type grid mais je les attribue par script)
Autrement, par un describe je veux bien mais un dataobject n'a pas de propriété width...
Hors ligne
Arrêtes-moi si je me trompe, mais si tu les attribues par script, tu dois savoir le nom de tes différentes colonnes, non?
Auquel cas il te suffit de faire une boucle au préalable sur toutes tes colonnes, de récupérer leur position,
et de déterminer laquelle a la position la plus grande: Ce sera ta dernière colonne dans ton dataobject.
Hors ligne
Encore mieux: Tu peux savoir quel est ton nombre total de colonnes dans ton dataobject:
Cà donne :
long ll_countcolumns, & ll_count,& ll_X,& ll_width,& ll_columnX,& ll_dwowidth ll_count = 1 ll_columnX = 0 ll_X = 0 ll_width = 0 ll_dwowidth = 0 ll_countcolumns = This.Object.DataWindow.Column.Count DO WHILE ll_count <= ll_countcolumns LOOP ll_X = long( this.describe("#"+ string(ll_count) + ".X")) IF ll_columnX < ll_X THEN ll_columnX = ll_X ll_width = long( this.describe("#"+ string(ll_count) + ".width")) END IF ll_count = ll_count ++ END LOOP ll_dwowidth = ll_columnX + ll_width
Dernière modification par foon (23-03-2007 13:03:47)
Hors ligne
je vois un petit probleme...
s'il s'agit d'un datagrid... c'est que tu peux redimensionner la largeur de tes colonnes...
Hors ligne
Damned!
Il faudra alors lancer mon script à chaque redimensionnement de colonne
dans la datawindow (losefocus?).
Hors ligne
oui je le pense aussi
Hors ligne
le redimensionnement des colonnes sera impossible (je vais empêcher l'utilisateur de le faire)
par contre je ne vois pas l'utilité de la boucle while. Est-ce qu'il ne suffirait pas de ca ?
long ll_countcolumns, ll_x, ll_width, ll_largeur ll_countcolumns = long(this.object.datawindow.column.count) ll_x = long( this.describe("#"+ string(ll_countcolumns) + ".X")) ll_width = long( this.describe("#"+ string(ll_countcolumns) + ".width")) ll_largeur = ll_x + ll_width
Dernière modification par abdelta (23-03-2007 13:32:20)
Hors ligne
ca va pas te le faire pour toutes tes colonnes la non?
Hors ligne
Théoriquement (et notamment pour une grid où il n'est pas possible de déplacer les colonnes), effectivement, çà pourrait marcher, mais ta colonne ayant le plus grand numéro n'est pas forcément la plus à droite dans ton dataobject si des colonnes sont insérées après la création de celui-ci.
Hors ligne
thezerg a écrit:
ca va pas te le faire pour toutes tes colonnes la non?
Ce que je veux c'est la largeur totale, pas celle de chaque colonne. Je pense donc qu'il me suffit d'avoir la position et la largeur de la dernière colonne.
Ensuite, mes dataobject sont créés définitivement (s'il faut les refaire, on les refait complètement, on ne rajoute pas une colonne après la création).
Dans ce cas, la dernière colonne aura-t-elle le plus grand numéro ?
Hors ligne
je pense que ca devrait être bon alors dans ce cas oui
Hors ligne
Je dirais, dans ce cas, oui.
Mais je te conseille quand même de tester au préalable.
Hors ligne
Oups! désolé Thezerg, je n'avais pas vu ta réponse
Hors ligne
HS --
que d'ardeurs pour une jeune femme en detresse...
Hors ligne
pick ouic a écrit:
HS --
que d'ardeurs pour une jeune femme en detresse...
HS -- Pourquoi tu crois que j'ai pris un chevalier en avatar
Hors ligne
Merci à tous !
A la prochaine ! Je pense que je vais encore avoir besoin d'aide mais ce sujet est clos en ce qui me concerne.
Hors ligne
abdelta a écrit:
Ensuite, mes dataobject sont créés définitivement (s'il faut les refaire, on les refait complètement, on ne rajoute pas une colonne après la création).
Dans ce cas, la dernière colonne aura-t-elle le plus grand numéro ?
quelle drôle d'idée ... ?
j'espère dans ce cas que tes DW n'ont pas bcp de mise en forme parceque sinon c'est à refaire à chaque fois aussi...
je ne connais pas bien ton contexte évidemment mais cette déclaration ressemble à un voeux pieux qui ne sera sans doute pas respecté (si pas par toi par qqun d'autre) ce qui amènera son lot de problèmes par la suite.
enfin moi j'dis ça...
Hors ligne
cette phrase n'était vraie que dans son contexte : c'est à dire avec des dataobject de type grid et dont j'aurai besoin dans la datawindow qui m'a posé le problème.
Mais c'est gentil de s'en inquiéter !
Hors ligne
on est tous gentil ici.... (sauf peut etre moi.... )
Hors ligne