Défilement d'images

panicq Messages postés 66 Date d'inscription mardi 14 novembre 2000 Statut Membre Dernière intervention 18 janvier 2010 - 20 oct. 2007 à 19:37
boursicotteur Messages postés 201 Date d'inscription mercredi 25 septembre 2002 Statut Membre Dernière intervention 10 novembre 2007 - 24 oct. 2007 à 19:55
Bonjour à tous,

Voila, je suis en train de faire un petit simple logiciel d'animation: il y a 10 picturebox sur ma form j'aurais bien aimé savoir comment faire pour que quand je clique sur un bouton les image se lisent les une apres les qutres dans une autre form. Et aussi comment faire pour pouvoir régler la vitesse de défilement?

Merci d'avance!

A+

11 réponses

boursicotteur Messages postés 201 Date d'inscription mercredi 25 septembre 2002 Statut Membre Dernière intervention 10 novembre 2007
20 oct. 2007 à 21:30
Ici, il y a 2 problèmes et chacun de ces problèmes comporte plusieurs solution.

1er problème: Voir les images en cascade.
Solution #1: Le plus simple mais pas le plus élégant est de:
 1- Mettre tes 10 picturebox invisible
 2- Donner les mêmes dimentions à tes 10 pic...
 3- Mettre tes 10 pic... exactement au même endroit sur ta form
 4- Rendre visible (1 à la fois et jamais plus que 1 à la fois) tes pic... en te servant d'un timer dont tu contrôles la durée.

Solution #2:
Utiliser 1 seul pic... dans lequel tu vas charger tes 10 images à la vitesse de ton choix en te servant d'un timer.

J'ai un blanc de mémoire mais le code est quelque chose comme
picturebox1.picture = loadfile(...)

Solution #3:
Utiliser 1 seul pic... mais au lieu de charger continuellement tes images à partir de leurs fichiers, tu les stocke une seule fois dans un contrôle imagelist et c'est à partie de là que tu vas charger ton pic...
C'est pas trop compliqué à faire mais tu n'es pas encore rendu la...

Mais comment faire pour afficher sur un autre form?

2è problème: Afficher sur un autre form
Supposons que ton code est sur le form1 et que tu veux afficher sur le form2.

Tu vas d'abord devoir mettre un pic... (appelons le pic2) sur le form2 .

Ensuite, ton code (du form1)  va devoir charger en cascade ce pic2 (du form2) de cette façon:
form2.pic2.picture = loadfile(...)

Ce n'est pas la façon la plus élégante et la plus efficace mais pour le moment c'est OK car elle est à ta portée.

Je n'ai pas donné les codes car il te faut tout de même travailler un peu pour mieux te rappeler...
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
21 oct. 2007 à 00:11
Une autre solution (pour ne pas encombrer le projet) est d'y joindre un répertoire contenant les images successives et de se servir de stdPictures puis envoyer les stdpictures une par une dans la picturebox "animée" à la cadence (Timer en effet) de ton choix
Bonne nuit
0
boursicotteur Messages postés 201 Date d'inscription mercredi 25 septembre 2002 Statut Membre Dernière intervention 10 novembre 2007
21 oct. 2007 à 06:33
C'est quoi la chose que tu appelles "répertoire" ?
Est-ce un contrôle imagelist?

C'est quoi stdpicture?
Est-ce une option dans le contrôle imagelist?

Désolé mais je suis un peu rouillé car j'ai pas utilisé ces choses depuis un bon moment...

Et le jeune de 12 ans, il risque de s'y perdre sans explications...
0
panicq Messages postés 66 Date d'inscription mardi 14 novembre 2000 Statut Membre Dernière intervention 18 janvier 2010
21 oct. 2007 à 09:27
Merci pour vos réponsse mais je vais vous expliquer plus clairement mon projet: j'ai donc une dizaine de picture box sur ma form, quand je clique dessus on peut a partir d'une boite de dialogue ouvrir une image dans cette picturebox voila le code:

