View Full Version : Keypressed u Turbo Pascalu
nologo385
26.06.2003., 14:44
Može mala pomoć.
Želim napisati jedan banalan programčić od kojih 200-300 redaka, pa sam se eto odlučio za TP.
Problem je sljedeći.
Funkcija keypressed trebala bi biti boolean koji je TRUE kada je tipka stisnuta i FALSE kada nije.
Međutim, u mojem slučaju (Windows XP) nakon što se prvi puta promjeni u TRUE, nakon otpuštanja tipke više se ne vraća na FALSE.
Tražio sam po Internetu i neki su kao rješenje davali nanovo ispisanu funkciju u assembleru, koja, naravno kod mene ne radi.
Ima li tko kakvih iskustava s tim i želi pomoći?
Kad vrtis petlju i na kraju koje ispitujes je li neka tipka bila pritisnuta, negdje unutar te petlje ti pritisnes tipku, funkcija KeyPressed vrati True, ali ne skine pritisnutu tipku iz tipkovnickog buffera i zbog toga svaki sljedeci poziv funkcije KeyPressed takodjer vraca True jer reagira na onu prije pritisnutu tipku. Rjesenje je maknuti pritisnutu tipku iz tipkovnickog buffera - recimo, pomocu funkcije ReadKey.
uses Crt;
begin
repeat
Write('Xx');
until KeyPressed;
readkey;
repeat
Write('--');
until KeyPressed;
end.
nologo385
26.06.2003., 15:30
Hvala na brzom odgovoru, ali to nije ono što tražim. Naime za unos čovjek ima 3 sekunde.
Uzeo sam Gettime - koji za kraj petlje čeka ili točan odgovor da T bude 300 stotinki sekunde veće od T0.
U petlji provjerava if keypressed.
Ako je - onda ide na obradu i pretvara u brojeve.
Taj dio mi funkcionira besprijekorno. No uočio sam da ako ako greškom malo duže držiš tipku da, logično, nastavlja očitavati.
Stoga sam htio dodati dio koji ne bi nastavio očitavati tastaturu ukoliko je tipka stisnuta. znači
repeat until keypressed=false;
Uočio sam ovo o čemu govoriš, da je keypressed true sve dok se ne očita , p sam dodao
repeat readkey until keypressed=false;
No u tom slučaj program uvijek očekuje stisnutu tipku prije nego što nastavi.
Pa sam nastavio u stilu
if keypressed=true then repeat readkey until keypressed=false
Radi se o programu za malu djecu, pa ne mogu očekivati od njih da još stišću enter nakon unosa...
Ja sam imo sličnih problema.
Metno sam jednostavno iza učitavanja:
while keypressed do ;
I to bi trebalo raditi.
Ne možeš metnuti repeat readkey until not keypressed jer ti prilikom svakog readkey-a on čeka da ti lupiš nekaj na tastaturi. Brijem da će ti to biti beskonačna petlja.
edit: Tek sam sad skonto da si metno if keypressed :o. Tak možeš. Ali jednostavnije je ono while keypressed do ;
Kak se tebi sviđa ;)
nologo385
27.06.2003., 09:20
Dah....
Tako bi TREBALO biti. Pročitao sam sinoć da pod ikspeima to ne može raditi, jer sama funkcija keypressed u assembleru treba očitati nešto iz Biosa, a u xp-u na to nema privilegija ili tako nešto. Bilo je na njemačkom.
Ali ja sam ulogiran kao admin - trebalo bi.
Ma da je pascal nešt' vrijedio ne bi izumro.
Imam neke drivere za Pascal za miša - radi k'o urica. varijabla za očitavanje tipke radi besprijekorno, a možeš joj čak i dodijeliti vrijednost.
Zapravo što meni treba jest da je isključeno ponavljanje tipaka, a to neka neko od odraslih napravi u control pannelu...
thx anyway
Nije istina.
Keypressed funkcija radi u winXP, bar bi trebala raditi (meni je).
Probaj zamjenit crt lajbreri. Možda te to smeta.
And never underestimate the power of Pascal!!!
To je bogohuljenje :p
Nego, je l' se može vidjet to čudo što napraviše ti?
nologo385
27.06.2003., 16:03
C'Tebo kaže:
And never underestimate the power of Pascal!!!
To je bogohuljenje :p
He he he ono moje je bilo mala šala. Pascal mi dođe nešto kao prva prava ljubav, ono; nakon što si se prvi puta zaljubio u tetu vrtća.
C'Tebo kaže:
Nego, je l' se može vidjet to čudo što napraviše ti?
Apsolutno - ako ikad napišem do kraja postat ću sors.
Skužio sam kod kartanja da mi mala rođaka ne zna zbrajati do 20, pa joj sad malo radim za vježbu. PRG je, kao i većina mojih ekspresno došao do stadija 90%-tne dovršenosti, i sad mu slijedi ili dovršenje ili stagnacija...
Ako ga dovršim - postam.
A sto se mucis s Turbo Pascalom? Ja sam inace dosta radio s njime i napravio prave stvari, recimo editor DOS ikona (one ikone koje moze prikazivati u svojim vlastitim TP i QBasic programima) koji ujedno moze ucitati i Windowsove ikone (sprema ih bez prozirnosti - nije mi se dalo jos i to raditi). Sucelje izgleda skoro kod sucelje Windowsa, a sve je isprogramirano na objektno orijentirani nacin. Nisam koristio ReadKey niti slicne funkcije jer doticne cekaju dok se ne pritisne tipka, a kad uz tipkovnicu program mora moci raditi i s misem, program jednostavno ne moze raditi - zato sam koristio funkcije iz TP-ovog unita drivers - koliko sam primijetio, taj unit je nedokumentiran (mislim da ga koristi Turbo Vision - pascalovo tekstualno sucelje). Uglavnom, bez njegovog koristenja, bez alternativnih funkcija (ja zaista nisam pronasao niti jednu koja bi radila kao sustav funkcija i zapisa iz unita drivers) ne mozes napraviti onakvu interakciju kakva bi trebala biti.
Uzmi Delphi i...
A viš, ja napravio program koji koristi i miša i tipkalovnicu odjednom (i to upravo preko readkey-a), a miša preko ASM naredbi.
I radilo dobro. Istina bio jednostavan program, ali bože moj :)
A, je l' moš malo pojasnit (ili dat neki link), ak' ti se da, naravno, taj drivers unit?
vBulletin® v3.8.4, Copyright ©2000-2013, Jelsoft Enterprises Ltd.