Newsgroup: it.comp.lang.pascal
Titolo: la tastiera

aprite una finestra dos, e tenete premuta (senza mai rilasciarla) una 
qualunque lettera, ad esempio la A.
sullo schermo avrete questo :
C:\>A(a questo punto ci sarà una pausa)AAAAAAAAAAAAAAAAAAA................
noterete questo: tenendo premuta la A, senza mai rilasciarla, vedrete che 
tra la prima A che compare sullo schermo e le seguenti ci sarà una breve 
pausa all'incirca di qualche decimo di secondo. a cosa è dovuto questo ? è 
in gioco il buffer di tastiera ? cosa accade di preciso in quel momento di 
pausa ?
ho la necessità di scrivere un programma che prenda input da tasti che 
devono esser tenuti premuti, ma al tempo stesso devo fare in modo che quella 
breve pausa non ci sia, che quindi, tutti gli input arrivino al programma in 
tempo equo.
purtroppo con la readkey questo non succede... come posso fare per ottenere 
questo ?
è possibile agire da turbo pascal, magari con qualche TPU esterna, o devo 
necessariamente agire in qualche modo dal dos ?
se si come ?
grazie per la vostra attenzione, spero di esser stato chiaro... 

 questo ?
Strano, immagino che vuoi ottenere un tipo di feedback tipo quello dei
videogame. Io ho programmato in pascal eoni fa quindi i miei ricordi sono
un po' vaghi, se programmi in ambiente DOS potresti cercare quale sia la
chiamata del bios che setta quell'intervallo di delay di tastiera e magari
utilizzare le chiamata che gestisce la lettura da tastiera, se non ricordo
male però la readkey non era altro che una semplice interfaccia verso tale
chiamata  
Di più nin zo' , non ricordo
ciao
Alex
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

Il ritardo nella prima ripetizione di un tasto e' una caratteristica
inserita volutamente in una console a linea di comando per i motivi
spiegati da Alex, nel vecchio Dos si modificava (se ben ricordo) con
il comando Switches nel Config.sys, mentre in Windows credo da qualche
parte nel Pannello di Controllo sotto Tastiera.
Quello che ti serve per i tuoi scopi e' la funzione ReadKey della unit
Crt, la quale prende un carattere dal buffer della tastiera senza
introdurre nessun ritardo, l'input dipende cosi' solo da come viene
gestito nel tuo programma, che significa che devi porre attenzione a
invocare la ReadKey abbastanza spesso perche' i caratteri nel buffer
non vengano eliminati dalla pressione di quelli successivi. In questo
senso ti puo' essere utile anche la funzione KeyPressed che informa se
un tasto qualsiasi e' stato aggiunto nel buffer.
-- 
Omega e' omega e basta

 ha scritto nel messaggio 
news:aullu2led9tkusaqo...@4ax.com...


 videogame.
verissimo, infatti sto provando a scriverne uno con il turbo pascal.
pensa che è quasi tutto pronto, ma quella breve pausa è da rimuovere 
assolutamente, altrimenti il personaggio non può avere un movimento equo e 
fluido.

Ho scritto questo, nota che la Readkey di per se' non emette a video,
cosa che nell'esempio e' ottenuta tramite la Writeln. Inoltre non
gestisce i caratteri speciali (come le frecce), per farlo devi prima
controllare la presenza dell'extended character (che non ricordo quale
sia, ma nella documentazione del Turbo o Free Pascal puoi trovarlo).
Provalo, vedrai che anche tenendo premuto il tasto di una lettera
senza rilasciarlo non avrai nessun ritardo nella sequenza stampata.
program joyce;
uses crt;
var c:char;
begin
repeat
if keypressed then begin
c:=readkey;
writeln(c);
end;
until c='q';
end.
