![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Всем привет, пишу программу клавиатурный тренажёр в Delphi, большая часть программы уже готова, осталось лишь определить скорость набора текста пользователя. Подскажите пожалуйста как это реализовать, если можно с примерами и пояснениями. К вопросу прикрепил пример из другой программы, там вычисляется средняя скорость, и сама скорость. Помогите пожалуйста определить скорость набора текста, как в прикрепленном примере. Заранее спасибо!
|
|
#2
|
||||
|
||||
|
ну а что тут такого? в OnKeyDown тыкаешь счётчик и пусть себе считает кол-во нажатий ... а потом поделишь на время затраченное на набор и получишь скорость
|
|
#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 скорость = знаков / время |