Newsgroup: it.comp.lang.delphi
Titolo: Impostare un ritardo in un richedit

Ciao a tutti,
mi trovo alle prese nuovamente con delphi, all'interno di un richedit, devo 
simulare l'effetto macchina da scrivere, ovvero visualizzare un carattere 
alla volta di una stringa.
Per inserire una stringa uso qualcosa del tipo:
Form1.RichText.Lines.Add ('mia stringa');
Per fare in modo che venga visualizzato un carattere alla volta, e 
soprattutto con un ritardo di almeno 1 secondo l'uno dall'altro come dovrei 
procedere?
Grazie in anticipo,
Cooper.
PS: Pensavo a usare il delay, ma in delphi non c'è piu e quindi leggere un 
carattere alla volta posizionando il corsore nella posizione successiva di 
volta in volta... ma l'assenza del delay mi ha spiazzato un po. 

"Cooper"  ha scritto nel messaggio

Hai due possibilità:
1) Utilizzi una procedura, come le due seguenti:
Procedure Attendi (Sec: Integer);
var
 Tempo : TDateTime;
Begin
 tempo := Now;
 repeat
  Application.ProcessMessages; // permette all'applicazione di processare
altri messaggi
 until Tempo + Sec / (24*3600) < Now
end;
procedure Delay(MSec: Longint);
var
  TempoIniziale, Adesso: Longint;
begin
  TempoIniziale := GetTickCount;
  repeat
    Application.ProcessMessages; { come detto prima, permette l'accesso ad
altri controlli }
    Adesso := GetTickCount;
  until (Adesso - TempoIniziale >= MSec) or (Adesso < TempoIniziale);
end;
La procedura Attendi utilizza solo funzioni proprie di Delphi ed è meno
'precisa' della seconda, che permette invece di specificare il tempo in
millisecondi utilizzando l'API di Windows GetTickCount.
2) La seconda opportunità è quella di utilizzare la funzione Sleep dell'API
di Windows (oppure la più complessa SleepEx). Questa funzione blocca il
singolo thread per l'intervallo di tempo specificato. Esempio: Sleep(500)
blocca il thread per 500 millisecondi.
Ciao
ACSH
-- 
If you don't think carefully, you might think that programming is
just typing statements in a programming language.
(Ward Cunningham) 

 Hai due possibilità [...]
Secondo me, anche un Timer può essere sufficiente. :-|
Ciao,
   Marco.
-- 
MARCO BREVEGLIERI
  (
http://www.marco.breveglieri.name
)

Ok grazie ho risolto, fino a qui.
le ultime due cose che mi rimangono sono:
1) come faccio a far scomparire il cursore verticale lampeggiante della 
richedit che viene mostrato al termine della visualizzazione della stringa?
e infine:
2) ho impostato il colore di sfondo della richedit a nero, la barra 
verticale che compare quando il testo eccede le dimensioni della richedit ha 
sfondo grigio, come posso modificare tale colore facendolo diventare 
identico al colore di sfondo ovvero nero?
Grazie ancora.
Cooper.

 Secondo me, anche un Timer può essere sufficiente. :-|
Quindi di possibilità ne aveva tre!
Ma - quando posso - evito di usare gli oggetti (una tecnologia ormai
obsoleta, soppiantata da altre metodologie molto più efficienti e
funzionali).
Strumenti di programmazione moribondi come Delphi, purtroppo,
permettono ancora agli sviluppatori una simile libertà.
Che delusione!
(Sto studiando da "giornalista" per "Io Programmo": come vado?)
;-)
Ciao
ACSH
-- 
Sembra che certi giornalisti vedano il loro compito come il
tentativo di spiegare ad altri quello che loro stessi
non capiscono.
Markus M. Ronner

 identico al colore di sfondo ovvero nero?
AFAIK, non si puo'. Il messaggio da gestire per questa eventualità e'
WM_CTLCOLORSCROLLBAR, ma MSDN specifica che
"The WM_CTLCOLORSCROLLBAR message is used only by child scrollbar
controls. Scrollbars attached to a window (WS_SCROLL and
WS_VSCROLL) do not generate this message. To customize
the appearance of scrollbars attached to a window, use the flat
scroll bar functions."
Quindi ... la vedo dura.
Ciao
-- 
ACSH
[TurboDelphi]
Chi fa da se', fatica il doppio


Uhm, almeno si può nascondere, mantenendo lo stesso effetto di scorrimento? 
Andrebbe bene pure questa soluzione. Io ho provato a non farla visualizzare, 
però quando il testo supera la dimensione della finestra, quest'ultima non 
scrolla.... come risolvo?
Grazie ancora. 


Mmm niente da fare, ho provato ma il cursore (caret) continua a essere 
visibile? dove avrò sbagliato? io ho scritto:
   hidecaret(TextArea.Handle);
e ho provato anche con:
   hidecaret(form1.TextArea.Handle);
ma nessun risultato :(
Cooper. 

 (Sto studiando da "giornalista" per "Io Programmo": come vado?)
Tu stai andando bene, il problema è "Io programmo" che non è visto così
bene qui da noi delphisti in ufficio!
Hai visto l'ultimo numero, di novembre? Credo proprio di sì... anche perchè
hai virgolettato proprio il termine "moribondo".
Vedi, leggendo a pagina 72 la recensione di delphi... ci sono un pò troppe
forzature... ma non solo: alcuni miei colleghi mi hanno fatto notare come
la rivista sia troppo "spostata" verso soluzioni di mamma M$...!
Al di là di questo, sono contento per te: lo studio e la formazione
personale sono sempre utili e meritevoli e, sopratutto, ti fanno crescere
(professionalmente parlando ;-) ).
Ciao
-- 
Morde

Morde ha scritto:




Morde, stavo facendo del sarcasmo (proprio riferito a quella vicenda).
Non penserai davvero che io creda in quello che ho scritto? 
Guarda la citazione dopo la firma.
Ciao
ACSH
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Morde, stavo facendo del sarcasmo (proprio riferito a quella vicenda).
Effettivamente... non avevo proprio capito ;-) !!!
-- 
Morde

 ma nessun risultato :(
TextArea e' il richedit?
In quale evento hai provato ad inserire l'API? Direi che l'Onclick e'
l'ideale.


 scrolla.... come risolvo?
Vedi questa discussione;
http://groups.google.it/group/it.comp.lang.delphi/browse_thread/thread/251f4bd9f74f499e/f9db3c1db063706a?hl=it&lnk=st&q=acsh+richedit+scroll#f9db3c1db063706a
