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 :

Problème de code


Sujet :

Delphi

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2008
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 27
    Points : 17
    Points
    17
    Par défaut Problème de code
    Salut le Forum,


    Voici ma préoccupation :

    Je veux avoir une image dynamique => pour cela j'ai créer deux images et j'ai jouer avec leur "Visible". J'ai appliqué un repeat à l'infini pour que le gif tourne en permanence.
    Mais le problème est que le prog une fois compiler reste sur se repeat et impossible aprés de faire autre chose ou même d'arréter la compil.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
      no := 1;            { numéro de l'image affichée }
      nbseq := StrToInt(EdSeq.Text);   { Nombre de séquences }
      defile := StrToInt(Edall.Text);  { Allure = Temporisation }
    repeat
        Application.ProcessMessages;
        case no of
          1 : begin
                ima2.Visible := false;
                ima1.Visible := true;
                ima1.Repaint;
              end;
          2 : begin
                ima1.Visible := false;
                ima2.Visible := true;
                ima2.Repaint;
              end;
     
        end;
        inc(no);          { image suivante }
        if no > 2 then
        begin
          no := 1;        { réinitialise le numéro d'image }
          Dec(nbseq);    { décrémente le nombre de séquences }
        end;
        Sleep(defile);   { Temporisation }
      until nbseq = 1;
    En faite nbseq ne devient jms égale à 1.






    Si qq1 saurait comment pour ce genre de truc
    merci !

  2. #2
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 419
    Points : 5 818
    Points
    5 818
    Par défaut
    salut


    tu as mis ton code dans quelle événements ?

    [edit] :de plus tu as un probleme de logique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
      no := 1;                                 { numéro de l'image affichée }
      nbseq := StrToInt(EdSeq.Text); { Nombre de séquences }
      defile := StrToInt(Edall.Text);    { Allure = Temporisation }
    repeat
        //Application.ProcessMessages;
        case no of
          1 : begin
                 ima2.Visible := false;
                 ima1.Visible := true;
                 ima1.Repaint;
              end;
          2 : begin
                ima1.Visible := false;
                ima2.Visible := true;
                ima2.Repaint;
              end;
         end;
        // tu as 2 images ?
        if no > 1 then 
        begin
          no := 0;         { réinitialise le numéro d'image }
          Dec(nbseq);    { décrémente le nombre de séquences }
        end;
        Sleep(defile);   { Temporisation }
        inc(no);{ image suivante }// dans le premier tour on passe a 2
      until nbseq <= 1 ; // jusqu'a   (nbseq <= 1 )

    @+ Phil
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Mais le problème est que le prog une fois compiler reste sur se repeat et impossible aprés de faire autre chose ou même d'arréter la compil.
    Hein ? C'est la compilation qui plante ? l'Execution ? Bon, on va dire qu'il y a confusion des mots, tu veux dire que ça tourne sur le repeat en permanence une fois le programme lancé, ce qui semble assez logique si tu as mis ce code dans OnCreate, OnActivate ou OnShow ...

    simplifions le code pour deux images (si tu dois faire une animation de 10 images, tu ne vas pas quand même créés 10 TImage, ça ne tient pas la route)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
      no := 1;            { numéro de l'image affichée }
      nbseq := StrToInt(EdSeq.Text);   { Nombre de séquences }
      defile := StrToInt(Edall.Text);  { Allure = Temporisation }
      repeat
        Application.ProcessMessages;
        case no of
          1 : begin
                ima2.Visible := false;
                ima1.Visible := true;
                ima1.Repaint;
                no := 2;
              end;
          2 : begin
                ima1.Visible := false;
                ima2.Visible := true;
                ima2.Repaint;
                no := 1;
              end; 
        end;
     
        Dec(nbseq);    { décrémente le nombre de séquences }
        Sleep(defile);   { Temporisation }
      until nbseq = 1;
    Déjà est-ce que cela fonctionne comme ça ?

    Un programme c'est déjà une boucle permanente dans le Run (équivalement du main en C), tu ne dois plus faire de boucle permanente dans un programme Windows ... l'Application.ProcessMessages te permet que l'application réagit mais cela sollicite le processus bien plus que dans un flux normal alors que le Sleep bloque vraiement l'application, il ne doit pas être utiliser en dehors d'un thread normalement ... tu dois passer par un système de message ou des files d'attentes d'actions ...



    Essaye d'utiliser un Timer, à chaque déclenchement du Timer, tu lance la fonction de switch, qui peut se faire plus simplement pour deux images :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    procedure TForm1.Timer1Timer(Sender: Tobject);
    begin
      if ima1.Visible then
      begin
        ima1.Visible := False;
        ima2.Visible := True;
        ima2.Repaint;
      end
      else
      begin
        ima1.Visible := True;
        ima2.Visible := False;
        ima1.Repaint;
      end;
    end;
    Ensuite, si tu as plus de Deux images, faut repartir sur un compteur, mais dans ce cas là, autant utilisant un TAnimate qui affiche un AVI directement ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  4. #4
    Membre à l'essai
    Inscrit en
    Octobre 2008
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 27
    Points : 17
    Points
    17
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    procedure TForm1.Timer1Timer(Sender: Tobject);
    begin
      if ima1.Visible then
      begin
        ima1.Visible := False;
        ima2.Visible := True;
        ima2.Repaint;
      end
      else
      begin
        ima1.Visible := True;
        ima2.Visible := False;
        ima1.Repaint;
      end;
    end;
    MERCI BEAUCOUP pour vos réponses.
    LE code ci-dessus me convient PARFAITEMENT et marche impect !!!
    P'tite question : qu'est ce un "AVI" ??

    merci

  5. #5
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    un Fichier .AVI standard (je ne parle pas des MPEG4\DivX qui utilise la même extension mais avec un format différent), c'est une séquence de bitmap, c'est le format d'animation de base de Windows, c'est comme le Gif mais non compressé ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

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

Discussions similaires

  1. problème de code avec un tableau
    Par richard038 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 12/05/2006, 17h35
  2. problème de code javascript pour une vue 360°
    Par tomguiss dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/03/2006, 22h50
  3. [POO] Problème de code PHP avec Internet Explorer
    Par bzoler dans le forum Langage
    Réponses: 5
    Dernier message: 12/02/2006, 11h00
  4. Problème de code besoin d un petit depannage
    Par rakengoule dans le forum MFC
    Réponses: 3
    Dernier message: 10/10/2005, 16h25
  5. Probléme de code non portable
    Par Stany dans le forum Windows
    Réponses: 2
    Dernier message: 23/08/2005, 11h02

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