Discussion: Dysfonctionnement de BGRALEDs [Lazarus]

  1. #1
    Membre confirmé
    Avatar de FOCUS77
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2014
    Messages
    268
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : août 2014
    Messages : 268
    Points : 513
    Points
    513

    Par défaut Dysfonctionnement de BGRALEDs

    Bonsoir à tous,

    Je veux concevoir un jeu de lumière avec une vingtaine de BGRALED déposées sur une forme dont
    voici les codes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var
      Form1: TForm1;
       i,ecart:integer;
    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
    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
     if i< componentcount+ecart-1 then
     begin
          if i<ecart then
          TBGRALED(Components[i]).On:=True
          else if (i>=ecart) and (i<componentcount) then
          begin
          TBGRALED(Components[i-ecart]).On:=False;
          TBGRALED(Components[i]).On:=True;
          end
          else if i>=componentcount then
          TBGRALED(Components[i-ecart]).On:=False;
          i:=i+1;
      end
     else
     begin i:=0;ecart:=ecart+1 end;
     if ecart>componentcount-2 then
     ecart:=1;
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.Timer1StartTimer(Sender: TObject);
    begin
      i:=0;ecart:=1
    end;
    Les 19 premières BGRALED fonctionnent normalement, mais la dernière déclenche une erreur

    des idées?

  2. #2
    Expert éminent
    Avatar de Jipété
    Profil pro
    Inscrit en
    juillet 2006
    Messages
    5 420
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : juillet 2006
    Messages : 5 420
    Points : 7 409
    Points
    7 409

    Par défaut

    Citation Envoyé par FOCUS77 Voir le message
    une erreur

    des idées?
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  3. #3
    Membre expert
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mai 2002
    Messages
    2 386
    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 : 2 386
    Points : 3 730
    Points
    3 730

    Par défaut

    Salut

    Es-tu sûr que tous les components sont des TBGRALED ?

    Pour ma part, j'aurais créé un tableau de LED :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    TabLed : Array of TBGRALED;
    ...
    SetLengh(TabLed,0);
     
    Procedure ...NouvelleLed;
    begin
      setlength(TabLed,length(TabLed)+1);
      TabLed[High(TabLed)] := TBGRALED.create...;
      ...
      NbCountLed :=length(TabLed); 
    end;
    Je pense que tu plantes à ce niveau-là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if i< componentcount+ecart-1 then
    Ta position de led ne doit jamais dépasser le nombre de leds. Ajouter l’écart à ton nombre de leds est une erreur.
    J'aurais vu un truc plus dans ce genre :
    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
     
     if iLedCourante < Pred(NbCountLed) then // 
     begin
       iLedCourante :=iLedCourante +1;
       if  (iLedCourante >=ecart) Then 
       begin
         TBGRALED(TabLed[iLedCourante-ecart]).On := False;
         ecart := ecart+1; 
       end;
     end
     else
     begin
       iLedCourante := 0;  
       ecart := 0;
     end;
      TBGRALED(TabLed[iLedCourante]).On := True;
    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

  4. #4
    Membre confirmé
    Avatar de FOCUS77
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2014
    Messages
    268
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : août 2014
    Messages : 268
    Points : 513
    Points
    513

    Par défaut

    Bonjour à tous

    @anapurna
    -oui tous les composants sont de type TBGRALED.
    - Je n'ai pas encore étudié tes codes, en fait ce qui m'étonne est que ce même code fonctionne ainsi sans aucun problème:

    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
    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
     if i< componentcount+ecart-1 then
     begin
          if i<ecart then
          TBGRALED(Components[i]).color:=clblue
          else if (i>=ecart) and (i<componentcount) then
          begin
          TBGRALED(Components[i-ecart]).color:=clyellow;
          TBGRALED(Components[i]).color:=clblue;
          end
          else if i>=componentcount then
          TBGRALED(Components[i-ecart]).color:=clyellow;
          i:=i+1;
      end
     else
     begin i:=0;ecart:=ecart+1 end;
     if ecart>componentcount-2 then
     ecart:=1;
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.Timer1StartTimer(Sender: TObject);
    begin
      i:=0;ecart:=1
    end;

  5. #5
    Membre confirmé
    Avatar de FOCUS77
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2014
    Messages
    268
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : août 2014
    Messages : 268
    Points : 513
    Points
    513

    Par défaut

    Bonsoir à tous,

    @anapurna
    Ta position de led ne doit jamais dépasser le nombre de led
    C'est exactement ça !!

    donc voilà le nouveau code:
    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
    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
     if i< componentcount+ecart-1 then
     begin
          if i<ecart then
          begin  TBGRALED(Components[i]).On:=True end
          else if (i>=ecart) and (i<componentcount-1) then  // erreur1:(i<componentcount) 
          begin
          TBGRALED(Components[i-ecart]).On:=False;
          TBGRALED(Components[i]).On:=True;
          end
          else if i>=componentcount-1 then         // erreur2:(i>=componentcount) 
          TBGRALED(Components[i-ecart]).On:=False;
          i:=i+1;
      end
     else
     begin i:=0;ecart:=ecart+1;  end;
     if ecart>componentcount-2 then
    ecart:=1;
    end;
    merci à vous tous.

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

Discussions similaires

  1. [PHP-JS] Depuis Internet explorer 7 Dysfonctionnement popup
    Par Rodolphe_1940 dans le forum Syntaxe
    Réponses: 5
    Dernier message: 14/12/2006, 10h30
  2. Dysfonctionnement Macro Envoi Objet
    Par lea022 dans le forum Access
    Réponses: 4
    Dernier message: 23/11/2006, 11h02
  3. [VBA-E] Dysfonctionnement dans la gestion des erreurs
    Par Choco49 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 14/06/2006, 11h44
  4. Imporation des CSS qui dysfonctionne ?
    Par petitnuage dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 26/05/2006, 12h15
  5. Réponses: 1
    Dernier message: 23/11/2005, 11h06

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