begin process at 2012 02 07 07:14:36
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Graphique

 > TABLEAU DE VOYANTS CLIGNOTANTS

TABLEAU DE VOYANTS CLIGNOTANTS


 Information sur la source

Note :
Aucune note
Catégorie :Graphique Classé sous :clignotant, voyants, leds, timer, souris Niveau :Débutant Date de création :18/12/2006 Date de mise à jour :01/05/2008 09:25:33 Vu / téléchargé :9 231 / 804

Auteur : Jean_Jean

Ecrire un message privé
Commentaire sur cette source (9)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
J'est en me heurtant à une gestion de voyants (Voir la capture!) que j'ai décidé de publier ce code. Il me fallait des voyants clignotants!

Ce programme pourra servir à d'autres débutants.

L'utilisateur peut modifier le nombre de voyants, de niveau et leur dimension (en partie)

Source

  • Les thèmes et intérêts de programmation sont divers :
  • Pour la 1ère version :
  • - Image des voyants chargés par appel direct du fichier Bitmap:
  • TImage(FindComponent('Image' + IntToStr(i))).Picture.LoadFromFile(FicVoy);
  • Ou par référence à un index du composant ImageList
  • ImageList1.GetBitmap(1,TImage(Components[i]).Picture.Bitmap)
  • - Sélection visuelle d'option (en cliquant sur un voyant). Paramétrage de la colonne et de la ligne d'une Matrice de voyants
  • Colonne = Process concerné / Ligne = Niveau du Paramètre du Process
  • - Clignotement (par deux timers) du Voyant concerné par l'option choisie
  • - Identifications dynamiques divers de voyants :
  • if Assigned(FindComponent('Image' + IntToStr(i))) then
  • TImage(FindComponent('Image' + IntToStr(i))).Picture.LoadFromFile(FicVoy)
  • ou
  • If Components[i] Is TImage Then if ( Components[i].Name = 'Image4') then...
  • Pour la 2ème version, on ajoutera :
  • - Création Dynamique des Leds
  • - Centralisation des clics de sélection des leds
  • - Personnalisation du tableau des Leds : Nombre de proces, de leds par process, espacements...
  • On notera que le deuxième source (blincker 2) est beaucoup moins gourmand en octets
  • Jean_Jean
Les thèmes et intérêts de programmation sont divers : 

Pour la 1ère version :

- Image des voyants chargés par appel direct du fichier Bitmap:       
  TImage(FindComponent('Image' + IntToStr(i))).Picture.LoadFromFile(FicVoy);
  Ou par référence à un index du composant ImageList
  ImageList1.GetBitmap(1,TImage(Components[i]).Picture.Bitmap)

- Sélection visuelle d'option (en cliquant sur un voyant). Paramétrage de la colonne et de la ligne d'une Matrice de voyants
  Colonne = Process concerné / Ligne = Niveau du Paramètre du Process

- Clignotement (par deux timers) du Voyant concerné par l'option choisie
- Identifications dynamiques divers de voyants :
      if Assigned(FindComponent('Image' + IntToStr(i))) then
      TImage(FindComponent('Image' + IntToStr(i))).Picture.LoadFromFile(FicVoy)
      ou
      If Components[i] Is TImage Then if ( Components[i].Name = 'Image4') then...

Pour la 2ème version, on ajoutera :

- Création Dynamique des Leds
- Centralisation des clics de sélection des leds
- Personnalisation du tableau des Leds : Nombre de proces, de leds par process, espacements...

On notera que le deuxième source (blincker 2) est beaucoup moins gourmand en octets

Jean_Jean

 Conclusion

Le source est commenté en détail.
Le code est encore améliorable. Notamment, celui d'écrire un Objet Tableau de voyants ou un composant comme l'a suggéré Florenth :-)
L'utilisation va de soi et peut s'adapter très facilement...

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

31 décembre 2006 17:53:09 :
18/12/2006 : 1ère version non optimisée plusieurs timers, images statiques, 1 méthode par voyant... Bien que le code n'est pas de haut niveau, je l'ai laissé. il permet aux débutants de voir les différents niveaux de programmation. Le code fourni n'était alors que prétexte à faire une petite révision de l'utilisation de quelques instructions. 31/12/2006 : 2ème version optimisée suivant les commentaires du 1er source Paramètres modifiables du tableau de Leds Création Dynamique des Leds : 1 fréquence possible par led 1 seule méthode pour la sélection d'une Led quelconque Merci à ceux qui ont participé
01 mai 2008 09:25:34 :
01/05/2008 : Corrections orthographiques

 Sources du même auteur

Source avec Zip Source avec une capture GESTION DE CASES À COCHER PERSONNALISÉES DANS UN STRINGGRID
Source avec Zip Source avec une capture COULEURS SYSTÈME

 Sources de la même categorie

Source avec Zip Source avec une capture RAYTRACING EN DELPHI (PROGRESSIVE PATH TRACING) par Bacterius
Source avec Zip Source avec une capture TEXTE SUR COURBE DE BEZIER par pseudo3
Source avec Zip Source avec une capture YEUXROUGES par pseudo3
Source avec Zip Source avec une capture FIREMONKEY : PATHDATA ET FORMAT SVG par Christophe67
Source avec Zip Source avec une capture FIREMONKEY : ROTATION CUBE par Christophe67

 Sources en rapport avec celle ci

Source avec Zip TMICROTIMER - TIMER À LA MICROSECONDE ! par Bacterius
Source avec Zip Source avec une capture SIMULATION DE PLUSIEURS TIRAGES DU JEU DE JOKER (LOTTO) par bad_dark_spirit
Source avec Zip Source avec une capture KEYMOUSE PARAMÉTRAGE, OU MODIFIER LES PARAMÈTRES DE LA SOURI... par Bacterius
Source avec Zip Source avec une capture UN CHRONOS SIMPLE AVEC UN COMPOSENT LABEL ANIMÉ par jackalunion
Source avec Zip Source avec une capture NI CLIC NI TOUCHE par barbichette

Commentaires et avis

Commentaire de f0xi le 19/12/2006 09:39:21 administrateur CS

pfiuuu que de code pour ça ...

tu pourrais optimiser tout cela avec des tableaux, des inverseurs booléens ect... ect...

exemple avec des paintbox :

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    PaintBox1: TPaintBox;
    PaintBox2: TPaintBox;
    PaintBox3: TPaintBox;
    PaintBox4: TPaintBox;
    PaintBox5: TPaintBox;
    PaintBox6: TPaintBox;
    PaintBox7: TPaintBox;
    PaintBox8: TPaintBox;
    PaintBox9: TPaintBox;
    PaintBox10: TPaintBox;
    PaintBox11: TPaintBox;
    PaintBox12: TPaintBox;
    PaintBox13: TPaintBox;
    PaintBox14: TPaintBox;
    PaintBox15: TPaintBox;
    PaintBox16: TPaintBox;
    PaintBox17: TPaintBox;
    PaintBox18: TPaintBox;
    PaintBox19: TPaintBox;
    PaintBox20: TPaintBox;
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Déclarations privées }
    procedure DoImageClick(Sender : TObject);
  public
    { Déclarations publiques }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

type
  TBlinker = record
    Image     : TPaintBox;
    State     : boolean;
    Enabled   : boolean;
    Frequency : integer;
    Tick      : integer;
  end;

var
  BlinkColors : array[boolean] of Integer = (clGreen, clLime);
  Blinkers    : array of TBlinker;

procedure TForm1.FormCreate(Sender: TObject);
var N : integer;
begin
  Randomize;
  SetLength(Blinkers, 20);
  For N := 0 to high(Blinkers) do
      with Blinkers[N] do begin
           state     := false;
           enabled   := true;
           Frequency := (N+1) shl 1;
           Tick      := 0;
           Image     := TPaintBox(FindComponent('PaintBox'+IntToStr(N+1)));
           Image.Tag := N;
           Image.OnClick := DoImageClick;
           Image.Hint    := 'F = '+inttostr(Frequency*Timer1.Interval)+' ms';
      end;
   Timer1.Interval := 10;
end;

procedure TForm1.DoImageClick(Sender : TObject);
begin
  with Blinkers[(sender as TPaintBox).Tag] do begin
       Enabled := not Enabled;
       State   := false;
       Tick    := 0;
       Image.Canvas.Brush.Color := BlinkColors[state];
       Image.Canvas.FillRect(Image.ClientRect);
  end;
end;


procedure TForm1.Timer1Timer(Sender: TObject);
var N : integer;
begin
   for N := 0 to High(Blinkers) do
      with Blinkers[N] do
        if Enabled then begin
           inc(Tick);
           if Tick >= Frequency then begin
              State := not State;
              Image.Canvas.Brush.Color := BlinkColors[state];
              Image.Canvas.FillRect(Image.ClientRect);
              Tick  := 0;
           end;
        end;
end;


end.

Commentaire de Francky23012301 le 19/12/2006 12:54:42

@f0xi : quitte à utiliser 20 TPainBox autant les créer dynamiquement (idem pour le timer) non ?

Commentaire de Jean_Jean le 19/12/2006 13:14:12

Vive la jeunesse!
J’aimerai avoir 20 ans de moins et avoir plus de temps. Changer d’activité et reprendre une spécialisation de 3ème cycle à 50 balais!…Pas évident, mais j’ai l’enthousiasme d’un jeune de 20 ans dans tout ce que je fais. Alors merci à tous!

