Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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.066 c
15-1275547795
Sergey Masloff
2010-06-03 10:49
2010.08.27
Электронные книжки - что купить


15-1265220403
Jeltok
2010-02-03 21:06
2010.08.27
Помогите в 1 строчке по паскалю))


2-1274253236
Delphist2
2010-05-19 11:13
2010.08.27
excel


15-1264673292
Vigi
2010-01-28 13:08
2010.08.27
Часы с разными часовыми поясами


2-1271923997
@!!ex
2010-04-22 12:13
2010.08.27
Как увеличить размер крестика(expand) в TTreeView?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский