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 ( "Sélectionnez une image", 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 09: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 09:27:11)
Hors ligne
Résolu
Hors ligne