Je me doutai bien que mon code ferait bondir les pros ! J’ai un tas de code en attente, mais si je ne publie pas, je ne vais pas progresser. Par exemple, j’étais gêné d’utiliser 2 timers pour 1 clignotant, mais mon souci 1er était ailleurs!

Délibérément, je n’ai pas voulu me lancer dans la conception d’un composant car je n’arrive pas à les installer. De plus, avec la migration de D5 à D7, j’ai perdu tout le travail que j’avais fait en composants !…. Borland ne m’a pas renvoyé mon code d’utilisateur de delphi 7 (je leur ai envoyé pourtant le n° de série). Donc, j’attends de normaliser et clarifier mon installation de Delphi, avant de gérer à nouveau : Composants et Bases de données.

Florenth, OK. Je vais peut-être créé un Objet Clignotant plutot qu’un composant ? ça reviendra au même, non ?
Foxi, OK. Je vais tester ta solution. Y a t-il une raison pour que tu choisisses PaintBox au lieu de Image ?
Francky, OK!

Bien à vous !

Commentaire de Jean_Jean le 19/12/2006 18:08:54

Merci Florenth :)
J'ai d'autres priorités! il faut que je clarifie chez Borland. En fermant mon entreprise, je suis passé de 4 à 1 ordinateur. ça pas été sans problème!
Je remettrai tout nickel un peu plus tard!

Mais ça fait plaisir de voir que je fais un peu parti de la communauté des delphim'ans et qu'elle vit bien au travers de ce site. J'ai plein de choses à donner, mais faut pas pousser mémé, sinon, je panique!!!

Je connais la procédure pour créer 1 Compo... On verra plus tard! Je travaille sur un compte utilisateur. c'est peut-être ça le bug car j'ai installé D7 sur le Compte Admi.

Pour l'appli,
Je vais essayer de créer un Objet Led et tenir compte de vos remarques. après réflexion, ça pourrait être intéressant. Je posterai une nouvelle version, quand je sentirai que je suis bloqué pour optimiser plus!

A +

Commentaire de japee le 19/12/2006 22:41:10 administrateur CS

Salut Jean_Jean,

Ben c'est plutôt sympa, pour un premier envoi.
Il est certain qu'il y a moyen d'optimiser, et je vais y aller moi aussi de ma petite suggestion.
Tiens, comme ça, par exemple, pourquoi ne pas l'écrire ainsi :

procedure TForm1.Eteint_Voyants(aNumThrd : Byte);
  Var i : Byte;
begin
  FicVoy := Rep+'LEDoff.bmp';
  for i := ((aNumThrd - 1) * 7) + 1 to aNumThrd * 7 do
    if Assigned(FindComponent('Image' + IntToStr(i))) then
      TImage(FindComponent('Image' + IntToStr(i))).Picture.LoadFromFile(FicVoy);
end;

On gagne quelques lignes de code, et c'est plus rigolo.
Car la programmation, faut que ça reste rigolo, telle est ma devise.

Florenth a dit :
"Qu'est ce qu'on s'embetterait si tous les codes du site étaient de la pure merveille, prêt-à-l-emploi ou encore z-avez-qu-a-le-déposer-sur-la-fiche ..."

Je suis entièrement d'accord avec lui.
Et, oserai-je ajouter, on s'emmerderait grave...

Bonne continuation à tous.

japee

Commentaire de Jean_Jean le 19/12/2006 23:57:14

Ha oui, merci Japee!

Bonne idée. Je corrige tout de suite.
j'étais justement en train d'adapter ton code sur la création dynamique à l'appli

:)@+

Commentaire de f0xi le 20/12/2006 00:27:59 administrateur CS

salut les zoulous!

@francky :

mon but premier n'etait pas de dynamisé les compos de la fiche mais de montrer ce qu'on pouvait faire avec 3 procedure et un seul timer (toute les paintbox clignote a leurs propre frequence).

@jeanjean :

pour les compos, y'a que l'embaras du choix, soit on part d'une classe TGraphicControl, soit d'un RadioButton ou encore un TRadioGroup etc....
comme je disais a je sais plus qui y'a pas longtemps, quand on commence a avoir des tonnes de lignes de codes redondante ... il faut se demander si il n'y a pas un chemin plus cours.

Pour ce qui est des pertes de compos, y'a une astuce simple, tu crée un dossier "delphi" sur une partition ou disque different du C:.
avec comme sous repertoire : Delphi\Lib et Delphi\Projects
ce qui permet, en cas de reinstallation de Delphi ou du systeme ou de formatage du disque C: de ne rien perdre.
on peu d'ailleur faire pareil avec le dossier "mes documents", on peu le placer ailleur que sur  C: (click droit sur "Mes documents" > propriétés > onglet cible > deplacer)


Commentaire de Jean_Jean le 20/12/2006 08:44:18

Oui, merci Francky

OK pour tout.

1. Pour la gestion de mes sources,j'ai perdu des mois de boulot sur certains codes suite à un Pb de hard! Je suis en train d'installer un disque de sauvegarde externe.

2. j'ai testé ton code,c'est OK. Je suis en train de l'adapter. Je pense que je vais procéder en plusieurs étapes. La création d'un composant suggérée par Florenth est une bonne idée que j'exploiterai plus tard. Voilà pour l'heure les  types que j'ai créés pour l'instant :

  {fiche----------------------------------}
  TFormBlinker = class(TForm)
    Timer1: TTimer;
    ImageList1: TImageList;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Déclarations privées }
    procedure DoImageClick(Sender : TObject);
    procedure Libere_Les_Leds;
  public
    { Déclarations publiques }
  end;

  {Voyant ----------------------------------}
  TBlinker = record
    Image     : TImage;
    State     : boolean;
    Enabled   : boolean;
    Frequency : integer;
    Tick      : integer;
  end;

  {Classe Led  -----------------------------}
  TLedBlink = class(TImage) // classe héritant de TPaintBox
  public
    constructor Create(aLed : TComponent); override;
    procedure   aLedClick(Sender : TObject);
  end;

Const
  NledProcess = 7;
  NProcess    = 4;
Var
  FormBlinker : TFormBlinker;
  BlinkColors : array[boolean] of Integer = (clGreen, clLime);
  Blinkers    : array of TBlinker;
  NbreLeds    : Integer;  // compte les voyants créés
  aLedblink   : TLedBlink;

3. J'ai préféré un TImage pour Image, car je n'arrive pas à affecter une image bmp existente de manière dynamique à un PaintBox.

4. D'ailleurs ça bug toujours dans la procédure Timer1Timer. Les images ne clignotent pas et s'effacent. Je vais m'y pencher un peu aujourd'hui.

    if Tick >= Frequency then
    begin
      State := not State;
      if State then
      begin
        ImageList1.GetBitmap(0,TImage(FindComponent('Image'+IntToStr(N+1))).Picture.Bitmap);
        TImage(FindComponent('Image'+IntToStr(N+1))).Refresh;
      end else
      begin
        ImageList1.GetBitmap(1,TImage(FindComponent('Image'+IntToStr(N+1))).Picture.Bitmap);
        TImage(FindComponent('Image'+IntToStr(N+1))).Refresh;
      end;
...

Commentaire de Jean_Jean le 20/12/2006 09:01:21

Autant pour Moi!

La procédur Timer1Timer fonctionne, j'avais résolu le Pb!

:)

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Timer dans Thread [ par Jean_Jean ] Bonjour, Je me pose une question sur l'optimisation du temps d'exécution d'une application. Sur la fenêtre principale j'ai divers voyants témoins code assembleur - timer [ par tim62 ] Bonjour, Je sollicite l'aide des programmeurs de Delphi pour le problème suivant : J'utilisais la fonction int 1ah permettant d'accéder à l'horloge une requete sous un timer [ par zeydounnounou ] Bonjour, Mon problème est le suivant : J'ai mis une requete SQL sous un Timer,C a dire, chaque seconde par exemple, j'execute ma requete, le probleme Timer connexion server problème mémoire [ par attilalehuns ] Bonjour, Je tente de me connecter avec mon serveur depuis le client à l'aide d'un timer dans le quel j'ai mis ce code: [code=pas]if Clientsocket1 Detecter les clics de souris n'importe ou dans windows [ par agentchico ] Bonjour, Je dois faire une procedure qui detecte les clics de souris afin d'incrementer un compteur. Seulement je dois detecter les clics n'importe o MDIform, evenement souris sur speedbutton, label etc... [ par jderf ] Bonjour, Il semblerai que les speedbutton ne fonctionne pas sur une MDIform. Les evenements souris autre que les clicks ne sont pas capté sur la fich Tframe et les evenements souris [ par jderf ] Bonsoir, Voila, j'ai un Frame sur ma forme principale. Dans ce frame j'ai des labels et je souhaite modifier leurs couleurs lors du survole de la sou Effet de loupe avec flash [ par johnlefou777 ] Bonjour, Je cherche a développer un "livre numérique" en flash, et j'aimerai avoir un effet de loupe sur la souris (elle devra zoomer l'image au TServerSocket ne réponds pas après 1 heure de temps [ par badyinfo ] Bonjour à tous, j'utilise une application émission (avec un TClientSocket) et une autre réception (Avec TServerSocket)... Au démarrage des deux appl


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,168 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales