Bonjour,
Je dois afficher une image jpeg sur un canvas de 150x150, le code ci dessous est utilis pour charger l’image sauf qu’elle ne s’affiche pas.
ce code est copi dans Open de canvas.
dim f as FolderItem
dim p as Picture
f = GetFolderItem("Pictures").Child("fullmoon.jpg")
p = f.OpenAsPicture
Canvas1.Backdrop = p
si j’ai compris, Pictures dsigne le folder qui contient l’image.
f = Specialfolder.Pictures.Child(“fullmoon.jpg”)[[/quote]
Aprs l’ajout de cette ligne, l’image est charge dans le canvas, a lexcution elle disparait dans un clignotement incessant de canvas.
Je n’ai pas trouv de tutoriel dans ce sens.
[quote=113052:@Djamel AIT AMRANE]Après l’ajout de cette ligne, l’image est chargée dans le canvas, a lexécution elle disparait dans un clignotement incessant de canvas.
Je n’ai pas trouvé de tutoriel dans ce sens.[/quote]
A moins que vous ayez du code en plus dans le Paint event du Canvas, je ne vois pas comment après que l’image ait été affichée, elle puisse disparaître dans un clignotement. Ou alors vous avez du code ailleurs qui joue sur la propriété “.Visible” du Canvas ?
Pour vérifier ce qui arrive, essayez d’ajouter fullmoon.jpg au projet, et de le mettre comme backdrop dans l’inspector. Si le même phénomène de clignotement se manifeste, ça ne peut pas être ce court bout de code.
J’ai vrifi partout, le code se trouve uniquement dans lvnement Paint de canvas, l’image est charge a partir de la racine C:\.
via Canvas1.BackDrop.
le format jpg est il rellement tolr par un canvas sous windows ?
[quote=113122:@Djamel AIT AMRANE]J’ai vérifié partout, le code se trouve uniquement dans lévénement Paint de canvas, l’image est chargée a partir de la racine C:\.
via Canvas1.BackDrop.
le format jpg est il réellement toléré par un canvas sous windows ?[/quote]
Il y a quelque chose qui ne vas pas. Dans votre premier post, vous dites avoir le code dans Open. Et c’est bien. Après vous dites qu’il est dans Paint. Cela ne semble pas une bonne idée. Lorsque vous changez le backdrop cela déclenche Pain qui charge une nouvelle fois, vous avez une référence circulaire.
Placez le code dans Open, cela devrait fonctionner.
Avez-vous seulement essayé de placer l’image en backdrop dans l’inspecteur, come je vous le conseillais ? Vous devriez la voir s’afficher sans histoire. Et, oui, JPG fonctionne parfaitement dans un canvas sous Windows.
Cest quoi lobjet qui est derrière le canvas qui contient la lune ?
Enfin, pour faire court:
Nouveau projet
Ajout Canvas
Ajout code qui charge limage
Exécution
Si cela marche (et ça marche), alors cherche ce qui vient perturber le fonctionnement du canvas.
Par ailleurs, quavez-vous mis dans lévènement Paint (oui, il y en a undans le canvas cnvlu
Enfin, pour le testing, mettre des images dans le dossier Images, oui, pourquoi pas, il faut bien les mettre quelque part. En revanche, il serait plus judicieux de les mettre ailleurs. Cest toi qui défini ce ailleurs (Application Support par exemple; cela dépend du logiciel / de ce que fait le logiciel, de si les images seront “livrées” avec le logiciel, etc.)
[quote]Cest quoi lobjet qui est derrière le canvas qui contient la lune ?
Enfin, pour faire court:
Nouveau projet
Ajout Canvas
Ajout code qui charge limage
Exécution
Si cela marche (et ça marche), alors cherche ce qui vient perturber le fonctionnement du canvas.
Par ailleurs, quavez-vous mis dans lévènement Paint (oui, il y en a undans le canvas cnvlu
Enfin, pour le testing, mettre des images dans le dossier Images, oui, pourquoi pas, il faut bien les mettre quelque part. En revanche, il serait plus judicieux de les mettre ailleurs. Cest toi qui défini ce ailleurs (Application Support par exemple; cela dépend du logiciel / de ce que fait le logiciel, de si les images seront “livrées” avec le logiciel, etc.)[/quote]
Bonjour,
J’ai suivi vos conseils, j’ai chargé l’image via cnvlune.backdrop.
l’image est bien présente sur le canvas, mais a lexécution n’apparait que le feuille vide.
Concernant lévénement paint de canvas, dois-je mettre quelque chose dedans ?
Concernant lévénement paint de canvas, dois-je mettre quelque chose dedans ?
Quoi ? Il ne devrait même pas apparaître.
Tout code placé dans levent Paint est exécuté qutant de fois que lOS demande à lapplication de rafraîchir le Canvas. Donc, pour éviter les mouvement dimages (flickering), il faut éviter de mettre du code de là.
Cest quoi lobjet qui est derrière le canvas qui contient la lune ?
un objet posé dans un autre subit linfluence de cet autre. Cest peut-être lui qui inter-agit.
Canvas1.Backdrop = p
Stocke (dans le marbre) limage p dans le Backdrop du Canvas.
Tiens, pourquoi: Canvas1 ?
(sous-entendu pourquoi pas cnvlune ?)
Comme déjà dit: limage, si elle est visible à un moment (lors du chargement), doit lêtre justquà ce quelle soit effacée / remplacée par une autre. Dans ce cas, la lune disparaît parce que le code, quelque part lenlève.
Cest là que se situe le problème.
Je répète la question:
Mais que fait donc lonjet situé dessous le canvas qui contient la lune sur lune des copies décran (on voit bien les carrés dagrandissement/réduction du Canvas et un Objet dessous le canvas).)
Si un Canvas est posé sur un autre contrôle, chaque fois que ce controle est redessiné, le Canvas subira une demande de rafraîchissement. [Quelquun peut confirmer ?]
Le Backdrop est toujours affich, et tous ce qui est dessin va apparaitre au dessus.
Quand on veut simplement afficher une image sans se poser de question et faire d’autre chose, le Backdrop suffit, on n’utilise pas l’venement Paint. C’est le plus simple.
Sinon, pour dessiner sur un Canvas, il faut utiliser l’venement PAINT qui va tre appel chaque fois qu’il y a besoin de rafraichir l’image (par exemple quand une fentre tait cach et qu’elle revient au premier plan).
Et oui, le fait de dessiner sur un Canvas peut entrainer un scintillement (surtout si on efface le canvas pour redessiner).
Pour viter un scintillement, une solution est de dessiner sur un image interne et d’afficher cette image directement sans effacer.
Mac et Windows, ne ragissent pas exactement pareil pour l’affichage.
[quote]Tiens, pourquoi: Canvas1 ?
(sous-entendu pourquoi pas cnvlune ?)[/quote]
je n’ai qu’un seul canvas, il s’agit de cnvlune qui est un carr de 160 de cot.
cnvlune est pos sur la feuille il n’interfere avec aucun autre controle.
Ce que je ne comprends pas, pourquoi l’image se charge correctement dans cvnlune ensuite elle disparait a lexcution.
cnvlune est pos sur la feuille
Quelle feuille ? Si tu veux dire la fentre: OK. Mais ce nest pas ce que limage montre ! Cest quoi ce rectangle noir au dessousde la lune ?
En plus, la copie dcran montre clairement que limage a t attribue au Canvas qui a t charg dans le projet.
Je commance y perdre mon latin (qui a 45 ans dge, sans plus aucune pratique depuis).
Elle a deux noms: fullmoon.jpg et fullmoon160x160.jpg (je suppose).
je n’ai qu’un seul canvas, il s’agit de cnvlune qui est un carr de 160 de cot.
Je veux bien, mais le code dit:
Canvas1.Backdrop = p
En plus, si le code est plac dans le Canvas (vnement Open), utilise:
Me.Backdrop = p
Dans ce cas, il nest nul besoin de donner le nom du Canvas. Lorsque tu parles quelquun tu dis Je dsire" et pas "Djamel dsire (image amusante dcrivant le pourquoi.
Si tu veux vraiment tre sr de toi (comprendre comment a marche), ce stade, tu nas quune chose faire: crer un projet de test avec seulement le Canvas et le code qui charge et affiche limage.
Cela va te prendre moins de cinq minutes et tu auras compris (si a marche, sinon, mon chat est pilote de formule 1).
Bien, aprs quelques minutes, voici lemplacement dun projet faisant a et a marche trs bien:
Merci pour le test, sauf que je l’ai dj fait afin de prvenir toute interaction avec autre chose.
A moins que je me suis mal exprim, mon but c’est d’afficher la lune aprs une action.
Est ce normal que la fentre apparaisse vide aprs excution ?
Si oui, je dois donc ajouter une action dclenche par un bouton “afficher lune” par exemple.
A mon avis, l’explication est simple. Tu charges ton image partir d’un fichier. Tu mets l’image dans le backdrop. Ca s’affiche.
Ensuite, ta mthode se termine. L’image est supprime de la mmoire. L’image se retire de l’affichage.
C’est un peu les inconvnients du mode objet. Il y a beaucoup de liens et des fois des petites surprises comme a.
Donc si tu veux que a marche :
Tu te cres une proprit picture “MonBackdrop” dans la fenetre.
Ensuite, quand la mthode est appele. et si “MonBackdrop” est nil. Tu charge la proprit avec l’image contenu dans le fichier.
Tu place la proprit dans le Backdrop du Canvas.
Quand la mthode est finie, la proprit existe toujours donc ton image aussi.
Sinon, quand tu poses des questions, a serait bien que tu ne nous laisse pas dans le brouillard. Tu mets des copies de ton code. et tu expliques exactement ce que tu fais. On perdrait moins de temps deviner…
dim f as FolderItem
dim p as Picture
f= Specialfolder.Pictures.Child("fullmoon.jpg")
p = f.OpenAsPicture
Cnvlune.Backdrop = p
ce bout de code a t plac dans lvnement Open de cnvlune, l’image est place dans un rep situ a la racine c:\Rep\fullmoon160x160.jpg.
A ce stade; via le browser de Backdrop, je cherche l’image fullmoon160x160.jpg que je charge et qui prend place dans le cnvlune,
qui se prsente comme sur la capture cran poste plus haut : “la lune charge” .
franchement, compar a vb6, cette affaire n’est apparemment pas simple.
Je suis oblig de le faire car je suis entrain de convertir vb6 en xojo.
[quote=113738:@Djamel AIT AMRANE]voila ce que je voulais en image :
A partir de la, paint se charge de faire le reste, créer un ombre afin se simuler la phase de la lune.
Merci a tous pour vos diverses contributions.[/quote]
Je disais bien que quelque chose se trouvait sous le Canvas qui affiche la lune.
Par ailleurs:
mon projet affiche limage et elle ne disparaît pas, sauf si tu quittes lapplication Elle nest pas visible dans lIDE parce que ta question était que tu charges limage depuis le dossier Images (de Windows).
Ceci, si jai bien compris, ce qui nest pas sûr.
Par ailleurs, si on veut voir des femmes nues, libre à toi, mais pas tout le monde. On sais où les trouver; alors, sil te plait, évite de nous en donner. Des mineur(e)(s) peuvent consulter le forum.