Witam. Jest mi koniecznie potrzebna informacja jak zrobić efekt pisania tekstu w memo. Próbowałem z sleep ale nie działa. Chodzi mi dokładnie o to że po wciśnięciu buttona w memo co 200 milisekund będzie pojawiała się kolejna literka do tekstu aż utworzy całe zdanie. Proszę o pomoc. Chodzi o to że np. tekst "Ala ma kota" napiszę się literka po literce czyli "A", za 200 milisekund "l" itd. Tak jakbym ten tekst pisał ja na klawiaturze.
Pokaż, jak robisz to ze sleep.
Moja propozycja:
Const Tekst = 'Hello World!';
Var I: Integer;
Begin
For I := 1 To Length(Tekst) Do
Begin
Memo.Text := Memo.Text+Tekst[I];
Sleep(200);
Application.ProcessMessages;
End;
End;
Z sleep robiłem tak:
1 sposób:
Po wciśnięciu przycisku uruchamiał się timer1 ustawiony na 500 ms.
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Memo1.Lines.Text :='U';
sleep(500);
Memo1.Lines.Text := Memo1.Lines.Text + 's';
sleep(500);
Memo1.Lines.Text := Memo1.Lines.Text + 'u';
sleep(500);
Memo1.Lines.Text := Memo1.Lines.Text + 'ń';
sleep(500);
Timer1.Enabled :=False;
end;
Tutaj błąd jest taki że tekst po 500ms wyświetla się cały a nie piszę.
2 sposób:
Po wciśnięciu przycisku uruchamiał się timer1 ustawiony na 500 ms.
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Memo1.Lines.Add('U');
sleep(500);
Memo1.Lines.Add('s');
sleep(500);
Memo1.Lines.Add('u');
sleep(500);
Memo1.Lines.Add('ń');
sleep(500);
Timer1.Enabled :=False;
end;
Tutaj tekst wpisywał się literka po literce lecz błąd był taki że po każdej literce był wciśnięty ENTER i następna literka była w nowej linijce.
Za chwilę sprawdzę twój sposób.
20:26
Dzięki, twój sposób działa! Masz u mnie wielkiego plusa! Dziękuje!
Sposób Patryk27 działa lecz po przekroczeniu 255 znaków występuje błąd, mogę wiedzieć jak zrobić aby pisało więcej niż 255 znaków lub jak połączyć te dwie funkcje aby druga włączała się po tej pierwszej i dopisywała następne 255 znaków?
Możesz skorzystać z tablicy dynamicznej, PChar lub zamiast string użyć WideString (~2^30 znaków)
Można też tak.
procedure TForm1.Timer1OnTime(Sender: TObject);
const Tekst = 'Hello World';
begin
if I < Length(Tekst) then
begin
Memo1.Text := Copy(Tekst, 1, Timer1.Tag+1);
Timer1.Tag := Timer1.Tag + 1;
end;
end;