Aide svp _afficher un texte lettre par lettre dans un textbox

Signaler
Messages postés
295
Date d'inscription
vendredi 20 décembre 2002
Statut
Membre
Dernière intervention
24 janvier 2014
-
Messages postés
420
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
-
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 ...

10 réponses

Messages postés
295
Date d'inscription
vendredi 20 décembre 2002
Statut
Membre
Dernière intervention
24 janvier 2014
1
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;
Messages postés
4715
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
12
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
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
Salut,

Si je peux me permettre cher Cantador :

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




Simon
Messages postés
4715
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
12
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
Messages postés
4715
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
12
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
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
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
Messages postés
4715
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
12
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

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.
Messages postés
4715
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
12
attention toutefois à ne pas déclarer la même variable en globale et locale..


cantador
Messages postés
420
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
15
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.