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

Langage Delphi Discussion :

Comment faire un scroll de texte...


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 111
    Points : 49
    Points
    49
    Par défaut Comment faire un scroll de texte...
    Comment faire un scroll de texte fluide à 100% qui ne saccade pas?
    Quel Timer utiliser et quel composant graphique?

  2. #2
    Membre éprouvé Avatar de Caine
    Inscrit en
    Mai 2004
    Messages
    1 028
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 028
    Points : 1 122
    Points
    1 122
    Par défaut
    Bonjour,

    Je dirais un TImage avec un dessin du texte par DraText ou TextOut. La propriétée DoubleBuffering doit être à true.

  3. #3
    Membre chevronné
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Points : 1 975
    Points
    1 975
    Par défaut
    oui ou l'équivalent: incrémenter(x,y) d'un textout contenu dans le caneva d'un bitmap par un événement ontimer et faire un draw dans une paintbox sur la fiche . Utilise un intervalle timer assez court pour éviter le scintillement. principe d'une animation simple...

  4. #4
    Membre chevronné
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Points : 1 975
    Points
    1 975
    Par défaut
    tiens, vite fait:
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls;
     
    type
      TForm1 = class(TForm)
        Timer1: TTimer;
        PaintBox1: TPaintBox;
        procedure FormCreate(Sender: TObject);
        procedure Timer1Timer(Sender: TObject);
        procedure PaintBox1Paint(Sender: TObject);
      private
        { Déclarations privées }
         y:integer;
        BITMAP:Tbitmap;
     
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    timer1.Interval:=10;
    bitmap:=Tbitmap.create;
    with bitmap do begin
    width:=Paintbox1.width;
    height:=paintbox1.Height;
    end;
    end;
     
    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
    inc(y);
    bitmap.canvas.TextOut(100,y,'salut');
    paintbox1.Canvas.Draw(0,0,bitmap);
    end;
     
    procedure TForm1.PaintBox1Paint(Sender: TObject);
    begin
    paintbox1.Canvas.Draw(0,0,bitmap);
    end;
     
    end.

  5. #5
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 111
    Points : 49
    Points
    49
    Par défaut


    Ce que vous avez dit c juste mais sa saccade . Ce ke je veux faire c un scroll ki ne s'arrete jamais (comme les news bars de tv) c pas tellement facile ke vous croyez essayez et vous allez voir!

  6. #6
    Membre chevronné
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Points : 1 975
    Points
    1 975
    Par défaut
    je pige pas... tu veux que ça tourne en boucles ? Pour cela, il suffit d'une condition sur y en fin de paintbox. explique. si c'est ça, c'est facile comme tout...

  7. #7
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 111
    Points : 49
    Points
    49
    Par défaut
    c pas sa !!!
    Le probleme est le saccade.
    Le rolling fait parfois des pauses de milli millisecondes mais tu les remarke avec les yeux . Il faut ke tu le voit 100% fluides pas de perturbation.
    tu as compris?

  8. #8
    Membre chevronné
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Points : 1 975
    Points
    1 975
    Par défaut
    ok, j'avais pas remarqué...----> graphics 32 pour ton animation.

  9. #9
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 111
    Points : 49
    Points
    49
    Par défaut
    ok g utilisé gr32 avec une timer directx est c bon mais le probleme que le scroll commence a saccadé aprés klk minutes.
    Je doute kil ya un "reglage" dans le S.E windows ki force l'execution de l'application sans aucun interruption

  10. #10
    Membre chevronné
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Points : 1 975
    Points
    1 975
    Par défaut
    oui, une petite fonction api serait la bienvenue...

  11. #11
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 111
    Points : 49
    Points
    49
    Par défaut
    ta pa une idée?

  12. #12
    Membre chevronné
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Points : 1 975
    Points
    1 975
    Par défaut
    non désolé, tu as anticipé tout ce que ce que je pouvais proposer...
    là, je vois pas. ceci dit dans les routines d'écran de veille, je me souviens de bout de code qui forçait l'application à faire des poses. donc le contraire doit être possible...

  13. #13
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Bonjour,

    un code qui fonctionne bien, avec peut-être parfois un petit flicker que je n'arrive pas à éliminer.

    Dans la form timage1 est un enfant de Panel1

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
    unit Unit1;
    interface
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ComCtrls, OleCtrls, SHDocVw, Menus, ExtCtrls;
      type
      TForm1 = class(TForm)
        Timer1: TTimer;
        Panel1: TPanel;
        Image1: TImage;
        procedure FormCreate(Sender: TObject);
        procedure Timer1Timer(Sender: TObject);
      private
        { Private declarations }
        imagecount : integer ;
        procedure Drawimage(image:Timage;offset : integer);
        procedure InitImage(image:Timage);
      public
        { Public declarations }
      end;
    var
      Form1: TForm1;
    implementation
    {$R *.dfm}
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    Panel1.color:=clblack ;
    InitImage(image1) ;
    imagecount:=1 ;
    Timer1.Interval:=10 ;
    end;
     
    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
    timer1.Enabled:=false ;
    inc(imagecount) ;
    drawimage(image1,imagecount) ;
    timer1.Enabled:=true ;
    end;
     
    procedure TForm1.Drawimage(image:Timage;offset : integer);
    var i : integer ;
    begin
    for i:=1 to 100 do image1.canvas.textout(100*i-offset,10,'<'+inttostr(i)+'>') ;
    end ;
     
    procedure TForm1.InitImage(image:Timage);
    begin
    image.Top:=0 ; Image.left:=0 ; image.Width:=clientwidth ; image.Height:=40 ;
    image.canvas.brush.color:=clblack ;
    image.canvas.font.color:=clred ;
    image.canvas.font.size:=14 ;
    image.canvas.font.name:='Arial' ;
    image.ControlStyle:=[] ;
    image.canvas.fillrect(rect(0,0,image1.width,image1.height)) ;
    end ;
     
    end.
    [/quote]
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 82
    Points : 85
    Points
    85
    Par défaut
    ya le compo TScrollingCredits de Raoul Snyman qui marche à merveille,

    sinon ya aussi des compo dans la jvcl.

  15. #15
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Rebonjour,

    Pour éliminer le léger flicker, il suffit d'éxécuter à l'init l'instruction (merci à Caine )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    panel1.doublebuffered:=true ;
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  16. #16
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 111
    Points : 49
    Points
    49
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    panel1.doublebuffered:=true ;
    et si je ne dessine pas sur un panel comment on fait?et en plus keske sa veut dire ce doublebuffered?
    dans mon code j'ai un pointeur qui designe un buffer a kel j'envoie mon scroll . ya ti une methode de faire le double buffering?

  17. #17
    Membre chevronné
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Points : 1 975
    Points
    1 975
    Par défaut
    la méthode que je t'avais proposée te permet de dessiner dans un canvas virtuel celui d'un bitmap et d'afficher en une seule fois à l'aide du draw dans la paintbox. un buffer est une zone de mémoire tampon dédiée aux stockages de données en attente de traitement sur un périphérique.
    ton bitmap là joue bien le rôle d'un buffer en ce sens qu'il stocke ton code de défilement du textout sans jamais effectuer les calculs de déplacement à l'affichage. tu bascules dans le réel uniquement sur le draw.
    le doublebuffer à true fonctionne de la même manière, simplement tu n'as pas à créer ton buffer toi même.

  18. #18
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 111
    Points : 49
    Points
    49
    Par défaut
    J'ai conclus que la meilleur facon est de utiliser les composants gr32 mais reste un petit probleme: le faite de scroller une image de 300000*60 pixels provoke les scintillements
    ya til une idée pr resoudre ce probleme?
    eske win charge toute l'image au memoire?

Discussions similaires

  1. comment faire un editeur de texte ?
    Par marie18 dans le forum Débuter
    Réponses: 5
    Dernier message: 08/11/2008, 10h22
  2. Comment faire un scrolling?
    Par bogoss91 dans le forum SDL
    Réponses: 7
    Dernier message: 02/08/2007, 14h39
  3. [FPDF] Comment faire une zone de text délimité
    Par HwRZxLc4 dans le forum Bibliothèques et frameworks
    Réponses: 16
    Dernier message: 20/05/2007, 10h30
  4. Comment faire une balise <html:text> avec valeur dynamique
    Par chriscoolletoubibe dans le forum Struts 1
    Réponses: 13
    Dernier message: 14/05/2007, 22h13
  5. Comment faire des zones de texte sur image
    Par Myogtha dans le forum Général Conception Web
    Réponses: 3
    Dernier message: 12/03/2007, 15h27

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