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 62 63 64 65 66 67 68
|
{ AnimatedWrite
Ecrit un texte dans un TStrings avec une animation de type
machine à écrire.
Paramètres :
aStr [i] string, texte à écrire dans l'objet textuel.
aStrings [i] TStrings, destination (Memo.Lines, ListBox.Items etc).
aIndex [i] LongInt, index de la ligne ou commencer à ecrire
le texte, si -1 on ajoute une ligne a la fin (add) et
on ecrit à partir de cette dernière.
aSpeed [i] LongWord, vitesse d'écriture du texte, en millisecondes
(80 par défaut).
aStopPtr [i] PBoolean, pointeur sur un booléen qui permet d'arrêter
l'animation (true), peut être nil (pas de control
d'arrêt), false par défaut.
Si aStopPtr est définit et qu'elle mets fin à
l'animation, aStr sera assigné completement à la chaine
de destination.
Utilisation :
AnimatedWrite('Hello world !', Memo1.Lines);
AnimatedWrite('Hello world !', Memo1.Lines, 3, 160);
AnimatedWrite('Hello world !', Memo1.Lines, -1, 80, @StopAnim);
}
procedure AnimatedWrite(aStr: string; aStrings: TStrings; const aIndex: LongInt=-1; const aSpeed: LongWord=80; aStopPtr: PBoolean=nil);
var
N, IDX : LongInt;
S : String;
begin
if aIndex = -1 then
// si aIndex est égal à -1 on ajoute une ligne et
// on la choisi comme ligne ou il faut écrire
Idx := aStrings.Add('')
else
// sinon, on se référe à l'index passé en paramètre
Idx := aIndex;
for N := 1 to length(aStr) do
begin
// copie d'une partie de la chaine
S := Copy(aStr, 1, N);
// on assigne la chaine coupée avec un curseur _ ou | par exemple
aStrings[idx] := S + '_';
// on evite les freeze du au sleep ... ^_^
// ça empeche les surprises avec le mister freeze dans le sleep ... hahaha
Application.ProcessMessages;
// hum hum ... on attend un peu ...
Sleep(aSpeed);
// on assigne la chaine coupée sans le curseur ... houuu!
aStrings[idx] := S;
// on gère la sortie si necessaire
if aStopPtr <> nil then
if aStopPtr^ then
begin
// quand on stop, on affiche la chaine complète
aStrings[idx] := aStr;
// et on sort
exit;
end;
end;
end; |
Partager