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

Lazarus Pascal Discussion :

BGRALED : BlinkInterval ne change pas [Lazarus]


Sujet :

Lazarus Pascal

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

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

    Informations forums :
    Inscription : Août 2014
    Messages : 336
    Points : 680
    Points
    680
    Par défaut BGRALED : BlinkInterval ne change pas
    Bonsoir à tous

    J'utilise la version RC2, mais la fréquence de clignotement de BGRALED ne change pas quel que soit le nombre attribué à BlinkInterval.

    Une idée ?

    Merci pour votre aide.

  2. #2
    Responsable Lazarus & Pascal

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    Février 2013
    Messages
    1 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 1 436
    Points : 20 858
    Points
    20 858
    Billets dans le blog
    84
    Par défaut
    Citation Envoyé par FOCUS77 Voir le message
    Bonsoir à tous

    j'utilise la version RC2, mais la fréquence de clignotement de BGRALED ne change pas quelle que soit le nombre attribuer à BlinkInterval.

    une idée?

    merci pour votre aide.
    Bonjour,

    RC2 correspond à une ancienne version de Lazarus (qu'il est conseillé de ne plus utiliser puisqu'elle a été largement corrigée par la version stable 1.6) alors que BGRALed correspond à un composant de BGRAControls dont il faut aussi fournir la version (la toute dernière est la 4.2) pour obtenir une éventuelle aide. Le composant en question ne figure plus sur la palette des BGRAControls : il doit y avoir une raison...

    Cordialement,

    GIlles

  3. #3
    Responsable Lazarus & Pascal

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    Février 2013
    Messages
    1 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 1 436
    Points : 20 858
    Points
    20 858
    Billets dans le blog
    84
    Par défaut
    Re-Bonjour,

    Je suis allé voir dans le code de BGRALed (conservé avec une version de Sparta). En fait, BlinkInterval n'est utilisé qu'au moment de la création de la Led. Les changements suivants ne sont tout simplement pas pris en compte : le faire aurait conduit à des réactions étranges, car le temps de dessiner aurait pu alors être supérieur à celui décompté par le timer . Bref, ce n'était pas un composant au point...

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

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

    Informations forums :
    Inscription : Août 2014
    Messages : 336
    Points : 680
    Points
    680
    Par défaut
    Bonsoir

    Merci pour ton éclaircissement Gilles.

    De toutes façon je continuerai à utiliser le BGRALED du paquet bgracontrols 3.6 malgré sa haute fréquence (300 ms) puisque je n'ai pas
    d'autres choix

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

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

    Informations forums :
    Inscription : Août 2014
    Messages : 336
    Points : 680
    Points
    680
    Par défaut
    Rebonjour

    J'ai réussi à diminuer la fréquence en augmentant la valeur de FBlinkInterval de 300 ms à 2000 ms dans l'unité BGRALED.
    malheureusement toutes les BGRALEDs ont assignés cette valeur donc il manque un code qui permis de configurer toute LED à part.

    si quelqu'un saura écrire ce 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
    21
    constructor TBGRALED.Create(AOwner: TComponent);
    begin
      inherited Create(AOwner);
      ControlStyle := ControlStyle + [csReplicatable, csCaptureMouse, csClickEvents, csDoubleClicks];
      Bitmap:=TBGRABitmap.Create(0,0);
      with GetControlClassDefaultSize do SetInitialBounds(0, 0, CX, CY);
      FChanging:=False;
      FActive:=true;
      FOn:=true;
      OnStatus:=FOn;
      FReflection:=true;
      FColor:=clRed;
      FBackgroung:=clMaroon;
      FLedType:=ledRound;
      FBlinking:=False;
      FBlinkInterval:=2000;
      BlinkTimer:=TTimer.Create(Nil);
      BlinkTimer.Enabled:=False;
      BlinkTimer.Interval:=FBlinkInterval;
      BlinkTimer.OnTimer:=@BlinkTimerTimer;
    end;

  6. #6
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 877
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 877
    Points : 11 366
    Points
    11 366
    Billets dans le blog
    6
    Par défaut
    ajouter un constructeur paramétré qui ajusterait BlinkInterval lors de ce Create ?

  7. #7
    Responsable Lazarus & Pascal

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    Février 2013
    Messages
    1 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 1 436
    Points : 20 858
    Points
    20 858
    Billets dans le blog
    84
    Par défaut
    Citation Envoyé par FOCUS77 Voir le message
    J'ai réussi à diminuer la fréquence en augmentant la valeur de FBlinkInterval de 300 ms à 2000 ms dans l'unité BGRALED.
    malheureusement toutes les BGRALEDs ont assignés cette valeur donc il manque un code qui permet de configurer toute LED à part.
    Bonjour,

    C'est ce que j'avais vu en examinant le code. fBlinkInterval n'est alors plus utilisée qu'avec le timer, sans possibilité de changer sa valeur.
    Comme l'a écrit tourlourou, si chaque led doit avoir une valeur de clignotement spécifique, il suffit de créer un autre constructeur déclaré avec la directive overload. Un truc du 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
    17
    18
    19
    20
    21
    22
    23
     
    constructor TBGRALED.Create(AOwner: TComponent; ABlinkInterval: QWord);
    begin
      inherited Create(AOwner);
      ControlStyle := ControlStyle + [csReplicatable, csCaptureMouse, csClickEvents, csDoubleClicks];
      Bitmap:=TBGRABitmap.Create(0,0);
      with GetControlClassDefaultSize do
       SetInitialBounds(0, 0, CX, CY);
      FChanging:=False;
      FActive:=true;
      FOn:=true;
      OnStatus:=FOn;
      FReflection:=true;
      FColor:=clRed;
      FBackgroung:=clMaroon;
      FLedType:=ledRound;
      FBlinking:=False;
      FBlinkInterval:= ABlinkInterval; // ligne changée
      BlinkTimer:=TTimer.Create(Nil);
      BlinkTimer.Enabled:=False;
      BlinkTimer.Interval:=FBlinkInterval;
      BlinkTimer.OnTimer:=@BlinkTimerTimer;
    end
    Chaque Led aura bien sa valeur spécifique de clignotement, mais elle ne pourra toujours pas être modifiée.
    La modification demande des efforts plus importants : il ne faut pas que le timer soit plus rapide que le temps de dessiner la led ou que le programme soit ralenti par un dessin répété et intensif de cette même led ! Il est par conséquent nécessaire de créer les leds dans des threads séparés...

    Cependant, tu peux tenter un code comme ce qui suit, à condition que l'utilisateur final ne puisse pas modifier la valeur du clignotement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    TBGRALED = class(TGraphicControl)
    [...]
    protected
      procedure SetBlinking(AValue: Boolean); virtual;
      procedure SetBlinkInterval(AValue: QWord); virtual; // ajout
    Puis de définir simplement cette méthode par quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    procedure TBGRALED.SetBlinkInterval (AValue: QWord);
    begin
     if FBlinkInterval = AValue then
      exit;
     FBlinkInterval := AValue;[/TD]
    end;
    Cordialement,

    Gilles

  8. #8
    Membre éclairé
    Avatar de FOCUS77
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2014
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Algérie

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

    Informations forums :
    Inscription : Août 2014
    Messages : 336
    Points : 680
    Points
    680
    Par défaut
    Bonjour

    @Gilles

    merci pour l'aide qui a résolu mon problème.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    procedure SetBlinkInterval(AValue: QWord); virtual;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    property BlinkInterval: QWord read FBlinkInterval write SetBlinkInterval;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TBGRALED.SetBlinkInterval(AValue: QWord);
    begin
     if FBlinkInterval = AValue then
      exit;
      FBlinkInterval := AValue;
      BlinkTimer.Enabled:=False;
      BlinkTimer.Interval:=FBlinkInterval;
      BlinkTimer.Enabled:=True; 
    end;

  9. #9
    Responsable Lazarus & Pascal

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    Février 2013
    Messages
    1 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 1 436
    Points : 20 858
    Points
    20 858
    Billets dans le blog
    84
    Par défaut
    D'accord : c'est en gros le code que j'ai proposé. Cependant, il y a une partie qui n'a rien à voir avec la vitesse du clignotement et qui est déjà traitée par la propriété Blinking :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TBGRALED.SetBlinkInterval(AValue: QWord);
    begin
     if FBlinkInterval = AValue then
      exit;
     FBlinkInterval := AValue;
    // BlinkTimer.Enabled:=False;  // a priori c'est inutile
    //  BlinkTimer.Interval:=FBlinkInterval;
    //   BlinkTimer.Enabled:=True; 
    //  DrawLED;
    end;
    Mais as-tu explicitement affecté une nouvelle valeur à la propriété BlinkInterval dans ton code ?

    Par exemple, sur un clic de bouton :

    Encore mieux, en liant cette valeur à un TSpinEdit ?

  10. #10
    Membre éclairé
    Avatar de FOCUS77
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2014
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Algérie

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

    Informations forums :
    Inscription : Août 2014
    Messages : 336
    Points : 680
    Points
    680
    Par défaut
    Bonjour

    Effectivement le code suivant fonctionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.Button1Click(Sender: TObject);
    begin
     BGRALED1.BlinkInterval:=SpinEdit1.Value*200 ;
    end;
    Cependant le code précédent a fonctionné ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TBGRALED.SetBlinkInterval(AValue: QWord);
    begin
     if FBlinkInterval = AValue then
      exit;
       FBlinkInterval := AValue;
       BlinkTimer.Enabled:=False;
       BlinkTimer.Interval:=FBlinkInterval;
       BlinkTimer.Enabled:=True;
    end;

  11. #11
    Responsable Lazarus & Pascal

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    Février 2013
    Messages
    1 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 1 436
    Points : 20 858
    Points
    20 858
    Billets dans le blog
    84
    Par défaut
    Tant mieux .
    Le second code fonctionnera, mais il est en grande partie inutile dans le cas où il s'agit simplement de faire varier la vitesse de clignotement.

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

Discussions similaires

  1. Réponses: 13
    Dernier message: 27/06/2006, 11h20
  2. Réponses: 4
    Dernier message: 04/06/2006, 14h35
  3. [WinCE/PDA] Pourquoi touche TAB ne change pas le focus ?
    Par zitoun dans le forum Windows Mobile
    Réponses: 7
    Dernier message: 24/04/2006, 09h26
  4. [POO] La valeur de l'attribut ne change pas...
    Par slydemusli dans le forum Langage
    Réponses: 3
    Dernier message: 26/03/2006, 12h10
  5. Frames : adresse ne change pas
    Par polo-j dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 14/02/2005, 16h56

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