Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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


Страницы:   1 2

DroNIX ©   (2006-09-07 19:23:00) 

Объясню что мне надо на простом примере, на форме есть таймер, в событии 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
Как клавиши нажимать не пишите.


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


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

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


Ketmar   (2006-09-08 00:09:00) [2]

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


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

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


Ketmar   (2006-09-07 23:30:00) [4]

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


default   (2006-09-07 23:22:00) [5]

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


Ketmar   (2006-09-07 23:10:00) [6]

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


default   (2006-09-07 23:09:00) [7]

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


Ketmar   (2006-09-07 23:08:00) [8]

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


default   (2006-09-07 23:03:00) [9]


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;


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


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

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

 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 © Спасибо что сказал про массив!!!
Может ктонибудь в пару строчек сделает, но я не такой профи...


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

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


Ketmar   (2006-09-07 19:56:00) [12]

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


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

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


Ketmar   (2006-09-07 19:52:00) [14]

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

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


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

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


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

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


Ketmar   (2006-09-07 19:46:00) [17]

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


Ketmar   (2006-09-07 19:45:00) [18]

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


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

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

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


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


//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);


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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо