![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Нажатие клавиш по определённому алгоритму
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);
Это самая простая версия, я её так замодифицировал после проверки дебагером как он работает