|
|
 |
 |
 |
Artykuły |
 |
|
Test pisania na klawiaturze
22:21:26 29.05.2005
@Gujet
Cześć.
W tym artykule pomogę Ci napisać program, który będzie służył do nauki pisania na klawiaturze. Nie będzie to może "Mistrz Klawiatury", ale na początek wystarczy:)
Co dokładnie będzie robił program? Losował znak i wyświetlał go na ekranie. Kiedy naciśniemy jakiś klawisz program sprawdzi, czy to co nacisnęliśmy równe jest temu, co wylosował komputer, po czym wylosuje następny znak. I tak w koło aż do upłynięcia 60 sekund. Wtedy program wystawi nam ocenę.
"Zaczynajmy, czas dokończy" - no, nie zrozumcie tego zbyt dokładnie:)
Umieść na formie: przycisk, gauge, timer i label. Nazwij je kolejno: rozp_test, postep, timer i...l1 :) Właściwość enabled komponentu timer ustaw na false. W ten sposób komponent nie będzie wykonywał swojego zadania w momencie uruchomienia programu, tylko wtedy, kiedy mu to rozkażemy. Właściwość Interval timera ustaw na 1000. Aha, zadeklaruj publiczne zmienne:
var czas :byte; // ile czasu do końca
l_znak :byte; // liczba poprawnie wciśnietych znaków
wyl_znak :integer; // numer wylosowanego znaku
Dobra, kilknij dwukrotnie na timer i uzupełnij prockę następująco:
begin
czas:=czas-1; //1
postep.progress:=czas; //2
if czas=0 then //3
begin
timer.Enabled:=false; //4
case l_znak of
57..250:messagebox(handle,'6','',MB_OK); //5
50..56 : messagebox(handle,'5','',MB_OK);
41..49 : messagebox(handle,'4','',MB_OK);
27..40 : messagebox(handle,'3','',MB_OK);
18..26 : messagebox(handle,'2','',MB_OK);
0..17 : messagebox(handle,'1','',MB_OK);
end;
rozp_test.enabled:=true; //6
end;
end;
//1-zmniejszy czas o jeden
//2-pokaże na pasku postępu ile zostało czasu
//3-jesli czas się skończy rozpocznie wystwianie oceny
//4-wyłączy timer
//5-jeżeli liczba poprawnie wpisanych znaków waha się między 57 z 250 (ciekawe kto tyle napisze:)), to program wyświetli okienko z oceną celującą. Reszta analogicznie.
//6-przycisk służący do rozpoczęcia testu stanie się aktywny
Teraz weźmy się za samo rozpoczęcie testu. Procedurę onClick przycisku uzupełnij tak:
begin
czas:=60;
postep.progress:=czas;
randomize;
wyl_znak:=random(94)+33; //1
l1.Caption:=chr(wyl_znak); //2
rozp_test.Enabled:=false; //3
timer.Enabled:=true; //4
end;
//1-losuje znak, przedział jest ustwiony taki a nie inny, bo chcemy, żeby program losował tylko widoczne znaki, a nie np. F4, Alt...
//2-na komponencie label wypisujemy wylosowany znak. funkcja chr() zamieia numer znaku na string np. chr(74) zwraca 'J'.
//3-ustawia przycisk na nieaktywny. Jeśli tego nie zrobimy, to program nie będzie działał jak należy. Znaczy się są inne metody, ale ja ich nie znam:(
//4-włącza pomiar czasu
Teraz dobierzemy się do zdarzenia onKeyPress formularza. zaznacz formę i na Object Inspectorze na zakładce Events wybierz onKeyPress i kliknij dwukrotnie na białe pole obok. Procedurę uzupełnij następująco:
begin
if string(key)=chr(wyl_znak) then l_znak:=l_znak+1; //1
wyl_znak:=random(94)+33; //2
l1.Caption:=chr(wyl_znak); //3
end;
//1-Uff...jak to wytłumaczyć? Ok, zmienna Key (to co nacisnęliśmy) jest typu Char,a wyl_znak typu integer. Jak dobrze wiesz, żeby je poróbnać muszą one być tego samego typu. Trzeba je więc skonwertować np. do typu string. Tak więc funkcja string() konwertuje typ Char do..string:) Funkcję chr() już omówiłem. Więc program sprwadzi czy te dwie zmienne są sobie równe, jeśli tak, to zwiększy liczbę poprawnie wciśniętych znaków o jeden.
//2-wylosuje znak
//3-napisze go na etykiecie tekstowej.
Dobrze, teraz kilknij dwukrotnie na formularz i wpisz:
begin
czas:=60;
l_znak:=0;
end;
Ta procka po prostu nadaje odpowiednie (początkowe) wartości zmiennym.
Teraz możesz już uruchomić program. Pozostawia on wiele do życzenia np. na pasku postępu wyświetlane są procenty (właściwość ShowText). Ale chodziło mi tylko o napisanie sprwanej aplikacji. Reszta nalezy do Was. Można tu dodać wiele rzeczy np.:
- rekord
- informację o liczbie poprwnie wpisanych znaków
...i tak dalej w tym rodzaju.
To by było na tyle...uczcie się szybko Delphi, bo podobno "Punks are dead, We are the next" :)
Gujet (gujet@o2.pl)
Komentarzy: 0 | Głosuj (1,
2,
3,
4,
5,
6) | Ocena: 3.43 | Czytane: 2849 |  |
 |
Komentarze |
 |
|
Musisz się zalogować aby mieć możliwość komentowania
|  |
|
 |
|