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

Вниз

Нажатие клавиш по определённому алгоритму   Найти похожие ветки 

 
DroNIX   (2006-09-07 19:23) [0]

Объясню что мне надо на простом примере, на форме есть таймер, в событии onTimer должен быть код, который через определённый интервал выводит точки (точки это просто для примера, на самом деле должны нажиматься клавиши VK_DOWN,VK_RIGHT,VK_UP определённое количество раз), схема как они должны нажиматься показана в виде точек:
.        .  .  .  .
.        .
.        .
.        .
.        .
.        .
.        .
.  .  .  .

Т.е. изветсно количетво нажатий вверх, вниз и вправо, вот этот кусок должен повторятся до N раз. На словах это так:
VK_DOWN - VK_DOWN - VK_DOWN ... N - VK_RIGHT - VK_RIGHT -VK_RIGHT ... X - VK_UP - VK_UP - VK_UP - VK_UP ... Y
Как клавиши нажимать не пишите.


 
Eraser ©   (2006-09-07 19:25) [1]

> [0] DroNIX   (07.09.06 19:23)

в чем трудности реализации данной схемы?


 
Ketmar ©   (2006-09-07 19:30) [2]

> [1] Eraser ©   (07.09.06 19:25)
в том, что SendKey() уже откуда-то спёр, а циклы ещё не выучил.


 
DroNIX   (2006-09-07 19:31) [3]

В том что почему то у меня ничё не получается (прохходит нормально только Вниз-Вправо-Вверх-Вправо, а потом всё), обычно таких проблем не было а тут... часов 5 уже сижу, смеюсь сам над собой, такую протую вещ не могу сделать


 
DroNIX   (2006-09-07 19:32) [4]

> Ketmar ©   (07.09.06 19:30) [2]
в том, что SendKey() уже откуда-то спёр, а циклы ещё не выучил.

тут же не цыклы, а IF )) тк таймер


 
Eraser ©   (2006-09-07 19:35) [5]

> [3] DroNIX   (07.09.06 19:31)

код в студию.


 
DroNIX   (2006-09-07 19:43) [6]


//Down
 if (I <= CDown) then Inc(I)
 else begin
   I := 0;
   ScanDirection := 1;
 end;
//Right
 if (J <= ScanRange) and  (ScanDirection = 1) then
   Inc(J) else
 begin
   J := 0;
   ScanDirection := 2;
 end;
//Up
 if (N <= CDown) and  (ScanDirection = 2) then
   Inc(N) else
 begin
   N := 0;
   ScanDirection := 1;
 end;

case ScanDirection of
 0 : Direction := VK_DOWN;
 1 : Direction := VK_RIGHT;
 2 : Direction := VK_UP;
end;

PostMessage(GHWND,WM_KEYDOWN,Direction,0);
sleep(50);
PostMessage(GHWND,WM_KEYUP,Direction,0);


Это самая простая версия, я её так замодифицировал после проверки дебагером как он работает


 
Ketmar ©   (2006-09-07 19:44) [7]

> [4] DroNIX   (07.09.06 19:32)
если цикл размазать по всей программе и сделать при помощи IF, он от этого не перестанет быть циклом.

включаю телепатор: отжимать клавиши не забьываешь?


 
Ketmar ©   (2006-09-07 19:45) [8]

интересный подход. а бредовый-то какой... а что ещё интересней -- нерабочий ни разу.


 
Ketmar ©   (2006-09-07 19:46) [9]

> [8] Ketmar ©   (07.09.06 19:45)
по крайней мере в том виде, что приведён. посколько с переменными явно что-то загадочное.


 
DroNIX   (2006-09-07 19:49) [10]

>включаю телепатор: отжимать клавиши не забьываешь?
с клавишами всё ок
>интересный подход. а бредовый-то какой... а что ещё интересней -- нерабочий ни разу.
ну да бредовый, может во сне приснится, я вот не могу на глаз определить рабочий он или нет, или что то придумать, то после дебагера понимаю работает он или нет, такой вот я


 
DroNIX   (2006-09-07 19:52) [11]

да он работает Вверх-вправо-вверх-вправо, просто уже 10 моификаций наверно, запутался уже совсем, ппц мозг мой умер


 
Ketmar ©   (2006-09-07 19:52) [12]

> [10] DroNIX   (07.09.06 19:49)
если ты "на глаз" не разбираешься в таком простом коде... может это... чего попроще написать? например, вывод таблицы умножения...

