Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 11.09.2012, 14:09
lacasombra lacasombra вне форума
Прохожий
 
Регистрация: 11.09.2012
Сообщения: 3
Репутация: 10
По умолчанию Определение скорости набора текста Delphi

Всем привет, пишу программу клавиатурный тренажёр в Delphi, большая часть программы уже готова, осталось лишь определить скорость набора текста пользователя. Подскажите пожалуйста как это реализовать, если можно с примерами и пояснениями. К вопросу прикрепил пример из другой программы, там вычисляется средняя скорость, и сама скорость. Помогите пожалуйста определить скорость набора текста, как в прикрепленном примере. Заранее спасибо!
Вложения
Тип файла: zip Пример.zip (229.3 Кбайт, 9 просмотров)
Ответить с цитированием
  #2  
Старый 11.09.2012, 14:14
Аватар для Yurk@
Yurk@ Yurk@ вне форума
Специалист
 
Регистрация: 07.09.2007
Адрес: Украина, г. Днепропетровск
Сообщения: 892
Версия Delphi: 7 + ОгнеПтица
Репутация: выкл
По умолчанию

ну а что тут такого? в OnKeyDown тыкаешь счётчик и пусть себе считает кол-во нажатий ... а потом поделишь на время затраченное на набор и получишь скорость
__________________
Поживу - увижу, Доживу - узнаю, Выживу - учту.
[P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
Ответить с цитированием
  #3  
Старый 11.09.2012, 14:23
nixel nixel вне форума
Начинающий
 
Регистрация: 12.12.2011
Адрес: Москва
Сообщения: 150
Версия Delphi: XE2-U4
Репутация: 131
По умолчанию

При первом нажатии клавиши в поле ввода засекай время через, например Now(), считай количество нажатий, после окончания ввода (либо в реальном времени) засекай опять время, находи разницу, дели разницу на кол-во нажатий, да выводи в лейбл куда-нибудь.
Ответить с цитированием
  #4  
Старый 11.09.2012, 14:43
lacasombra lacasombra вне форума
Прохожий
 
Регистрация: 11.09.2012
Сообщения: 3
Репутация: 10
По умолчанию

Вот, что-то нахимичил, но незнаю, правильно ли она расчитывает скорость набора текста, и среднюю скорость. Если кому не лень, проверьте пожалуйста на правильность расчета, буду очень благодарен
Вложения
Тип файла: rar Скорость набора текста.rar (205.1 Кбайт, 22 просмотров)
Ответить с цитированием
  #5  
Старый 11.09.2012, 17:15
lacasombra lacasombra вне форума
Прохожий
 
Регистрация: 11.09.2012
Сообщения: 3
Репутация: 10
По умолчанию

Вот код, который я написал:
Код:
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: Оформляем код тегами!
Код работает, скорость определяется, но дело не в этом. Проблема в том, что я не уверен в правильности определения скорости...

Последний раз редактировалось Bargest, 11.09.2012 в 19:15.
Ответить с цитированием
  #6  
Старый 11.09.2012, 17:38
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

берёшь gettickcount сначала
берёшь gettickcount после
время в секундах = их разница div 1000
скорость = знаков / время
__________________
>woweook<
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:59.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter