Défilement d'un texte sous forme d'image sur un afficheur à leds

Soyez le premier à donner votre avis sur cette source.

Vue 6 770 fois - Téléchargée 900 fois

Description

cette source qui est non achevée encore, consiste à faire défiler un texte sur un afficheur (Journal lumineux), en utilisant ScanLine et un tableau Multidimensionnel.
L Affichage supporte tout genre d'écriture texte (Chinois, Hindi, Arabe, Latin...) puisque en convertis le texte écrit en image, pas besoin de code ASCII.
Portes ouvertes sur les critiques et les améliorations merci de laisser une note ou un commentaire ;-)

Source / Exemple :


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, ComCtrls, Buttons, ExtDlgs, Spin;
Const
      FLedOn   = ClLIme;  //  LED ON de Couleur Lime
      FledOff  = ClGray;  // LED OFF de Couleur Gray
type
  TForm1 = class(TForm)
    SEND: TButton;
    Image1: TImage;
    Memo1: TMemo;
    Timer1: TTimer;
    Edit1: TEdit;  // Champs de Texte à faire déffiler
    procedure SENDClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Edit1Change(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    
  private
    { Déclarations privées }
 
  public
    { Déclarations publiques }

  end;

var
   Form1: TForm1;
   Bitmap:TBitmap;
   FLED : TCOLOR;
   S: String;   //:= les lignes pour Memo1
   D:Integer;   // := Saut de Colonnes
   P: PbyteArray; // := le Scanline
   Tbl: Array Of Array of Integer;  //:= les ligne du Memo1
  implementation

{$R *.dfm}

procedure TForm1.SENDClick(Sender: TObject);
Var
X,Y,Z,N,K,Line: INTEGER;
begin
Bitmap := TBitmap.create;
//Initialisation de image1
Image1.Picture := Nil;
S:= '';

//*************************************//
// ** Exportation du Text vers Image**//
//************************************//

Image1.Width := (Length(Edit1.Text)*5)+1;
Image1.Canvas.TextOut(0,0,Edit1.Text) ;

// Bloc Try ***** Finaly **//

  try
     Bitmap.Height := Image1.Height -1 ;
     Bitmap.Width := Image1.Width ;

     //**** Bitmap := Le contenu de l'Image1***//

     Bitmap.Assign(Image1.Picture);

     // Scan l'Image (X,Y [Height et Width]) **

     for Y := 0 to Bitmap.Height-1 do
     Begin
      P := Bitmap.ScanLine[Y];
      for X := 0 to Bitmap.Width-1 do
          P[Y] := X;
     end;

     // Deux Boucles Pour Extraire la Couleur Diff de Blache

    For Z:=0 To Bitmap.Width -1 do
      For N:=2 To (Bitmap.Height-11)  do
       Begin
        FLED:= BItmap.Canvas.Pixels [Z,N];
        If FLED <> ClWHite Then  // SI la Couleur est <> Blanc S:= 1
         S := S +'1'
        Else
         S := S +'0';  // Sinon S:= 0
         If Length(S) = 12 Then
         // Chaque ligne du memo1 recevra une chaine S (String) ayant length de 12
          Begin
           Memo1.Lines.Add(S);
           // initialisation de S
           S := '';
           end;
       end;
  finally
    Bitmap.free;
 end;
// une boucle pour effacer les 00 inutiles = plus de six (06) lignes de 00 effacer
//le reste des Memo.Lines 
K:=0;
For Line := 0 To Memo1.Lines.Count -1 do
 Begin
  If Memo1.Lines[Line]='000000000000' Then
   K:=K+1
  else K := 0;
While (K = 6) And (Memo1.Lines[Line]='000000000000') do
   Memo1.Lines.Delete(Line);
end;
Timer1.Enabled := True;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
Var H,J,F : Integer;
begin
//Boucle pour déterminer le saut de colonnes
While D<J Do Begin
// Boucle pour affecter l'image en 1 et 0 au tableau TBL (Array of array qui a les dim:[J,H])
For J:= 1 to Memo1.Lines.Count -1  do
 begin
 For H := 0 to 11 do
   Begin
   //Dim du tableau TBL
     SetLength(Tbl,Memo1.Lines.Count,12);
    If Memo1.Lines [J]<>'' Then
      Begin
       Tbl[J,H]:= StrToINT(Copy(Memo1.Lines[J],H,1));
       // Variable qui recevra l'emplacement [J,H] soit un 1 ou un 0
       F:= Tbl[J,H];
       //Si F := 0 donc la LED est OFF
       If F=0 Then
         FLED:= FLedOff
       else // Sinon la LED est ON
       FLED := FLEDON; // FLED variable TCOLOR

       // Dessin de la Grille à LED et le déffilement en fonction de la Variable D
        
       Canvas.Pixels[((1+J)-D)*5, (10+H)*5]:= FLED;
       Canvas.Pixels[Succ(((1+J)-D)*5), Succ((10+H)*5)]:= FLED;
       Canvas.Pixels[Succ(Succ(((1+J)-D)*5)), Succ(Succ((10+H)*5))]:= FLED;
       Canvas.Pixels[((3+J)-D)*5, (10+H)*5]:= FLEDOFF;
       Canvas.Pixels[Succ(((3+J)-D)*5), Succ((10+H)*5)]:= FLEDOFF;
       Canvas.Pixels[Succ(Succ(((3+J)-D)*5)), Succ(Succ((10+H)*5))]:= FLEDOFF;
      end ;
   end;
 end;
 ////  La variable D est pour déterminer le saut de colonne
 D:=D+2; end; If D >= J Then D:=0;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Edit1.Text :='Tapez Votre Journal ici !';
MEMO1.Clear ;
D:=0;
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin
Timer1.Enabled := False;
Memo1.Clear;
S:= '';
end;

end.

Conclusion :


à vous !

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

DRAGADELPHI
Messages postés
11
Date d'inscription
samedi 29 mai 2010
Statut
Membre
Dernière intervention
25 juin 2010

salut zwail1
j'ai bien tester votre truc je trouve que:
1- c'est trop lent vue que ton principal code est totalement injecté dans le timer.
2- trop de variables inutiles.
3- je ne vois pas où est l'utilité de toutes les Successions (trop de succ).
mais l'idée reste bien, tant que sa peut être améliorée par des pros
ok je te donne un 4
dido888
Messages postés
3
Date d'inscription
dimanche 1 novembre 2009
Statut
Membre
Dernière intervention
1 novembre 2009

j'aime bien les effets comme sa :)
Aller 1 peux plus de développement :p
zwail1
Messages postés
17
Date d'inscription
vendredi 27 juin 2008
Statut
Membre
Dernière intervention
3 décembre 2010

salut les internautes !
n'oubliez pas de laisser une note ou commentaire sur la source !
merci
zwail1
Messages postés
17
Date d'inscription
vendredi 27 juin 2008
Statut
Membre
Dernière intervention
3 décembre 2010

Salut
J'espérais avoir des commentaires ou des recommandations sur cette sources, car j'arrive pas à l'achever! mais je vois qu'elle n'inspire personne
dommage et désolé !
zwail1
Messages postés
17
Date d'inscription
vendredi 27 juin 2008
Statut
Membre
Dernière intervention
3 décembre 2010

Jean_Jean!
j'espère que je me suis bien exprimé !!

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.