Le forum (ô combien francophone) des utilisateurs de Powerbuilder.




Bonjour,
Sur ma datawnidow, en plus des champs de ma table, j'ai rajouté pour chaque ligne un bouton parcourir pour aller chercher une image.
J'aimerais afficher un appercu de cette image directement sur ma datawindow. Les images peuvent etre selectionnées pour chaque ligne.
Mon souci intervient lorsque je souhaite modifier mon object Picture de ma ligne.
Comment sélectionner le bon object picture parmi toutes les lignes? ( Je modifie le champ "chemin_icone" contenant le chemin de l'image dans la bonne ligne, mais parqu'il fait parti des item de ma DW)
Voici le code de l'evenement buttonclicked de ma DW (Les caractères etranges marquent la ligne me posant problème!):
string ls_pathname, ls_filename blob lb_image long fh, ll_ret if dwo.name= 'b_parcourir' then ll_ret = GetFileOpenName ( , ls_pathname, ls_filename,"JPG", "JPG (*.JPG),*.JPG," ) end if if ll_ret = 1 then this.setItem(this.getRow(),"chemin_icone",ls_pathname) fh = FileOpen(ls_pathname, StreamMode!) IF fh <> -1 THEN FileRead(fh, lb_image) FileClose(fh) /////////////////??????? dw_incident_conclusion.p_image.SetPicture(lb_image) ????????? ////////////////////////////////////////// END IF end if
J'espère avoir été clair.
Merci
Hors ligne














dw_1.Object.bitmap_1.Filename = "exclaim.bmp"
Hors ligne




Interdit.
Je rapelle que j'ai un picture par ligne : (pas de screen shot désolé...)
ma_colonne 1 ma_colonne 2 ma_colonne 3 apercu
ligne 1 ****** ****** ********* **** objet picture bouton parcourir
ligne 2 ****** ****** ********* **** objet picture bouton parcourir
... .... .... ....
Des propositions?
Hors ligne














dw_1.Object.bitmap_1[ row ].Filename = "exclaim.bmp"
Hors ligne




dw_incident_conclusion.Object.p_image.Filename = ls_pathname
Cette ligne me change les images des pictures de toutes mes lignes.
J'ai donc essayé ta proposition précédente mais il me génère une erreur :
dw_incident_conclusion.Object.p_image[this.getRow()].Filename = ls_pathname
??
Hors ligne














mial a écrit:
J'ai donc essayé ta proposition précédente mais il me génère une erreur :
Code: pb
dw_incident_conclusion.Object.p_image[this.getRow()].Filename = ls_pathname??
ça donne quoi quand tu fais
dw_incident_conclusion.Object.p_image[1].Filename = ls_pathname
Hors ligne




Error accessing external object...
Hors ligne











A quoi correspond ton this.getrow()? Le "this" est bien ta datawindow dw_incident_conclusion?
Normalement, dans l'exemple que tu fournis, l'indice de ton tableau doit correspondre à une ligne de ta datawindow...
Il faut donc que tu vérifies que tu récupères bien un numéro de ligne valide.
Hors ligne




foon a écrit:
A quoi correspond ton this.getrow()? Le "this" est bien ta datawindow dw_incident_conclusion?
Normalement, dans l'exemple que tu fournis, l'indice de ton tableau doit correspondre à une ligne de ta datawindow...
Il faut donc que tu vérifies que tu récupères bien un numéro de ligne valide.
Oui this correspond a ma datawindow.
J'utilise deja this.getRow pour renseigner le single line edit dans la ligne correspondante au bouton parcourir sur lequel on a cliqué :
(Code du premier post)
this.setItem(this.getRow(),"chemin_icone",ls_pathname)
Tu es sur de la syntaxe? Parce qu'avec
dw_incident_conclusion.Object.p_image[1].Filename = ls_pathname
, il me génère une erreur.
Merci
Hors ligne











Je ne suis effectivement pas sûr que cette syntaxe marche.
Personnellement, j'utilise toujours des computes avec l'expression "bitmap()":
Le principe est donc de créer une compute c_piture et un champ s_pathname récupérant le ls_pathname de ton image:
Dans c_piture, tu mets l'expression: bitmap( s_pathname )
Hors ligne




Je viens d'essayer. C'est ce qui semble recommandé effectivement.
Le problème est qu'il me modifie touours le compute de la dernière ligne.
Ex : sur le ligne 1 je vais chercher avec mon bouton parcourir une image. C'est le compute de la 3eme et de la derniere ligne qui est modifié.
Hors ligne











Testes le "This.GetRow" de ton SetItem pour vérifier que c'est bien ta ligne cliquée qui est retournée, et non la dernière ligne de ta datawindow (GetRow() donne la ligne courante, qui ne correspond pas forcément à la ligne sélectionnée)
Hors ligne




Effectivement...tu as raison. Il me retourne la dernière ligne.
Etant dans l'evenement boutonclicked...l'argument row suffira!
Merci
Dernière modification par mial (22-05-2007 11:24:33)
Hors ligne











Avec un SetRow() bien placé lors de la sélection de ta ligne, ça devrait marcher tout seul...
Préviens-nous si ça marche (...ou pas )
Désolé, croisement de messages... Effectivement, l'argument row te suffira ici, mais si tu utilises
GetRow ailleurs, n'oublies pas la gestion du SetRow au préalable afin d'être sûr de toujours récupérer la bonne ligne
Dernière modification par foon (22-05-2007 11:27:11)
Hors ligne




Résolu
Hors ligne