Aide svp _afficher un texte lettre par lettre dans un textbox

Messages postés
295
Date d'inscription
vendredi 20 décembre 2002
Statut
Membre
Dernière intervention
24 janvier 2014
- - Dernière réponse : korgis
Messages postés
420
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
- 10 nov. 2012 à 21:08
bonjour ,
je bataille beaucoup ces jours-ci pour faire quelque chose de très simple

j'aimerais afficher un texte lettre par lettre toute les 100 ms dans une textbox (ou un label )

(c'est à dire que le texte apparaisse comme si quelqu'un le tape au clavier )


tout ce que j'ai tenté jusque là a foiré misérablement ou bien mange trop de charge cpu , donc je demande un peu d'aide ,

si quelqu'un peut m'aider

snifff ...
Afficher la suite 

10 réponses

Messages postés
295
Date d'inscription
vendredi 20 décembre 2002
Statut
Membre
Dernière intervention
24 janvier 2014
1
0
Merci
c'est bon j'ai trouvé !!!!!!!!!

procedure TForm1.Timer1Timer(Sender: TObject);

begin


Li := Length(Edit1.Text); {Taille du texte}


i:=i+1;
if i=Li then
begin
i:=0;
Edit2.Clear;

end;


Edit2.Text := Edit2.Text + (Edit1.Text[i]) ;


end;
Commenter la réponse de soldier8514
Messages postés
4992
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
9
0
Merci
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Edit1: TEdit;
    Edit2: TEdit;
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Déclarations privées }
    function WriteInMilli(str: string; MyTimer: integer): string;
  public
    { Déclarations publiques }
  end;

var
  Form1: TForm1;
  pas: integer;

implementation

{$R *.dfm}

function TForm1.WriteInMilli(str: string; MyTimer: integer): string;
begin
  Timer1.Interval := MyTimer;
  Edit2.text := form1.Edit2.text + copy(Str, pas, 1);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Inc(pas);
  WriteInMilli('Ma grand mère fait du vélo..', 100);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Edit2.Clear;
end;

end.




cantador
Commenter la réponse de cs_cantador
Messages postés
1293
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
9
0
Merci
Salut,

Si je peux me permettre cher Cantador :

procedure TForm1.FormCreate(Sender: TObject);
begin
  pas := 0;
  Edit2.Clear;
end;




Simon
Commenter la réponse de sp40
Messages postés
4992
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
9
0
Merci
Non, cher simonpelloquin..

La variable pas est globale.
Elle est donc initialisée automatiquement à zéro.

Ce sont les variables locales qu'il faut mettre à zéro..

cantador
Commenter la réponse de cs_cantador
Messages postés
4992
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
9
0
Merci
un peu de nettoyage..

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Edit2: TEdit;
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Déclarations privées }
    function WriteInMilli(str: string; MyTimer: integer): string;
  public
    { Déclarations publiques }
  end;

var
  Form1: TForm1;
  pas: integer;

implementation

{$R *.dfm}

function TForm1.WriteInMilli(str: string; MyTimer: integer): string;
begin
  Timer1.Interval := MyTimer;
  Edit2.text := Edit2.text + copy(Str, pas, 1);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Inc(pas);
  WriteInMilli('Ma grand mère fait du vélo..', 100);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Edit2.Clear;
end;

end.




cantador
Commenter la réponse de cs_cantador
Messages postés
1293
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
9
0
Merci
Désolé dans ce cas pour ma remarque inappropriée...
Je l'ignorais. En est il de même pour les variable privées et publiques ?

Simon
Commenter la réponse de sp40
Messages postés
4992
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
9
0
Merci
Bonsoir,

Oui, de même.
privées et publiques ne change rien à l'affaire.
tu peux d'ailleurs faire l'expérience et déplacer la variable pas..

c'est une question de visibilité pour ces deux rubriques.

en gros et très simplifié :
private ne concerne que l'unité
public concerne l'ensemble du projet

même chose pour les procédures et fonctions.

cantador
Commenter la réponse de cs_cantador
0
Merci
En même temps initialiser une variable globale ca ne mange pas de pain. Je me demande même si delphi ne dégage pas les déclarations lors de la compilation sauf si l'initialisation est faite avec une valeur autre que celle par défaut.
Commenter la réponse de Utilisateur anonyme
Messages postés
4992
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
9
0
Merci
attention toutefois à ne pas déclarer la même variable en globale et locale..


cantador
Commenter la réponse de cs_cantador
Messages postés
420
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
15
0
Merci
Salut,

On peut obtenir un effet intéressant en ajoutant de manière alternative les caractères "_" et "|" après l'apparition de chaque caractère. J'avais vu cet effet je ne sais plus où sur une page web, c'est pas mal du tout.
On peut également varier à chaque fois et de manière aléatoire l'intervalle du timer (entre 80 et 130 par exemple) pour plus de naturel, la saisie humaine n'étant aussi régulière que notre TTimer (qui lui même... mais bon, c'est un autre sujet).
Si le sujet intéresse encore soldier8514, j'envoie un bout de code de démo.

JP.
Commenter la réponse de korgis