PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → Update d'un champ Image
Update d'un champ Image
Iniciado por Jean Turcotte, 30,mar. 2020 19:36 - 7 respuestas
Miembro registrado
1.406 mensajes
Publicado el 30,marzo 2020 - 19:36
Bonjour, je sollicite votre aide pour résoudre mon problème. Voici ma fenêtres de paramètre;



Lorsque je clic sur l'image, j'exécute ceci:
sSel est une chaîne
iMonImageORG est une Image
iMonImageMOD est une Image
IMG_Temp est une Image
sPathTemp est chaîne = ""
gxRatio est un numérique

sSel = fSélecteur("C:\", "Sélectionnez un fichier...", "Fichiers image (*.jpg)"+TAB+"*.jpg" + RC + "Fichiers image (*.png)" + TAB + "*.png", "*", fselExiste)
SI sSel <> "" ALORS
iMonImageORG = dChargeImage(sSel)
IMG_Temp = sSel
iMonImageMOD = RedimentionneImage(iMonImageORG, IMG_Temp..Largeur, IMG_Temp..Hauteur)
gxRatio = iMonImageMOD..Largeur / iMonImageMOD..Hauteur
sPathTemp = gsPathDataImages + "\" + "Logo" + ".JPG"
dSauveImageJPEG(iMonImageMOD, sPathTemp, 90)
IMG_Logo = sPathTemp
FIN

Quand la fenêtre ouvre, le Logo s'affiche.
- Je clic une premiere fois et l'image choisie écrase celle dans le rép aPathTemp puis le logo s'update dans la fenêtre.
- Je clic une 2e fois, la nouvelle image écrase celle existante dans le rép mais le logo ne s'update pas dans la fenêtre.
- Je clic une 3e fois, la nouvelle image écrase celle dans le rép aPathTemp puis le logo s'update dans la fenêtre. Donc 1 fois sur 2, l'image s'update dans la fenêtre. Voici donc mes essais infructueuz;

- J'ai tenté d'effacer le fichier dans le Rép avant de le recréer, pas de succes.
- J'ai tenté un rafraichissement de la fenêtre, pas de succès.
- La seule chose qui fonctionne est Si je donne un nomdifférent au fichier, ça fonctionne à tout coup mais je ne veux pas accumuler d'images inutilisées donc je veux écraser le fichier existant.

Des idées?

--
Jean Turcotte
WX 25
Android 8.0 sur Galaxy S8
Laptop Lenovo I7 12GB Ram
Miembro registrado
134 mensajes
Publicado el 31,marzo 2020 - 10:33
Bonjour,

Peut être comme cela

buffer est un Buffer
buffer = fChargeBuffer( sPathTemp )
IMG_Logo = _iproc_apercu()

PROCEDURE INTERNE _iproc_apercu()

c est un Champ
c <- ChampCrée( DonneGUID(), typImage, 0, 0, 150, 150, Faux )
c..ImageMode = imgHC
c = buffer
img est une Image
dDébutDessin( img, dEffacer + dAvecOpacité )
img.Largeur = c..Largeur
img.Hauteur = c..Hauteur
dCopie( c, img, 0, 0, c..Largeur, c..Hauteur, 0, 0, img.Largeur, img.Hauteur )
ChampSupprime( c )
RENVOYER img

FIN // PROCÉDURE INTERNE _iproc_apercu( _i est un entier )
Miembro registrado
1.406 mensajes
Publicado el 31,marzo 2020 - 14:01
Je vais tenter le coup Julien, merci! :)

--
Jean Turcotte
WX 25
Android 9.0 sur Galaxy S8
Laptop Lenovo I7 12GB Ram
Miembro registrado
1.406 mensajes
Publicado el 31,marzo 2020 - 16:29
J'ai testé ton code Julien et ça fonctionne très bien. J'aimerais bien comprendre pourquoi ça fonctionne et pas directement comme réalisé précédemment?

--
Jean Turcotte
WX 25
Android 9.0 sur Galaxy S8
Laptop Lenovo I7 12GB Ram
Miembro registrado
134 mensajes
Publicado el 01,abril 2020 - 08:51
Bonjour,

J'avais eu un problème similaire sur l'affichage d'un aperçu de pages PDF d'un même fichier sur une zone répétée
https://forum.pcsoft.fr/fr-FR/pcsoft.fr.windev/222371-zone-repetee-apercu-pages-pdf/read.awp

J'imagine que c'est un problème de cache (même source - ici un chemin de même nom - du champ image)
La solution de contournement pour moi a été de créer un champ image dynamiquement
c <- ChampCrée( DonneGUID(), typImage, 0, 0, 150, 150, Faux )

De lui affecter un buffer et non un chemin d'image
c = buffer
// Pour mon PDF multi-pages c..NuméroPage = _i

Et de dessiner une variable image à partir des infos de ce champ
dDébutDessin( img, dEffacer + dAvecOpacité )
img.Largeur = c..Largeur
img.Hauteur = c..Hauteur
dCopie( c, img, 0, 0, c..Largeur, c..Hauteur, 0, 0, img.Largeur, img.Hauteur )
Publicado el 01,abril 2020 - 09:24
Bonjour

dans votre code original , essayez ceci :

IMG_Logo = ""
IMG_Logo = sPathTemp

bon dev
Miembro registrado
1.406 mensajes
Publicado el 01,abril 2020 - 12:59
digi12 a écrit :
Bonjour

dans votre code original , essayez ceci :

IMG_Logo = ""
IMG_Logo = sPathTemp

bon dev

Je l'avais essayé mais sans succès.

Merci Julien d'avoir pris le temps de me répondre, ça va être très utile j'en suis sur. Y a t-il moyen de gérer le cache?

--
Jean Turcotte
WX 25
Android 9.0 sur Galaxy S8
Laptop Lenovo I7 12GB Ram
Miembro registrado
134 mensajes
Publicado el 01,abril 2020 - 13:18
Je ne sais pas, dans votre cas de figure la solution préconisée par digi12 est celle donnée par la doc
https://doc.pcsoft.fr/fr-FR/?1013136&1013136

Je n'ai pas tout votre code mais en modifiant un peu (sans utilisation de votre procédure RedimentionneImage) pour faire un test
sSel est une chaîne
iMonImageORG est une Image
iMonImageMOD est une Image
IMG_Temp est une Image
sPathTemp est chaîne = ""
gxRatio est un numérique

sSel = fSélecteur("C:\", "Sélectionnez un fichier...", "Fichiers image (*.jpg)"+TAB+"*.jpg" + RC + "Fichiers image (*.png)" + TAB + "*.png", "*", fselExiste)
SI sSel <> "" ALORS
iMonImageORG = dChargeImage(sSel)
IMG_Temp = sSel
//iMonImageMOD = RedimentionneImage(iMonImageORG, IMG_Temp..Largeur, IMG_Temp..Hauteur)
gxRatio = IMG_Temp..Largeur / IMG_Temp..Hauteur
sPathTemp = "C:\tmp" + "\" + "Logo" + ".JPG"
dSauveImageJPEG(IMG_Temp, sPathTemp, 90)
IMG_logo = ""
IMG_logo = sPathTemp
FIN

Le IMG_logo = "" me permet bien d'avoir un rafraîchissement de l'image