Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.27;
Скачать: CL | DM;

Вниз

Датчик   Найти похожие ветки 

 
{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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.052 c
2-1265953833
n_sch
2010-02-12 08:50
2010.08.27
Rave Reports 5


2-1268379069
Б
2010-03-12 10:31
2010.08.27
Имя файла в TOpenDialog.


4-1229333584
Nucer
2008-12-15 12:33
2010.08.27
GetTCPTable


15-1273217287
Тайлер Дерден
2010-05-07 11:28
2010.08.27
"кинопоиск" для книг


2-1274209434
Сид
2010-05-18 23:03
2010.08.27
Проверить значение TDBLookupComboBox