CommonDialog1.ShowOpen
On Error Resume Next
Set Picture1.Picture = LoadPicture(CommonDialog1.FileName)

Ensuite j'aurais aimé que une fois que l'utilisateur a importé ses image il puisse lancer son anim pour voir son rendu. Je voudrais bien utiliser le timer mais je sais pas comment faire!

Merci pour vos réponsses!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
21 oct. 2007 à 09:57
Bonjour, Boursicotteur,

Euh...

Un répertoire est ... un répertoire (je ne vois pas ce qu'aurait à faire une imagelist)... c'est riut bêtement et tout simplement UN REPERTOIRE ... (appelle le DOSSIERn si tu veux ...)

Quant à une StdPicture ... J'ouvre mon aide en ligne sur le mot tout bête PICTURE... et je lis ...

The Picture object enables you to manipulate bitmaps, icons, metafiles enhanced metafiles, GIF, and JPEG images assigned to objects having a Picture property.



Syntax



Picture



Remarks



You frequently identify a Picture object using the Picture property of an object that displays graphics (such as a Form object or a PictureBox control). If you have a PictureBox control named Picture1, you can set one Picture object equal to another using the Set statement, as in the following example:



Dim X As Picture
Set X = LoadPicture("PARTY.BMP")
Set Picture1.Picture = X



You can use an array of Picture objects to keep a series of graphics in memory without needing a form that contains multiple PictureBox or Image controls.



You can not create a Picture object using code like Dim X As New Picture. If you want to create a Picture object, you must use the StdPicture object like this:



Dim X As New StdPicture


On traite ensuite la stdPicture (sans l'afficher) exactement comme s'il s'agissant de la propriété Picture d'une pictureBox !
Où est le problème ?
0
panicq Messages postés 66 Date d'inscription mardi 14 novembre 2000 Statut Membre Dernière intervention 18 janvier 2010
21 oct. 2007 à 12:07
Att j'ai rien capter moi !?
0
boursicotteur Messages postés 201 Date d'inscription mercredi 25 septembre 2002 Statut Membre Dernière intervention 10 novembre 2007
21 oct. 2007 à 20:28
Salut jmfmarques,

Je sais "évidemment" ce qu'est un répertoire mais je ne voyais pas en quoi son usage éviterait d'encombrer le projet car dans un répertoire ou non, les 10 fichiers images sont toujours là.

C'est pour cette raison que j'ai pensé que tu parlais d'un contrôle imagelist car ce contrôle a la capacité "d'emmagasiner" des images sans qu'on ait besoin d'inclure les fichiers images dans la source du projet. Cela évite vraiment d'encombrer le projet dans le vrai sens du terme.

C'est en se parlant qu'on se comprend et c'est mieux que de se tirer dessus!

Pour ce qui est de stdPicture, bien maintenant que je sais que le contexte n'est pas celui d'un imagelist et j'ai capté ton idée.

EXPLICATIONS (pour panicq)

En termes simples, la solution de notre ami est de charger tes 10 images en mémoire (1 seule fois). Ensuite, tu utilises ces 10 "images objets" (au lieu des fichiers images) pour l'affichage.

C'est fondamentalement différent de la méthode imagelist donc une corde de plus à ton arc. Voici comment faire:
Assumons que tu as 5 fichiers son (intro1.bmp à intro5.bmp)
1- Sur ton form1, place:
un contrôle timer (timer1)
un contrôle picturebox (picture1)
un contrôle bouton (btnTEST)

2- Place ce code tout au haut du form1
Dim nP, X(1 To 5) As Picture

3- Place ce code dans le champ de ton bouton du form1
Public Sub btnTEST_Click()
    Timer1.Interval = 50  'C'est la vitesse de défilement en mSec
    Set X(1) = LoadPicture("intro1.BMP")
    Set X(2) = LoadPicture("intro2.BMP")
    Set X(3) = LoadPicture("intro3.BMP")
    Set X(4) = LoadPicture("intro4.BMP")
    Set X(5) = LoadPicture("intro5.BMP")

4- Place ce code dans le champ de ton timer
Private Sub Timer1_Timer()
    nP = IIf(nP < 5, nP + 1, 1)
    Set Picture1.Picture = X(nP)
End Sub

Voila!

Pour afficher dans form2 tu ajoutes un pic...(picture1) dans le form2  et au point 4 ci haut tu remplaces
       Set Picture1.Picture = X(nP)
par
       Set Form2.Picture1.Picture = X(nP)

Voila!
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
22 oct. 2007 à 08:58
Bon...

Ru auras sans doute compris, Boursicotteur, que cette façon de procéder permet d'utiliser la même application pour afficher plusieurs "anumations" différentes (suffit de mettre plusieurs sous-répertoires dans le répertoire de lappli et de choisir son animation/répertoire .

Ceci étant dit : on va laisser le demandeur travailler sur la base que tu lui as montrée. Cela ira bien puisque l'animation ne concerne qu'un petit nombre d'images à faire défiler. Si le nombre était par contre élevé, on ne procèderait pas ainsi mais par roulements de groupes de 2 à 3 images, ce qui permettrait de ne pas trop encombrer la mémoire.
0
boursicotteur Messages postés 201 Date d'inscription mercredi 25 septembre 2002 Statut Membre Dernière intervention 10 novembre 2007
22 oct. 2007 à 15:21
Je suis d'accord avec toi!

Concernant la mémoire, je n'ai rien dit à panicq car il a d'autres chats à fouetter à cette étape de son cheminement.
 
Avant longtemps, il va se rendre compte qu'effectivement il y a un prix "mémoire" attaché à cette méthode et quand il va être encore plus avancé en VB il va aussi découvrir qu'il faut détruire ces "objets" créés" après leur usage car ils consomment de la mémoire.

Sauf erreur, je dirais que c'est principalement sur cet aspect "mémoire" que le contrôle imagelist est avantageux... à la condition de le charger manuellement à la configuration du projet. Par contre, le double prix à payer est la flexibilité (si on a plusieurs animations) et la grosseur de l'exe (si l'animation est grosse). Il n'y a vraiment rien de gratuit!

Si on le charge par code quand le projet roule alors je crois bien qu'on perd cet avantage "mémoire" et retrouve la flexibilité. Mais dans ce cas, aussi bien y aller avec ta méthode.

J'espère  que je n'ai pas dit de bêtises!
Si c'est le cas alors corriges moi...

Maintenant, laissons travailler l'élève...
0
panicq Messages postés 66 Date d'inscription mardi 14 novembre 2000 Statut Membre Dernière intervention 18 janvier 2010
24 oct. 2007 à 17:23
A boursicotteur Merci pour ton aide mais j'ai un petit pb enfaite moi j'ai 5 picturebox sur ma form et des que je clique dessus on peut charger une image dedans grace a une commond dialog et apres j'ai un bouton test et quand je clique sur ce btn test alors mon anima va defiler les image charger dans les pb davec un cetrait interval dans un timer. Mais comment faire avec le code que tu ma donner?

Merci a+
0
boursicotteur Messages postés 201 Date d'inscription mercredi 25 septembre 2002 Statut Membre Dernière intervention 10 novembre 2007
24 oct. 2007 à 19:55
Le code fait ce pourquoi il a été écrit. Pour faire autre chose, il faut un autre code.

Mais le but du code que je t'ai donné est de te montrer le principe seulement. Maintenant, c'est à toi d'utiliser ce principe et de l'adapter à tes besoins.

En cherchant, on fait toujours des découvertes inattendues qui nous font changer notre façon d'aborder un problème. Même que souvent on change carrément de direction pour travailler sur une idée totalement différente. C'est ça la programmation!

Ce processus est indipensable pour s'améliorer et je te nuirais plus que je t'aiderais si je te donnais exactement le code que tu cherches...

Je t'ai donné toutes les infos dont tu as besoin pour faire ce que tu veux. Il ne te reste plus qu'à les assimiler.
0
Rejoignez-nous