Author Topic: Две функции выдают ошибку  (Read 2688 times)

0 Members and 1 Guest are viewing this topic.

sovaxa

  • Освоившийся
  • **
  • Posts: 72
    • View Profile
Две функции выдают ошибку
« on: June 03, 2019, 02:13:09 PM »
GETSCREEN
//0000000000000000000000000000
IF(((PXLCOUNT(1150,230, 1165,250, 3223857) > 0) &
(SCANPICTURE (1170,220, 1200,255, "3.bmp")))
WAITMS(100)
LCLICK(1250,115)
WAITMS(100)
DBLCLICK(1250,115)
WAITMS(100)
DBLCLICK(1250,600)
WAITMS(100)
KEYPRESS(#3)
WAITMS(100)
LCLICK(1355,670)
WAIT(50)
ELSE
END_IF

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Две функции выдают ошибку
« Reply #1 on: June 03, 2019, 02:34:18 PM »
Завязывай уже лепить свои вопросы в "Использование"!

Зачем ты засунул в условие SCANPICTURE? Эта функция за место себя ничего не возвращает. Она записывает все найденные координаты в указанный массив. Данная функция пишется только отдельной строкой.

Code: (clickermann) [Select]
GETSCREEN
IF_PICTURE_IN (1170,220, 1200,255, "3.bmp", -1, 100)
   IF(PXLCOUNT(1150,230, 1165,250, 3223857) > 0)
      WAITMS(100)
      LCLICK(1250,115)
      WAITMS(100)
      DBLCLICK(1250,115)
      WAITMS(100)
      DBLCLICK(1250,600)
      WAITMS(100)
      KEYPRESS(#3)
      WAITMS(100)
      LCLICK(1355,670)
      WAIT(50)
   END_IF
END_IF


sovaxa

  • Освоившийся
  • **
  • Posts: 72
    • View Profile
Re: Две функции выдают ошибку
« Reply #2 on: June 03, 2019, 02:46:15 PM »
IF_PICTURE_IN (1170,220, 1200,255, "3.bmp", -1, 100)


эта функция находит заданную картинку 3.bmp в 1170,220, 1200,255 этом квадрате?

sovaxa

  • Освоившийся
  • **
  • Posts: 72
    • View Profile
Re: Две функции выдают ошибку
« Reply #3 on: June 03, 2019, 11:04:08 PM »
Code: (clickermann) [Select]
GETSCREEN
//0
IF_PICTURE_IN (1150,220, 1200,255, "0.bmp", -1, 100)
IF(PXLCOUNT(1150,130, 1200,160, 6471470) > 0)
      WAITMS(100)
      LCLICK(1250,115)
      WAITMS(100)
      DBLCLICK(1250,115)
      WAITMS(100)
      DBLCLICK(1250,600)
      WAITMS(100)
      KEYPRESS(#0)
      WAITMS(100)
      LCLICK(1355,670)
      WAIT(50)
      ELSE
//4
IF_PICTURE_IN (1150,220, 1200,255, "4.bmp", -1, 100)
IF(PXLCOUNT(1150,130, 1200,160, 6471470) > 0)
      WAITMS(100)
      LCLICK(1250,115)
      WAITMS(100)
      DBLCLICK(1250,115)
      WAITMS(100)
      DBLCLICK(1250,600)
      WAITMS(100)
      KEYPRESS(#4)
      WAITMS(100)
      LCLICK(1355,670)
      WAIT(50)
END_IF
END_IF     
END_IF
END_IF
WAITMS(50)

выполняется только первое условие,

IF_PICTURE_IN (1150,220, 1200,255, "0.bmp", -1, 100)
IF(PXLCOUNT(1150,130, 1200,160, 6471470) > 0)

а если его нет должно выполняться второе.

IF_PICTURE_IN (1150,220, 1200,255, "4.bmp", -1, 100)
IF(PXLCOUNT(1150,130, 1200,160, 6471470) > 0)


не получается.
помогите разобраться
« Last Edit: June 04, 2019, 09:01:42 AM by Oraven »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Две функции выдают ошибку
« Reply #4 on: June 04, 2019, 09:11:43 AM »
выполняется только первое условие,

Ну разве ты не видишь что если IF_PICTURE_IN (1150,220, 1200,255, "0.bmp", -1, 100) не найдено то и остальной код не будет выполняться потому как он находится в этом условии функции?!

Чтобы это работало нужно написать "второе условие" для каждой части первых двух условий
Code: (clickermann) [Select]
GETSCREEN
//0
IF_PICTURE_IN (1150,220, 1200,255, "0.bmp", -1, 100)
   IF(PXLCOUNT(1150,130, 1200,160, 6471470) > 0)
      WAITMS(100)
      LCLICK(1250,115)
      WAITMS(100)
      DBLCLICK(1250,115)
      WAITMS(100)
      DBLCLICK(1250,600)
      WAITMS(100)
      KEYPRESS(#0)
      WAITMS(100)
      LCLICK(1355,670)
      WAIT(50)
   ELSE
      IF_PICTURE_IN (1150,220, 1200,255, "4.bmp", -1, 100)
         IF(PXLCOUNT(1150,130, 1200,160, 6471470) > 0)
            WAITMS(100)
            LCLICK(1250,115)
            WAITMS(100)
            DBLCLICK(1250,115)
            WAITMS(100)
            DBLCLICK(1250,600)
            WAITMS(100)
            KEYPRESS(#4)
            WAITMS(100)
            LCLICK(1355,670)
            WAIT(50)
         END_IF
      END_IF
   END_IF
ELSE
   IF_PICTURE_IN (1150,220, 1200,255, "4.bmp", -1, 100)
      IF(PXLCOUNT(1150,130, 1200,160, 6471470) > 0)
         WAITMS(100)
         LCLICK(1250,115)
         WAITMS(100)
         DBLCLICK(1250,115)
         WAITMS(100)
         DBLCLICK(1250,600)
         WAITMS(100)
         KEYPRESS(#4)
         WAITMS(100)
         LCLICK(1355,670)
         WAIT(50)
      END_IF
   END_IF
END_IF

Выглядит громоздко и не оптимально для редактирования.

Условие "IF(PXLCOUNT(1150,130, 1200,160, 6471470) > 0)" одинаково для обоих вариантов. Поэтому пишем так.
Code: (clickermann) [Select]
GETSCREEN
IF(PXLCOUNT(1150,130, 1200,160, 6471470) > 0)
   //0
   IF_PICTURE_IN (1150,220, 1200,255, "0.bmp", -1, 100)
      WAITMS(100)
      LCLICK(1250,115)
      WAITMS(100)
      DBLCLICK(1250,115)
      WAITMS(100)
      DBLCLICK(1250,600)
      WAITMS(100)
      KEYPRESS(#0)
      WAITMS(100)
      LCLICK(1355,670)
      WAIT(50)
   ELSE
      //4
      IF_PICTURE_IN (1150,220, 1200,255, "4.bmp", -1, 100)
         WAITMS(100)
         LCLICK(1250,115)
         WAITMS(100)
         DBLCLICK(1250,115)
         WAITMS(100)
         DBLCLICK(1250,600)
         WAITMS(100)
         KEYPRESS(#4)
         WAITMS(100)
         LCLICK(1355,670)
         WAIT(50)
      END_IF
   END_IF
END_IF
WAITMS(50)

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Две функции выдают ошибку
« Reply #5 on: June 04, 2019, 09:14:59 AM »
Продолжаем оптимизировать код. Помещаем повторяющийся код в подпрограмму.
Code: (clickermann) [Select]
SUB(prog1, $key)
   WAITMS(100)
   LCLICK(1250,115)
   WAITMS(100)
   DBLCLICK(1250,115)
   WAITMS(100)
   DBLCLICK(1250,600)
   WAITMS(100)
   KEYPRESS($key)
   WAITMS(100)
   LCLICK(1355,670)
   WAIT(50)
END_SUB

GETSCREEN
IF(PXLCOUNT(1150,130, 1200,160, 6471470) > 0)
   //0
   IF_PICTURE_IN (1150,220, 1200,255, "0.bmp", -1, 100)
      prog1(#0) // вызов подпрограммы
   ELSE
      //4
      IF_PICTURE_IN (1150,220, 1200,255, "4.bmp", -1, 100)
         prog1(#4) // вызов подпрограммы
      END_IF
   END_IF
END_IF
WAITMS(50)

sovaxa

  • Освоившийся
  • **
  • Posts: 72
    • View Profile
Re: Две функции выдают ошибку
« Reply #6 on: June 04, 2019, 09:21:02 AM »
Спасибо. У меня еще один вопрос, количество таких условий ограничено?

//0
   IF_PICTURE_IN (1150,220, 1200,255, "0.bmp", -1, 100)
      prog1(#0) // вызов подпрограммы

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Две функции выдают ошибку
« Reply #7 on: June 04, 2019, 09:53:59 AM »
Спасибо. У меня еще один вопрос, количество таких условий ограничено?

//0
   IF_PICTURE_IN (1150,220, 1200,255, "0.bmp", -1, 100)
      prog1(#0) // вызов подпрограммы

Не ограничено.

sovaxa

  • Освоившийся
  • **
  • Posts: 72
    • View Profile
Re: Две функции выдают ошибку
« Reply #8 on: June 04, 2019, 10:59:42 AM »
prog1(#0) здесь можно указывать как однозначные так и двузначные цифры?

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Две функции выдают ошибку
« Reply #9 on: June 04, 2019, 11:26:29 AM »
prog1(#0) здесь можно указывать как однозначные так и двузначные цифры?

#0 - это константа кода клавиши, равна 48 что соответствует клавиши 0 (описание на последней странице справки)

Если ты хочешь печатать числа то воспользуйся KEYSTRING
Code: (clickermann) [Select]
SUB(prog1, $key)
   WAITMS(100)
   LCLICK(1250,115)
   WAITMS(100)
   DBLCLICK(1250,115)
   WAITMS(100)
   DBLCLICK(1250,600)
   WAITMS(100)
   KEYSTRING($key)
   WAITMS(100)
   LCLICK(1355,670)
   WAIT(50)
END_SUB

GETSCREEN
IF(PXLCOUNT(1150,130, 1200,160, 6471470) > 0)
   //0
   IF_PICTURE_IN (1150,220, 1200,255, "0.bmp", -1, 100)
      prog1(0) // вызов подпрограммы
   ELSE
      //4
      IF_PICTURE_IN (1150,220, 1200,255, "4.bmp", -1, 100)
         prog1(12345) // вызов подпрограммы (будет напечатано 12345)
      END_IF
   END_IF
END_IF
WAITMS(50)




sovaxa

  • Освоившийся
  • **
  • Posts: 72
    • View Profile
Re: Две функции выдают ошибку
« Reply #10 on: June 04, 2019, 02:38:30 PM »
Как можно объединить три условия?


IF_PICTURE_IN (1150,20, 1200,30, "0.bmp", -1, 100)
и
IF_PICTURE_IN (1150,40, 1200,50, "5.bmp", -1, 100)
и
IF_PICTURE_IN (1150,120, 1200,125, "9.bmp", -1, 100)

тогда выполнялось действие.

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Две функции выдают ошибку
« Reply #11 on: June 04, 2019, 03:11:04 PM »
Code: (clickermann) [Select]
GETSCREEN
IF_PICTURE_IN (1150,20, 1200,30, "0.bmp", -1, 100)
   IF_PICTURE_IN (1150,40, 1200,50, "5.bmp", -1, 100)
      IF_PICTURE_IN (1150,120, 1200,125, "9.bmp", -1, 100)
         // действие
      END_IF
   END_IF
END_IF