Форум: "Прочее";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
ВнизДатчик Найти похожие ветки
← →
{Vanek} © (2010-03-29 00:20) [0]Ребят признаюсь сразу мои познания в делфи не очень, но встала вот такая задача. Необходимо написать програмку которая считала время между двумя движениями мышки с точностью до 10 мс и выводила бы на форме. Необходимо это для создания датчиков на наклонной плоскости по которой бы скатывалось тело. Может кто нить помочь? Заранее всем спс пишите на почтовый яшик.
← →
boa_kaa © (2010-03-29 00:25) [1]
> Необходимо написать програмку которая считала время между
> двумя движениями мышки с точностью до 10 мс и выводила бы
> на форме.
объяснись.
темно.
← →
{Vanek} © (2010-03-29 00:41) [2]
> объяснись.темно.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, mmSystem;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
check: boolean;
time: integer;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
check:=false;
time:=0;
end;
procedure TForm1.Button1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=VK_RETURN then
begin
SetCursorPos(Form1.Left+Button2.Left+1, Form1.Top+Button2.Top+1);
check:=true;
end;
end;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if check=true then
Sleep(10000);
SetCursorPos(Form1.Left+Button3.Left+1, Form1.Top+Button3.Top+1);
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
if check=true then time:=time+sleep(10);
end;
end.
Вот код что я смог сделать тоа вместо процедуры procedure TForm1.Button3Click(Sender: TObject); должен идти счет времени до второго движения мышкой я не знаю как это сделать.
← →
test © (2010-03-29 00:41) [3]{Vanek} © (29.03.10 00:20)
Точность 10 мс круто будет, у тебя прога кроме вызова функции ничего делать не будет, смотри Screen он умеет. Скорее всего тебе вставку на асемблере надо будет писать.
← →
test © (2010-03-29 00:44) [4]{Vanek} © (29.03.10 00:41) [2]
Заведи переменную/массив/список/TList куда выводить время срабатывания, заведи переменную где хранить значение последнего срабатывания now - LastTime = разница во времени.
← →
{Vanek} © (2010-03-29 00:45) [5]
> Точность 10 мс круто будет
Ну хотя бы не 10 я понимаю что у каждой машины свои погрешности и он будет считатьне 10 а может 11,5мс мне главное чтоб она считала на асемблере можно переделать прогу типо
label met;
var Adres,K,N1,N2:word;
k1,tau1,tau:real;
A,B:real;
begin
Adres:=$379; K:=1; tau1:=;
met:
asm
cli
mov bx,0
mov N1,0
mov dx,Adres
in al,dx
mov ah,al
@m1: in al,dx
cmp al,ah
jz @m1
@m2: mov cx,K
@m3: dec cx
jnz @m3
inc bx
jnz @m4
add N1,1
@m4: in al,dx
cmp al,ah
jnz @m2
mov N2,bx
sti
end;
B:=N1*65536; A:=N2+B;
writeln;
writeln ("N= ", A:0:0, " N1= ", N1, " N2= " , N2, " tau= ", tau1*A:0:2," мкс");
goto met
end.
← →
Чайник © (2010-03-29 15:36) [6]
> writeln ("N= ", A:0:0, " N1= ", N1, " N2= " , N2, " tau=
> ", tau1*A:0:2," мкс");
Так тебе нужны миллисекунды или микросекунды?
Для миллисекунд достаточно GetTickCount
← →
Германн © (2010-03-29 15:49) [7]
> Для миллисекунд достаточно GetTickCount
>
Дискретность GetTickCount порядка 16 мс.
← →
Jeer © (2010-03-29 15:49) [8]Это такие сейчас дипломы и дипломники ?
Даже задачу поставить не могут, не то, что ее решить.
Тьфу на вас.
← →
Сергей М. © (2010-03-29 15:53) [9]
> плоскости по которой бы скатывалось тело
Мышиный труп ?)
← →
Чайник © (2010-03-29 16:02) [10]
> Дискретность GetTickCount порядка 16 мс.
Ну тогда QueryPerformanceFrequency + QueryPerformanceCounter
← →
GrayFace © (2010-03-29 16:30) [11]timeGetTime - до 5 мс точность в зависимости от компа. Еще timeBeginPeriod и timeEndPeriod для большей точности.
У TTimer, вроде, минимальный интервал - 10 мс.
test © (29.03.10 0:41) [3]
Скорее всего тебе вставку на асемблере надо будет писать.
Зачем???
← →
GrayFace © (2010-03-29 16:31) [12]А, у timeGetTime 1 мс интервал можно сделать, похоже.
← →
test © (2010-03-29 19:53) [13]GrayFace © (29.03.10 16:30) [11]
Так ему какая то точность/скорость запредельная нужна.
← →
GrayFace © (2010-03-29 20:25) [14]Это еще не известно.
← →
Dimka Maslov © (2010-03-29 20:53) [15]in al, dx
Попробуйте сделать такое...
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.056 c