IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

Ralentir l'affichage de mes images


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2003
    Messages
    146
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 146
    Par défaut Ralentir l'affichage de mes images
    Cela peut sembler drôle mais comme le titre le mentionne, j'aimerais que l'affichage des images dont le nom est contenu dans un TListbox soit ralenti afin de créer un effet semblable à quant on feuillette une revue très rapidement. Jusqu'à présent, j'ai essayé avec sleep et timer sans résultat; Tout ce passe si vite que je ne vois que la dernière image de ma liste. Voici le code de base:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      Nb2:=Listbox2.items.count;
       for n2:=0 to Nb2-1 do
       begin
         image2.Picture.LoadFromFile(Listbox2.items[n2]);
         LabelNomP2.Caption:=ExtractFileName(Listbox2.items[n2]);
        ..... suite de la procédure
      end;
    Si les images pouvaient s'afficher successivement environ tout les 500 ms, ca devrait être parfait. Un sleep la dedans me gèle mon application; j'ai mais image2.picture...... dans le timer et on me retourne indice hors limite, je tourne en rond depuis 2 jours.

    Merci de votre aide !

    Duan

  2. #2
    Membre Expert
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
      Nb2 := Listbox2.Items.Count;
      If (Nb2 > 0) Then
        For n2 := 0 To Nb2-1 Do
        Begin
          Image2.Picture.LoadFromFile(Listbox2.items[n2]);
          LabelNomP2.Caption := ExtractFileName(Listbox2.items[n2]);
     
          Image2.Refresh;
          Application.ProcessMessages;
          Sleep(500);
        End;
    Image2.Refresh n'est peut-être pas nécessaire, à vérifier. Tu remarqueras que j'ai ajouté une condition suplémentaire avant de lancer la boucle... Tu devrais aussi mettre le chargement de l'image entre Try et Except pour gérer les éventuelles erreurs, par exemple, si le fichier n'existe pas ou si il n'est pas une image valide.

    ???

  3. #3
    Expert confirmé

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Par défaut
    Citation Envoyé par Sub0
    Tu remarqueras que j'ai ajouté une condition suplémentaire avant de lancer la boucle...
    ... Qui n'est d'ailleurs pas nécessaire Je faisais aussi au début, puis j'ai compris que si on faisait un for 0 to -1 ça ne posait aucun problème : la boucle ne s'exécute pas.
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  4. #4
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Par défaut
    Citation Envoyé par sjrd
    ... Qui n'est d'ailleurs pas nécessaire Je faisais aussi au début, puis j'ai compris que si on faisait un for 0 to -1 ça ne posait aucun problème : la boucle ne s'exécute pas.
    Sauf que là, en cas de liste vide, NB2 aurai renvoyé 0 Ce qui aurait déclenché la boucle pour une valeur de n2: la valeur de trop
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2003
    Messages
    146
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 146
    Par défaut
    Merci à vous tous pour vos réponses, cela fonctionne à merveille. Après quelques essais, j'ai mis le sleep à 200 ce qui permet de voir que le prog fait le tour des fichier présents sans passer trop de temps dessus.

    J'ai appliqué les suggestions de Sub0 car il est vrai que l'on est jamais assez prudent.

    Encore une fois merci et à la prochaine.

    Duan

  6. #6
    Membre éprouvé
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Par défaut
    +1 Sjrd
    la boucle n'est pas exécutée de 0 à -1
    De plus cela fait une condition en moins (certe temps perdu négligeable), mais allège un peu le code visuellement.
    Donc c'est une précaution totalement inutile de mettre le 'if' en tete de boucle.

    @Pedro
    si nb2 vaut 0, la boucle va bien de 0 à -1 car l'indice supérieur est (nb2-1) et n'est donc pas exécutée
    (tu m'en veux pas hein hein )
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Affichage de mes images dynamiques
    Par koredgea dans le forum Dreamweaver
    Réponses: 6
    Dernier message: 09/04/2009, 10h57
  2. [Affichage] Pourquoi mes contrôles apparaissent derrière l'image de fond ?
    Par Gregory.M dans le forum Windows Presentation Foundation
    Réponses: 7
    Dernier message: 24/09/2008, 13h17
  3. [JLabel][HTML]pourquoi mes images s'affiche pas?!
    Par La Truffe dans le forum Composants
    Réponses: 8
    Dernier message: 29/04/2004, 11h23
  4. [DirectDraw7] Affichage de plusieurs image bmp
    Par SteelBox dans le forum DirectX
    Réponses: 3
    Dernier message: 24/04/2004, 19h00
  5. Affichage d'une image sous linux
    Par Braim dans le forum x86 32-bits / 64-bits
    Réponses: 5
    Dernier message: 25/03/2003, 10h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo