Author Topic: Набор координат на экранной клавиатуре  (Read 2398 times)

0 Members and 3 Guests are viewing this topic.

chan78

  • Зашел в гости
  • *
  • Posts: 4
    • View Profile
Доброго времени суток! Есть  задача набирать заранее заданные координаты на экранной клавиатуре. Цифры могут быть одно-, двух-, трех- и четырехразрядные, отрицательные и положительные. Способ, которым реализовал, громоздкий и не удобный в плане ввода координат. Хотелось бы просто вбивать координаты как переменные $x=-1257, $y=542. Прошу помочь в оптимизации задачи, заранее спасибо!

[spoiler]
// x-950
// y-505

// координата х
$x1=9
$x2=5
$x3=0
$x4=8
// координата у
$y1=5
$y2=0
$y3=5
$y4=0
// минусы: 1-минус есть, 0 - минуса нет
$minusx=1
$minusy=1
// значимый разряд в координатах
$m1=4
$m2=4
GETSCREEN

IF($minusx=1)
   IF_PICTURE_IN (0,0, $_xmax,$_ymax, "минус.bmp", -1, 95)
      LCLICK($_return1+9, $_return2+9)
      WAITMS(500)
   END_IF
END_IF

FOR($i=1,$i<$m1)
   IF($i=1)
      $n =$x1
   END_IF
   IF($i=2)
      $n =$x2
   END_IF
   IF($i=3)
      $n =$x3
   END_IF
   IF($i=4)
      $n = $x4
   END_IF
   
   SWITCH($n)
   CASE(0)
      IF_PICTURE_IN (0,0, $_xmax,$_ymax, "0.bmp", -1, 95)
         LCLICK($_return1+9, $_return2+9)
         WAITMS(500)
      END_IF
   CASE(1)
      IF_PICTURE_IN (0,0, $_xmax,$_ymax, "1.bmp", -1, 95)
         LCLICK($_return1+9, $_return2+9)
         WAITMS(500)
      END_IF
   CASE(2)
      IF_PICTURE_IN (0,0, $_xmax,$_ymax, "2.bmp", -1, 95)
         LCLICK($_return1+9, $_return2+9)
         WAITMS(500)
      END_IF
   CASE(3)
      IF_PICTURE_IN (0,0, $_xmax,$_ymax, "3.bmp", -1, 95)
         LCLICK($_return1+9, $_return2+9)
         WAITMS(500)
      END_IF
   CASE(4)
      IF_PICTURE_IN (0,0, $_xmax,$_ymax, "4.bmp", -1, 95)
         LCLICK($_return1+9, $_return2+9)
         WAITMS(500)
      END_IF
   CASE(5)
      IF_PICTURE_IN (0,0, $_xmax,$_ymax, "5.bmp", -1, 95)
         LCLICK($_return1+9, $_return2+9)
         WAITMS(500)
      END_IF
   CASE(6)
      IF_PICTURE_IN (0,0, $_xmax,$_ymax, "6.bmp", -1, 95)
         LCLICK($_return1+9, $_return2+9)
         WAITMS(500)
      END_IF
   CASE(7)
      IF_PICTURE_IN (0,0, $_xmax,$_ymax, "7.bmp", -1, 95)
         LCLICK($_return1+9, $_return2+9)
         WAITMS(500)
      END_IF
   CASE(8)
      IF_PICTURE_IN (0,0, $_xmax,$_ymax, "8.bmp", -1, 95)
         LCLICK($_return1+9, $_return2+9)
         WAITMS(500)
      END_IF
   CASE(9)
      IF_PICTURE_IN (0,0, $_xmax,$_ymax, "9.bmp", -1, 95)
         LCLICK($_return1+9, $_return2+9)
         WAITMS(500)
      END_IF
   END_SWITCH
   
END_CYC

IF_PICTURE_IN (0,0, $_xmax,$_ymax, "координата у.bmp", -1, 95)
   LCLICK($_return1+50, $_return2+3)
   WAITMS(500)
END_IF

IF($minusy=1)
   IF_PICTURE_IN (0,0, $_xmax,$_ymax, "минус.bmp", -1, 95)
      LCLICK($_return1+9, $_return2+9)
      WAITMS(500)
   END_IF
END_IF
FOR($i=1,$i<$m2)
   IF($i=1)
      $n =$y1
   END_IF
   IF($i=2)
      $n =$y2
   END_IF
   IF($i=3)
      $n =$y3
   END_IF
   IF($i=4)
      $n = $y4
   END_IF
   
   SWITCH($n)
   CASE(0)
      IF_PICTURE_IN (0,0, $_xmax,$_ymax, "0.bmp", -1, 95)
         LCLICK($_return1+9, $_return2+9)
         WAITMS(500)
      END_IF
   CASE(1)
      IF_PICTURE_IN (0,0, $_xmax,$_ymax, "1.bmp", -1, 95)
         LCLICK($_return1+9, $_return2+9)
         WAITMS(500)
      END_IF
   CASE(2)
      IF_PICTURE_IN (0,0, $_xmax,$_ymax, "2.bmp", -1, 95)
         LCLICK($_return1+9, $_return2+9)
         WAITMS(500)
      END_IF
   CASE(3)
      IF_PICTURE_IN (0,0, $_xmax,$_ymax, "3.bmp", -1, 95)
         LCLICK($_return1+9, $_return2+9)
         WAITMS(500)
      END_IF
   CASE(4)
      IF_PICTURE_IN (0,0, $_xmax,$_ymax, "4.bmp", -1, 95)
         LCLICK($_return1+9, $_return2+9)
         WAITMS(500)
      END_IF
   CASE(5)
      IF_PICTURE_IN (0,0, $_xmax,$_ymax, "5.bmp", -1, 95)
         LCLICK($_return1+9, $_return2+9)
         WAITMS(500)
      END_IF
   CASE(6)
      IF_PICTURE_IN (0,0, $_xmax,$_ymax, "6.bmp", -1, 95)
         LCLICK($_return1+9, $_return2+9)
         WAITMS(500)
      END_IF
   CASE(7)
      IF_PICTURE_IN (0,0, $_xmax,$_ymax, "7.bmp", -1, 95)
         LCLICK($_return1+9, $_return2+9)
         WAITMS(500)
      END_IF
   CASE(8)
      IF_PICTURE_IN (0,0, $_xmax,$_ymax, "8.bmp", -1, 95)
         LCLICK($_return1+9, $_return2+9)
         WAITMS(500)
      END_IF
   CASE(9)
      IF_PICTURE_IN (0,0, $_xmax,$_ymax, "9.bmp", -1, 95)
         LCLICK($_return1+9, $_return2+9)
         WAITMS(500)
      END_IF
   END_SWITCH
   
END_CYC

IF_PICTURE_IN (0,0, $_xmax,$_ymax, "ок.bmp", -1, 95)
   LCLICK($_return1+9, $_return2+9)
   WAITMS(500)
END_IF

[/spoiler]

chan78

  • Зашел в гости
  • *
  • Posts: 4
    • View Profile
Проблема не в том, зачем, а в том как обработать заданные координаты.

chan78

  • Зашел в гости
  • *
  • Posts: 4
    • View Profile
Спасибо за помощь.

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
А клавиатурой эти цифры не набираются что ли? Только кликами?

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Держи готовый. Ничего прописывать не нужно кроме вводимых координат.
Клавиатура может быть в любом месте.
Скрипт+картинка
Code: (clickermann) [Select]
$x= -9508
$y= -5050

SUB(cl, $parX, $parY)
    LCLICK(($fx + $step * $parX), ($fy + $step * $parY))
    WAITMS(300)
END_SUB

SUB(нажатие, $num)
    WAITMS(500)
    LOGWRITE($num)
    IF($num < 0)
        cl(0, 3) // минус
    END_IF
   
    $num = ABS($num)
    FOR($i=1, $i < STRLEN($num)+1)
        $n = STRCUT($num, $i, 1)
        LOGWRITE($n)
        IF($n = 0)
            cl(1, 3)  // ноль
        ELSE
            $dy = INT(($n-1) / 3)
            $dx = $n - ($dy*3) - 1
            cl($dx, $dy)  // 1...9
        END_IF
    END_CYC
    cl(2, 3) // Ok
END_SUB

SUB(init)
    GETSCREEN
    IF_PICTURE_IN(0,0, $_xmax,$_ymax, "base.bmp", -1, 97)
        $_r1 = $_return1
        $_r2 = $_return2
    ELSE
        LOGWRITE("Клавиатура не найдена")
        HALT
    END_IF
END_SUB

//==============================================================================

WAITMS(300)
init()
$step = 72
$fx = $_r1 + 20
$fy = $_r2 + 102

LOGWRITE("вводит х")
LCLICK($_r1+5, $_r2+5)
нажатие($x)
LOGWRITE("вводит y")
LCLICK($_r1+5, $_r2+45)
нажатие($y)
HALT
« Last Edit: April 05, 2017, 09:17:29 AM by Vint »


chan78

  • Зашел в гости
  • *
  • Posts: 4
    • View Profile
Ой, закидали вариантами!!! Спасибо огромное, ребята, за ваш труд и помошь!!! Буду разбираться. Моему мозгу фрезеровщика с 20-ти летним стажем, с трудом дается правильная программерская мысль :) Поэтому и логика кривая :)

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Я пока свою версию ваял kiril уже выкатил 2 вариант. Не стал уже удалять, жалко. Нужно было страницу обновить.

Моему мозгу фрезеровщика с 20-ти летним стажем, с трудом дается правильная программерская мысль :) Поэтому и логика кривая :)
Нужно было работать наладчиком станков с ЧПУ  :) У меня 2 друга закончили с такой специальностью, вот только они гораздо дальше от программирования, чем ты. Вот такая судьба.