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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 : 54
    Localisation : Algérie

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

    Informations forums :
    Inscription : Août 2014
    Messages : 336
    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
    Rédacteur

    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
    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
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  3. #3
    Rédacteur

    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
    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...
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  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 : 54
    Localisation : Algérie

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

    Informations forums :
    Inscription : Août 2014
    Messages : 336
    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 : 54
    Localisation : Algérie

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

    Informations forums :
    Inscription : Août 2014
    Messages : 336
    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 942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 942
    Billets dans le blog
    6
    Par défaut
    ajouter un constructeur paramétré qui ajusterait BlinkInterval lors de ce Create ?
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  7. #7
    Rédacteur

    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
    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
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  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 : 54
    Localisation : Algérie

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

    Informations forums :
    Inscription : Août 2014
    Messages : 336
    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;

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

Discussions similaires

  1. Réponses: 13
    Dernier message: 27/06/2006, 12h20
  2. Réponses: 4
    Dernier message: 04/06/2006, 15h35
  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, 10h26
  4. [POO] La valeur de l'attribut ne change pas...
    Par slydemusli dans le forum Langage
    Réponses: 3
    Dernier message: 26/03/2006, 13h10
  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, 17h56

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