собственно, я бы всё это совсем по-другому написал.
как минимум: я напрочь не понимаю, зачем столько страшных переменных.
не понимаю, зачем отдельно хранить "направление" (вместо нормального хранения кода клавиши).
не понимаю, почему не занести всё это в массив типа "счётчки повторений, код".


 
DroNIX   (2006-09-07 19:55) [13]

ладно спасиб, ща поправлю напишу что получилось :)
спасиб попробую с массивом


 
Ketmar ©   (2006-09-07 19:56) [14]

> [13] DroNIX   (07.09.06 19:55)
а может, лучше поспать сначала? %-)


 
DroNIX   (2006-09-07 19:59) [15]

> Ketmar ©   (07.09.06 19:56)
да может и лучше поспать, давно не спал


 
DroNIX   (2006-09-07 21:03) [16]

Ну вот поспал немного, и готово, всё работает:

 Inc(I);
 if I<=aData[0][J] then begin
   PostMessage(GoogleHWND,WM_KEYDOWN,aData[1][J],0);
   sleep(50);
   PostMessage(GoogleHWND,WM_KEYUP,aData[1][J],0);
end else begin
   I := 0;
   Inc(J);
end;
if (J = 3) and (Reset = False) then
begin
 J := 1;
 Reset := True;
end;
if (J = 2) and (Reset = True) then
begin
 J := 0;
 Reset := False;
end;

Ketmar © Спасибо что сказал про массив!!!
Может ктонибудь в пару строчек сделает, но я не такой профи...


 
default ©   (2006-09-07 23:03) [17]


const
  LС: Array[0..2,0..1] of Integer = ((4,1),(5,2),(6,3));
var
  Form1: TForm1;
  m, c: Integer;
//...
procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(IntToStr(LС[m,1]));
  if c+1 = LС[m,0] then begin
    m := (m+1) mod 3;
    c := 0;
  end else Inc(c);
end;


если угодно, можно и так


 
Ketmar ©   (2006-09-07 23:08) [18]

> [17] default ©   (07.09.06 23:03)
фу. неуниверсально. а вдруг массив захочется расширить? лучше не mod 3, а mod (High(lc)+1).


 
default ©   (2006-09-07 23:09) [19]

Ketmar ©   (07.09.06 23:08) [18]
ещё камень в меня брось:)


 
Ketmar ©   (2006-09-07 23:10) [20]

> [19] default ©   (07.09.06 23:09)
не могу. у меня старая версия камней, ещё не умеет летать. где скачать update?


 
default ©   (2006-09-07 23:22) [21]

Ketmar ©   (07.09.06 23:10) [20]
если скажу, ты мне подскажешь где скачать патч для увёртывания от камней?


 
Ketmar ©   (2006-09-07 23:30) [22]

> [21] default ©   (07.09.06 23:22)
да сам напиши. подумаешь... %-)


 
default ©   (2006-09-07 23:47) [23]

Ketmar ©   (07.09.06 23:30) [22]
ага я ошибусь где-нить при написании и меня в один "прекрасный" момент
камешком...тьфу тьфу:) и я же виноват буду
а тут хоть будет кого обвинить:)


 
Ketmar ©   (2006-09-08 00:09) [24]

> [23] default ©   (07.09.06 23:47)
для обвинений всегда есть системщики, написавшие глючный компилятор.


 
Германн ©   (2006-09-08 01:43) [25]


> default ©   (07.09.06 23:22) [21]
>
> Ketmar ©   (07.09.06 23:10) [20]
> если скажу, ты мне подскажешь где скачать патч для увёртывания
> от камней?

"патч для увёртывания от камней" не скачивается, а разрабатывается самим тобой. Называется "ПОФИГИЗМ". Более XXL-ный термин я не употребляю по причине уже выработанного мною вышеуказанного состояния души. :-)
Ну ещё и по причине встроенного генетически, механизма определения "когда, где, как и с кем"! :-)



Страницы: 1 вся ветка

Текущий архив: 2006.10.15;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.057 c
2-1159637739
ProgRAMmer Dimonych
2006-09-30 21:35
2006.10.15
Проблема с ListBox ом


4-1148035408
watashi
2006-05-19 14:43
2006.10.15
MDIClient и дочерние окна


15-1158817956
DelphiLexx
2006-09-21 09:52
2006.10.15
нужен пакет для решения нелинейных задач


15-1159107170
MixAnOL
2006-09-24 18:12
2006.10.15
OLE сервер и JavaScript в IE


2-1159359021
pathfinder
2006-09-27 16:10
2006.10.15
Вопрос по работе с файлами.