Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.10.15;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.038 c
10-1124054722
Lotus
2005-08-15 01:25
2006.10.15
The server threw an exception


2-1159358066
Fostr
2006-09-27 15:54
2006.10.15
Передать данные из одной формы в другою


15-1159191619
Megabyte
2006-09-25 17:40
2006.10.15
Форматирование из физической БД в диаграмму


2-1159269396
Megabyte
2006-09-26 15:16
2006.10.15
Двойная связь поля одной таблицы с полем др. таблицы


2-1159712950
pathfinder
2006-10-01 18:29
2006.10.15
Использование Halt..





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский