|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Определение скорости набора текста Delphi
Всем привет, пишу программу клавиатурный тренажёр в Delphi, большая часть программы уже готова, осталось лишь определить скорость набора текста пользователя. Подскажите пожалуйста как это реализовать, если можно с примерами и пояснениями. К вопросу прикрепил пример из другой программы, там вычисляется средняя скорость, и сама скорость. Помогите пожалуйста определить скорость набора текста, как в прикрепленном примере. Заранее спасибо!
|
#2
|
||||
|
||||
ну а что тут такого? в OnKeyDown тыкаешь счётчик и пусть себе считает кол-во нажатий ... а потом поделишь на время затраченное на набор и получишь скорость
Поживу - увижу, Доживу - узнаю, Выживу - учту. [P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
|
#3
|
|||
|
|||
При первом нажатии клавиши в поле ввода засекай время через, например Now(), считай количество нажатий, после окончания ввода (либо в реальном времени) засекай опять время, находи разницу, дели разницу на кол-во нажатий, да выводи в лейбл куда-нибудь.
|
#4
|
|||
|
|||
Вот, что-то нахимичил, но незнаю, правильно ли она расчитывает скорость набора текста, и среднюю скорость. Если кому не лень, проверьте пожалуйста на правильность расчета, буду очень благодарен
|
#5
|
|||
|
|||
Вот код, который я написал:
Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, jpeg; type TForm1 = class(TForm) Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Timer2: TTimer; Timer1: TTimer; Label5: TLabel; procedure FormCreate(Sender: TObject); procedure Timer2Timer(Sender: TObject); procedure FormKeyPress(Sender: TObject; var Key: Char); private { Private declarations } public { Public declarations } end; var Form1: TForm1; chas1,min1,sec1,msec1,chas2,min2,sec2,msec2:word; sk1,sec1real,msreal,sk,obsk:real; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin label2.Caption:=floattostr(obsk)+' '+'симв/мин'; label4.Caption:=floattostr(sk)+' '+'симв/мин'; timer2timer(timer2); end; procedure TForm1.Timer2Timer(Sender: TObject); begin label5.Caption:=timetostr(now); end; procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); var begtime,vreme:tdatetime; begin vreme:=time; DecodeTime((vreme), chas2, min2, sec2, msec2); if sec2<sec1 then //если секунды2<секунды1 begin sec2:=(sec2+60-sec1); end else begin sec2:=sec2-sec1; end; if msec2<msec1 then //если милисекунды2<милисекунды1 begin msec2:=msec2+1000-msec1; end else begin msec2:=msec2-msec1; end; sec1real:=round(sec2); msreal:=round(msec2); sk1:=sec1real+(msreal/1000); sk:=(60 / sk1); //скорость набора за 1 минуту obsk:=(obsk+sk)/ 2; label2.Caption:=floattostr(round(obsk))+'симв/мин'; label4.Caption:=floattostr(round(sk))+'симв/мин'; timer1.Enabled:=true; begtime:=time; DecodeTime((BegTime), chas1, min1, sec1, msec1); end; end. Код работает, скорость определяется, но дело не в этом. Проблема в том, что я не уверен в правильности определения скорости... Последний раз редактировалось Bargest, 11.09.2012 в 19:15. |
#6
|
|||
|
|||
берёшь gettickcount сначала
берёшь gettickcount после время в секундах = их разница div 1000 скорость = знаков / время >woweook< |