Défiler un texte sous dorme de pixel

Résolu
cs_lusitano69 Messages postés 21 Date d'inscription mardi 10 octobre 2006 Statut Membre Dernière intervention 26 février 2008 - 20 févr. 2008 à 13:39
cs_lusitano69 Messages postés 21 Date d'inscription mardi 10 octobre 2006 Statut Membre Dernière intervention 26 février 2008 - 20 févr. 2008 à 15:07
Bonjour voici mon probléme j essaye de faire une sorte de affichage de texte en Leds. Le probléme pour tester c est que j arrive pas a faire défiler une lettre qui est déssiner sur une image en forme de "pixels grossi"(des petits carré)" voici mon code. Merci

...
var
  Form1: TForm1;
  tab : array[0..11,0..11] of integer;
implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
  timer1.Enabled := true;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
const largeur = 10;
      hauteur= 10;

      sup_x = 2;
      sup_y = 2;
      inf_x = 8;
      inf_y = 8;

var i,j:integer;
begin
  //Remplis l'image en noir
  Image1.Canvas.Brush.Color:= clBlack;
  Image1.Canvas.Rectangle(0,0,Image1.Width,Image1.Height);

  //Remplis tous les pixels en purple
  for j:=0 to Image1.Height div hauteur do
  begin
    for i:=0 to Image1.Width  div largeur  do
    begin
     Image1.Canvas.Brush.Color:= clGray;
     Image1.Canvas.Rectangle(sup_x+i*largeur,sup_y,inf_x+i*largeur,inf_y);
     Image1.Canvas.Rectangle(sup_x+i*largeur,sup_y+j*hauteur,inf_x+i*largeur,inf_y+j*hauteur);
    end;
  end;

  tab[1,5]:= 1;
  tab[2,3]:= 1;
  tab[2,4]:= 1;   // Exemple pour un 'T' minuscule -> t
  tab[2,5]:= 1;
  tab[2,6]:= 1;
  tab[2,7]:= 1;
  tab[2,8]:= 1;
  tab[2,9]:= 1;
  tab[2,10]:= 1;
  tab[2,11]:= 1;
  tab[3,5]:= 1;

  //Affichage du tableau
  for i:=0 to 11 do
  begin
      for j:=0 to 11 do
      begin
           if (tab[i,j] = 1) then
           begin
              Image1.Canvas.Brush.Color:= clFuchsia;
              Image1.Canvas.Rectangle(sup_x+i*largeur,sup_y+j*hauteur,inf_x+i*largeur,inf_y+j*hauteur);
           end;
      end;
  end;
end;

end.

7 réponses

Utilisateur anonyme
20 févr. 2008 à 14:28
Salut

Tiens

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Image1: TImage;
    Button1: TButton;
    Timer1: TTimer;
    procedure Button1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;

var
  Form1: TForm1;
  tab : array[0..11,0..11] of integer;
  IndexPosLeft,IndexPosTop:integer;
  i,j:integer;

const

  sup_x = 2;
  sup_y = 2;
  inf_x = 8;
  inf_y = 8;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
Begin
  tab[1,5]:= 1;
  tab[2,3]:= 1;
  tab[2,4]:= 1;   // Exemple pour un 'T' minuscule -> t
  tab[2,5]:= 1;
  tab[2,6]:= 1;
  tab[2,7]:= 1;
  tab[2,8]:= 1;
  tab[2,9]:= 1;
  tab[2,10]:= 1;
  tab[2,11]:= 1;
  tab[3,5]:= 1;
  IndexPosLeft:=0;
  IndexPosTop:=0;
  timer1.Enabled := true;
End;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
//Remplis l'image en noir
  Image1.Canvas.Brush.Color:= clBlack;
  Image1.Canvas.Rectangle(0,0,Image1.Width,Image1.Height);

  //Remplis tous les pixels en purple
  for j:=0 to Image1.Height div 10 do
  begin
    for i:=0 to Image1.Width  div 10  do
    begin
     Image1.Canvas.Brush.Color:= clGray;
     Image1.Canvas.Rectangle(sup_x+i*10,sup_y,inf_x+i*10,inf_y);
     Image1.Canvas.Rectangle(sup_x+i*10,sup_y+j*10,inf_x+i*10,inf_y+j*10);
    end;
  end;
  //Affichage du tableau
  for i:=0 to 11 do
  begin
      for j:=0 to 11 do
      begin
           if (tab[i,j] = 1) then
           begin
              Image1.Canvas.Brush.Color:= clFuchsia;
              Image1.Canvas.Rectangle(sup_x+i*10+IndexPosLeft,sup_y+j*10+IndexPosTop,inf_x+i*10+IndexPosLeft,inf_y+j*10+IndexPosTop);
           end;
      end;
  end;
  Inc(IndexPosTop);
  Inc(IndexPosLeft);
end;
3
Utilisateur anonyme
20 févr. 2008 à 14:29
Désolé pour l'indentation c'est le site, oublie pas le double tampon pour le TImage sinon ca scintille.

Ps : Tu peux améliorer ca avec ScanLine
3
cs_lusitano69 Messages postés 21 Date d'inscription mardi 10 octobre 2006 Statut Membre Dernière intervention 26 février 2008
20 févr. 2008 à 14:35
Salut merci pour ta réponse rapide. J'ai essayé ton code mais le problème maintenant c'est que tu le fait défiler en diagonal. Moi je voudrais  qu'il défile de gauche à droite.
3
Utilisateur anonyme
20 févr. 2008 à 14:42
Ben c'est ce qu'induisait le code que tu as passé : un déplacement en diagonal.

Image1.Canvas.Rectangle(sup_x+i*10+IndexPosLeft,sup_y+j*10,inf_x+i*10+IndexPosLeft,inf_y+j*10);

Voila un déplacement de gauche à droite : tu peux supprimer tous ce qui concerne  IndexPosTop
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_lusitano69 Messages postés 21 Date d'inscription mardi 10 octobre 2006 Statut Membre Dernière intervention 26 février 2008
20 févr. 2008 à 14:51
Merci beaucoup mais je voulais savoir pourquoi tu as div par 10 dans les deux boucles? C'est ça que j ai pas très bien compris.

Prochaine étape que je dois réaliser:
-faire que le texte défile en boucle. mais je pense que c'est facil avec un simple test
3
Utilisateur anonyme
20 févr. 2008 à 15:00
Tu es sur que c'est toi qui a fait le code que tu as posté dans ton premier message ?

  for j:= 0 to Image1.Height div hauteur do
  begin
    for i: =0 to Image1.Width  div largeur   do

Hauteur est une constante qui est égale à 10

Autant faire ca alors

  for j: =0 to Image1.Height div 10 do
  begin
    for i:=0 to Image1.Width  div 10  do
0
cs_lusitano69 Messages postés 21 Date d'inscription mardi 10 octobre 2006 Statut Membre Dernière intervention 26 février 2008
20 févr. 2008 à 15:07
J'avais pas vu que t avais enlever c'est deux constantes quand tu as refet le code..lol sorry.
Bon je vais voir mainteant pour qu'il défile en boucle
0
Rejoignez-nous